Как узнать текущее количество плат ардуино подключенные через UART
- Войдите на сайт для отправки комментариев
Пт, 06/03/2015 - 17:13
Приветствую дорогие форумчани! У меня к вам такой вопрос: Как узнать количество подключенных плат на данный момент, которые подключены через 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 ?
На изображение показано как я соединил платы :

Спасибо и жду Ваших ответов!
Извиняюсь за мой русский!
на каждую плату добавить протокол запроса и ответа :
если с "сервера" идет сообщение типа "скажи кто ты" то "клиент" отвечает : "я плата номер 5"
и сервер у себя подсчитывает,сколько разных плат ему ответили .
это решение "на пальцах" ,то есть детали нужно прорабатывать.
А зачем вам автоматически считать сколько у вас плат? Вы хотите, чтобы скетч на всех slave arduino был одинков и вы могли создав массив incoming в цикле читать значения со всех slave arduino? Вы при взаимодействии дуин будите в одну сторону гонять информацию от slave к master'у ?
Почитайте тут, и ваши мучения закончатся :)
Не первый день тут.но до сих пор не знаю как также оформлять ссылки.в смысле как предыдущем посте.подскажите
Пишите "тут", "там", "отсюда" или любое что нравиться :) выделяете это слово или текст и жмакаете на маленький глобус в меню над окном собщений. Далее вставляем адрес ссылки все...
УАЗИКЁЁЁ!!!!!
спасибо
А зачем вам автоматически считать сколько у вас плат?
Ответ: Это курсовик и препод сказал так сделать, вот я и пытаюсь сделать.
Вы хотите, чтобы скетч на всех slave arduino был одинков и вы могли создав массив incoming в цикле читать значения со всех slave arduino?
Ответ: Да так надо чтобы на всех ардуин был один и тотже скетч. Нет, дело в другом. Я этот проект делаю с коллегой, он занимается платой FPGA Altera. Он должен прислать мне пакет из 2 байта, один байт указывает с какой платы ардуино получить данные а во втором байте будут 3 команды, 2 для светодиода( включить и выключить) и одна команда для потенциометра (считать данные). В начале и в конце каждого байта будет еще и бит старт(перед байтом) и стоп(в конце байта). Я должен отправить ему обратно номер ардуинки с которой считались данные и соответсвенно данные.
Возвращаюсь к первому вопросу. Ответ: Видимо мне нужно подсчитать кол-во плат для того чтобы мой коллега знал сколько плат подключены, для того чтобы он знал какой ардуинки отправлять пакет.
Вы при взаимодействии дуин будите в одну сторону гонять информацию от slave к master'у ?
Ответ: Я буду гонять информацию в обе стороны. В одну сторону ( с мастера к slave ), это когда приходит пакет с номером ардуинки и команды для этой ардуинки, а в другую сторону ( с slave к мастеру ) уже номер ардуинки с которой считались данные и соответсвенно данные.
Записать уникальный идентификатор в EEPROM.
Правда хардкод, но скетчи будут одинаковые.
Обратите внимание на подключение по ссылке которую я давал выше.
алгоритм может быть следующим: при запуске master arduino шлет в uart пакет типа "кто здесь?", в ответ каждый slave arduino шлет что то типа "я здесь!", master arduino считает откликнувшихся(тупо считает кол-во прилетевших пакетов) складывает, таким образом вы получите кол-во контролеров.
в качестве совета: реализуйте подключение и обмен через uart используя прерывание - избавитесь от многих проблем в последствии.
тест
на каждую плату добавить протокол запроса и ответа :
если с "сервера" идет сообщение типа "скажи кто ты" то "клиент" отвечает : "я плата номер 5"
и сервер у себя подсчитывает,сколько разных плат ему ответили .
это решение "на пальцах" ,то есть детали нужно прорабатывать.
А можно более подробно как это сделать?
Начнем по порядку.
Как добавить на каждую плату протокол запроса и ответа?
на каждую плату добавить протокол запроса и ответа :
если с "сервера" идет сообщение типа "скажи кто ты" то "клиент" отвечает : "я плата номер 5"
и сервер у себя подсчитывает,сколько разных плат ему ответили .
это решение "на пальцах" ,то есть детали нужно прорабатывать.
А можно более подробно как это сделать?
Начнем по порядку.
Как добавить на каждую плату протокол запроса и ответа?
Предлагаю определиться: Вам алгоритм подсказать как это сделать или кусок готового скетча написать? :)
Предлагаю определиться Вам нужно алгоритм подсказать или кусок скетча готовый налобать?
на каждую плату добавить протокол запроса и ответа :
если с "сервера" идет сообщение типа "скажи кто ты" то "клиент" отвечает : "я плата номер 5"
и сервер у себя подсчитывает,сколько разных плат ему ответили .
это решение "на пальцах" ,то есть детали нужно прорабатывать.
А можно более подробно как это сделать?
Начнем по порядку.
Как добавить на каждую плату протокол запроса и ответа?
Предлагаю определиться: Вам алгоритм подсказать как это сделать или кусок готового скетча написать? :)
Предлагаю определиться Вам нужно алгоритм подсказать или кусок скетча готовый налобать?
Напишите кусок готового скетча а потом подскажите алгоритм, для тобо чтобы мне было легче разобратся что и как. Спасибо!!!
Предлагаю под чутким руководством форумчан напрячь мозг всетаки самому :). Итак запускаем стимулирующие мероприятия для головного мозга студента:
Сначала читаем тут про то как придать каждой плате уникальный номер, который бы сохранялся даже при выключения питания платы.
Потом идем сюда и без всякого зазрения совести тупо пи№дим код для двухпроводной схемы.
Потом заливаем скет из двух строчек который запишет в EEPROM идентификатор платы ( для каждой платы свой). Потом из второй ссылки заливает постоянные скетчи на платы - допиливаем светодиоды и крутяшки, выпячиваем грудь колесом и идем сдаваться преподу.
Ну уж если и после этого будут вопросы - предлагаю пойти сразу к преподу и попросить его поставить двойку, чтоб уже не не мучаться :)
Удачи...
Предлагаю под чутким руководством форумчан напрячь мозг всетаки самому :). Итак запускаем стимулирующие мероприятия для головного мозга студента:
Сначала читаем тут про то как придать каждой плате уникальный номер, который бы сохранялся даже при выключения питания платы.
Потом идем сюда и без всякого зазрения совести тупо пи№дим код для двухпроводной схемы.
Потом заливаем скет из двух строчек который запишет в EEPROM идентификатор платы ( для каждой платы свой). Потом из второй ссылки заливает постоянные скетчи на платы - допиливаем светодиоды и крутяшки, выпячиваем грудь колесом и идем сдаваться преподу.
Ну уж если и после этого будут вопросы - предлагаю пойти сразу к преподу и попросить его поставить двойку, чтоб уже не не мучаться :)
Удачи...
Как придать каждой плате уникальный номер, я понял. А что делать дальше?
На всех ардуинок должен быть один и тот же скетч.
Как создать пакет типа "кто здесь?" который отправлю с компа (пока что только он у меня может быть мастером), в ответ каждый slave arduino пошлет, что то типа "я здесь!".
И как slave arduino пошлет ответ "я здесь!" ?
Дальше, master считает откликнувшихся(тупо считает кол-во прилетевших пакетов - Как он это сделает? ) складывает, таким образом вы получите кол-во контролеров.
Скетчи из второй ссылки думаю, мне не подходят, так как на всех ардуинок должен быть один и тот же скетч и ардуинки соединены между собой через SoftwareSerial и Serial.
Огромная просьба к Вам, опишите Ваш ответ как можно подробнее, что бы мне было четко ясно, что делать дальше и впоследствии у меня будут меньше вопросов, а если все пойму, то вообще не будут.
Еще раз огромное Вам спасибо за помощь!
Записал уникальный идентификатор в EEPROM. Что делать дальше?