Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

xpl01t
2015-04-02 11:19:31

Если в вашей ситуации код пишется для всех контроллеров в сборке, то самым простым способом будет проверка готовности UART.
<code>
if(Serial.available())
{
// do some stuff
}
<code>
В зависимости от библиотеки SoftwareUART данная функция может быть не реализована. В таком случае можно её реализовать отправкой тестового пакета(отправить 1 байт и ждать ответ до таймаута).

Ещё в такой конфигурации нужно думать об идентификаторах для каждой ардуины, т.к. мастер может не знать от кого получены данные, а слейв не сможет определить, нужно ли эти данные обработать или переслать дальше по цепи...

sergiu920
2015-03-09 15:03:17

Приветствую дорогие форумчани! У меня к вам такой вопрос: Как узнать количество подключенных плат на данный момент, которые подключены через UART. То есть я знаю точно что например сейчас я подключил 3 платы, но мне надо чтобы это число 3 была видна в SerialMonitor.

На всех ардуинок должен быть один и тотже код программы.

Вот код которыи загружен на платах на данный момент:

#include <SoftwareSerial.h>

SoftwareSerial Serial_1 = SoftwareSerial(2,3); //Rx , Tx

int incoming = 0;
int incoming1 = 0;
int analogValue = 0;
int count_device = 0;
int val;

void setup()
{
  Serial.begin(9600);  //Begin Serial to talk to the Serial Monitor   
  Serial_1.begin(9600); //Begin Serial to talk to the Rx Arduino
  Serial.print("Количество подключенных плат: ");
  Serial.println(count_device);
}

void loop()
{
  analogValue = analogRead(0); //Считаем данные с потенциометра
  
/*  Через Serial Monitor отправляем число которая означает номер платы с которой хотим получить данные.
Например у меня подключено 3 платы. К каждой плате подключен один потенциометр к аналоговуму входу 0. Через Serial Monitor 
я отправляю например число 2. Это означает что я хочу получить данные с потенциометра который подключен ко второй плате. 
*/ 
 incoming = Serial.available(); 
  
  while (incoming != 0)           
  {
    nr_device_out = Serial.parseInt(); // В начале в переменную nr_device_out попадает число 2. 
    
    nr_device_out--; // Декрементируем. 2 - 1 = 1
    if (nr_device_out == 0) // Число 1 не равна нулю, значит через SoftwareSerial передаем число 1 к второй плате. 
    {
    /*
    Получаем данные с потенциометра который подключен к ардуино с номером которого послали через Serial Monitor, в нашом случае со второй платы.
    */
     Serial.println(analogValue); 
    }
    else{
       Serial_1.print(nr_device_out); // передаем число 1 к второй плате через SoftwareSerial. 
    }
    incoming = Serial.available();
  }

  //     From the Rx Arduino
  incoming1 = Serial_1.available();  // Получаем данные со второй платы
  
  while(incoming1 != 0)           //While there is something to be read
  {
    
    Serial.write(Serial_1.read()); // Выводим значение потенциометра, который подключен к второй платы.
    incoming1 = Serial_1.available();
  }
}

И вот я хочу чтобы в переменную count_device  попало число, которая означает количество подключенных плат на данный момент.

ВОПРОС: Как вычислить количество подключенных плат, которые соединены между собой через  UART ?

На изображение показано как я соединил платы :
h_1425902534_2308578_4abd52dad6.jpg

Спасибо и жду Ваших ответов!

Извиняюсь за мой русский!

Підвал форуму