Как определить конец цепочки, когда ардуинки соединены последовательно через UART (Tx/Rx) ?
- Войдите на сайт для отправки комментариев
Приветствую дорогие форумчани! У меня к вам такой вопрос: Как определить конец цепочки, когда ардуинки соединены последовательно через UART (Tx/Rx) ?
Или другими словами как определить последнею ардуинку из цепочки?
Описание проекта, над которым я работаю:
В общем я работаю над одним проектом который состоит из базы(плата FPGA) и пару плат arduino, соединены последовательно через UART. Этот проект я делаю вместе с коллегой, он занимается базой(плата FPGA), а я с платами arduino. К каждой плате arduino будет соединен один светодиод и один потенциометр.
С базы FPGA мне отправит пакет с данными, который состоит из 2 байта.
Изначалоьно оба байта будут 0. У нас такое условие, если первый байт является 0 то сканируем цепочку и узнаем кол-во ардуинок в цепочки, инкрементируя первый байт. То есть отправляем первый байт, потом отправляем второй байт и проверяем если первый байт равен нулю то инкрементируем второго байта на 1 к каждой плате. Таким образом мы узнаем кол-во ардуинок из цепочки.
В общем задача состоит из того что нужно узнать кол-во ардуинок из цепочки.
Описание проблемы: Каждый раз когда инкрементируется второй байт, то я отправляю на базу текущее кол-во плат. То есть сканирую первую плату, отправляю 1, сканирую вторую плату, отправляю 2, сканирую третию плату, отправляю 3 и т.д.
Допустим цепочка состоит из 3 плат, на данный момент я на базу отправляю 1(первая плата) 2 (вторя плата) и 3(третья плата), то есть 123. А нужно отправить только один байт в котором будет кол-во плат, в данном примере нужно отправить только 3 а не 123.
Текущии скетч загруженный на платах ардуино:
#include <SoftwareSerial.h>
SoftwareSerial Serial_1 = SoftwareSerial(2,3); //Rx , Tx
int incoming = 0;
int incoming1 = 0;
boolean NeedTwoByte = true;
int byte1 = 0;
int comanda = 0;
int val = 0;
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
}
void loop()
{
if(Serial.available()){
if (NeedTwoByte){
byte1 = Serial.read();
NeedTwoByte = false;
}
else{
comanda = Serial.read(); // Читаем второй байт.
if(byte1=='0'){ // Если первый байт равен 0 то инкрементируем второй байт.
comanda++;
Serial.write(comanda); // Отправляем текущее значение второго байта.
// Отправляем байты к второй ардуинки по Tx.
Serial_1.write(byte1); // Равен 0
Serial_1.write(comanda);
}
NeedTwoByte = true;
}
}
// ==================== From the Rx Arduino ===============
incoming1 = Serial_1.available();
while(incoming1 != 0) //While there is something to be read
{
val = Serial_1.read();
Serial.write(val); // Выводим кол-во плат. Получаем 123 а нужно только 3.
incoming1 = Serial_1.available();
}
}
Как узнать кол-во ардуинок из цепочки и отправить на базу только один байт в котором будет данное кол-во ?
На всех ардуинок должен быть один и тот же скетч.
Сначала подумалось что кто то решил проверить старую теорию о миллионе обезьян и печатных машинках. Типа безсмыслено долбя кнопки напишут Войну и Мир.. поэтому и наблюдаем такое обилие девелопер бордов и сред под них...
но потом вспомнил старую мудрость, два дебила это сила...
последовательный uart... мдааа ... но просто делать +1 ко второму байту ума не хватает...
sergiu920, насколько принципиально использовать именно UART?
Вы уверены, что Ардуино соеденены именно последовательно? Из описания это не очевидно.
На столько что это дипломный проект и так профессор сказал. Использовать именно UART. Да, я уверен. Они соеденинены последовательно.