Создание протокола приема передачи между ПК и Ардуино

Но это же проще чем передать число 1024 с 10 датчиков чем число 255 . Понять это самое сложное например с пина А1 analog read читаем от 0 .255 и с пина a0 тоже самое от 0.255 отсылаем посредством serial write
В порт ,и нам приходят значения с а0 и с А1 , читаем через serial read, предположим пришло 2 значения 185 и 122
Как именно вынуть только 122 к примеру вот в этом сложность .

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

К RX UART подключается 100 ТХ устройств, и наоборот, к TX UART - 100 RX устройств.)

Общая задача отправить данные , с Ардуино считанные с аналоговых входов , преобразованные из 1024 в 255 . На пк где эти значения должны будут выведены на экран в программе , не в консоль ,а именно на экран , и там отображаться , например функцией text(). Или ещё какой то функцией . Но для этого нужно как то уметь их вычитывать каждое значение по отдельности. Как лучше отправлять все это как байты или как строку я не знаю. Так как потом их нужно ещё как то вычитать с возможностью умножать, делить и тд. Строить графики .

ПК должен быть мастером, по запросу которого к каждому ведомому Ардуино, тот должен давать ответ с данными. Как наиболее простой вариант.

Почитал, так и не понял, чем ТС не устраивает UART для связи ПК<->Ардуино

Никак вы не вынете только 122. В любом случае из порта надо читать все.
И вот тут возникает вопрос, если вам в порт пришло два значения, 185 и 122 - как вы поймёте, где данные от А1, а где А0?

Это я к тому, что ваша идея передавать данные “одним байтом” никак не упрощает проблему. Вы похоже вообще не понимаете сути вопроса и пытаетесь упрощать то, что в “упрощении” не нуждается.

Ваша задачка не сложная и решалась до вас другими многократно. В Ардуино есть и готовые библиотеки для такой передачи.

1 лайк

А если они начнут передачу одновременно, кто будет заниматься арбитражем шины?

Пусть отвечают только по запросу.
Другое дело подтяжка у 100 устройств может быть слишком велика))

Может так сделать: мастер передаёт байт - адрес/номер уст-ва, и, в ответ , получает байт - нужные данные

Это пусть заказчик решает… Но для себя я бы так не делал. Зачем загружать мастера лишней работой заправшивать данные со слейвов?
Значительно проще, как по мне, чтоб каждый слейв отправлял данные по готовности.

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

Так ведь UART это интерфейс , а ТС-у пртокол нужен

1 лайк

Конечно, опытный программист и задачу поставит более грамотно

На самом деле тут для программиста задачка плевая… То есть собственно написать код практически ничего не стоит, готовую библиотеку я бы ТС мог и бесплатно посоветовать :slight_smile:

Основная задача тут будет не написать код, а обучить @les1200 им пользоваться. И вот уже это стоит и 10 тыс и 20 и может и больше :slight_smile:
Судя по теме, он новичок с нулевым уровнем.

Это точно

Да я думаю, @Wizard2022 или написал , или заканчивает уже))

а проблем нет никаких в том что микроконтроллер работает в utf8 кодировке ?
и если одним байтом передавать значение более 127 это будет шестнадцатеричный вид…
и не факт что будет читаться…

а это 2 символа))) или нее ? тут время надо еще уделить заказчику вагон!)))

void setup() {
  // Инициализация последовательного соединения на скорости 9600 бит/сек
  Serial.begin(9600);
}

void loop() {
// Отправка байта 233
Serial.write(117);
Serial.write(178);
Serial.write(233);
  // Ждем 1 секунду
  delay(1000);
}

вопросик у меня, передаем тут 3 символа или 6 ?
и не противоречит ли это ТЗ ?)))
может заказчику это важно…
тут ему подробно все надо описать…

А если несколько датчиков отравляет данные в один и то же момент? Тогда у датчиков будет проблематично слушать на предмет коллизий и повторно отправлять через случайные промежутки времени.

Мы не знаем сколько слейвов будет у ТС, может все датчики включены в общий слейв.

Ну а в целом я на абсолютную истину и не претендовал, других решений не исключаю.

опять накурился? иди проспись

Микроконтроллер ничего не знает ни о каких кодировках

Речь идет о байтах, а не символах. Бабос, ты опять чушь порешь, изверг :sweat_smile:

3 лайка