Подключение нескольких arduino uno к одной arduino mega2560

123dmitri123
Offline
Зарегистрирован: 20.11.2013

Всем доброго времени суток. Есть несколько плат arduino uno, на каждой из них при изменениинапряжения на аналоговом пине подсчитывает моргание светодиода и отсылает результат вместе с идентификатором платы(две латинские буквы) через TX на плату Arduino Mega2560.

Код в Arduino Uno:

int analogPin3 = 3;
String Result;
int y=0;
void setup() {               
  pinMode(12, OUTPUT); 
Serial.begin(9600);  
}
 
void loop() 
{
  y=0;
while(analogRead(analogPin3)<300) 
 {
  digitalWrite(12, HIGH);   // зажигаем светодиод
      y=y++;
      
  delay(250); 
  digitalWrite(12, LOW);    // выключаем светодиод
  delay(250); 
 
 }
  if (y!=0)
    {
      String Result = "KZ"+String(y);
  Serial.print(Result);
    } 
 
}
 
Далее в Aduino Mega выполняется следующий код:
 
#include <SoftwareSerial.h>
 
SoftwareSerial port2(8,9);
SoftwareSerial port1(10,11);
char Result;
 
void setup()
{ 
  Serial.begin(9600);
   port1.begin(9600);
   port2.begin(9600);
}
void loop()
{
   port1.listen();
   while (port1.available() > 0) {
    char Result = port1.read();
  Serial.write(Result); 
   }
 
  port2.listen();
   while (port2.available() > 0) {
    char Result = port2.read();
    Serial.write(Result);
  }
}
 
Мега должна принимать от Uno данные по программному com-порту и затем передавать их в программу на компьютере.

Когда я в мегу заливаю скетч только на один программный порт(без кода, выделенного жирным шрифтом) и подключаю к меге только одну Uno, то все работает нормально. Но если я подключаю к меге хотя бы 2 Uno, то вот тут и возникает проблема, из-за которой я вам и пишу, а именно: данные с Uno передаются на мегу, а дальше с меги они то передаются в программу(вместо программы пробовал монитор порта), то не передаются, то передаются кусками неполными. Я предполагаю, что это все из-за того, что мега по очереди слушает каждый из портов, и в тот момент, когда данные, например, передаются по первому порту мега слушает второй(хотя может и ошибаюсь, возможно с кодом накосячил).

Подскажите, пожалуйста, как мне поправить код на меге, так, чтобы при подключении к ней нескольких Uno, она бы нормально считывала поступающие с них данные и отправляла на комп?(данны никогда не будут передаваться одновременно с разных Uno, в один момент времени данные будут идти только с одной платы).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

скорее всего мега нормально отправляет данные, а вот то что вы на один разъем повесили несколько uno вот это и карежит все данные, потому что они отправляют и по отдельности и вместе

123dmitri123
Offline
Зарегистрирован: 20.11.2013

jeka_tm пишет:

скорее всего мега нормально отправляет данные, а вот то что вы на один разъем повесили несколько uno вот это и карежит все данные, потому что они отправляют и по отдельности и вместе

Не совсем понял вашего ответа. На меге создано несколько программных  com-портов, к каждому из которых подключена своя Uno, а вот поступившие данные на меге зате передаются через нулевой аппаратный com-порт на компьютер.

art100
Offline
Зарегистрирован: 09.03.2014

а понятно

Cоздаем новый стек tcp/ip на  ardino-ах.

 

123dmitri123
Offline
Зарегистрирован: 20.11.2013

art100 пишет:

а понятно

Cоздаем новый стек tcp/ip на  ardino-ах.

 

эмм... есть езернет-шилд, а как его под это дело прикрутить?

А с комами ничего не получится чтоли?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если софтварный врядли. либо кидать еще один пин что сейчас будет передача

а в меге же не один uart хардварный, или у вас больше?

123dmitri123
Offline
Зарегистрирован: 20.11.2013

Я же писал, что на меге настроены программнные uart'ы, к которым прикручены ардуины uno, а вот то, что приходит от уна на мегу уже идет через нулевой uart на комп. Я же писал это все выше. Ведь есть же даже пример, в котором читаются данные с двух разных программных uart'ов(у меня в скетче это все написано)

123dmitri123
Offline
Зарегистрирован: 20.11.2013

Неужели нет ни одного человека, который бы мне внятно хоть что-то ответил, мол можно так или ты вот тут не так сделал, и тд.???

barada
Offline
Зарегистрирован: 25.11.2013

меня тоже ждет сопряжение трех контроллеров, но я буду осваивать SPI, что и советую.