Как определить конец цепочки, когда ардуинки соединены последовательно через 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. Да, я уверен. Они соеденинены последовательно.