Передача через Ethernet функцией DigitalRead
- Войдите на сайт для отправки комментариев
Пнд, 15/03/2021 - 19:46
Всем привет! Господа и дамы, вдруг таковые в наличии, есть проблема с передачей по протоколу Ethernet. Шесть аналоговых сигалов от датчиков температуры передаются функцией analogRead без проблем. Мне нужно передать также данные от расходомера, а он имеет цифровой выход. Предполагаю, что смогу с помощью UART передать слово в Arduino Ethernet, а вот как дальше не знаю. Функция digitalRead передаёт сигнал с какого то конкретного pin. По идее надо выполнять сдвиговые операции, но выглядит это как то туповато. Может кто в курсе? Спасибо.
Все слова знакомые, а смыла уловить не могу.
UART - это там к чему? А сдвиговые операции?
через Ethernet функцией DigitalRead
так не бывает
Расходомер построен на ATmega8, модуль Arduino Ethernet - на Atmega328. Обычно между процами я использую передачу по протоколу UART. Я могу с помощью ЦАП преобразовать цифровой сигнал расходомера в аналоговый и устроить передачу по Ethernet знакомым способом, но это плохой вариант, поскольку теряется точность. Я не знаю, каким образом в скетче указать регистр ATmega328 для передачи. Функция analogRead сама обеспечивает последовательную передачу в контроллер Ethernet, ну а тот знает, что делать дальше.
а как бывает?
а как бывает?
Спросите у разработчика, который вам это написал.
Я, собственно, у него и спрашивал.
Функция analogRead сама обеспечивает последовательную передачу в контроллер Ethernet
что за бред? Кто вам сказал эту чушь?
Я, собственно, у него и спрашивал.
а кто разработчик? Он тут, на форуме?
Вот фрагмент этого "бреда", который работает в моей железке:
EthernetServer server(80); String strData; void setup() { Ethernet.begin(mac, ip); server.begin(); pinMode(pinChOne,OUTPUT); pinMode(pinChTwo,OUTPUT); //assign six analog pin to input // for (int i=14; i<19; i++) pinMode(i,INPUT); // Serial.begin(9600); // Serial.print("Local IP: "); // Serial.println(Ethernet.localIP()); digitalWrite(pinChOne,HIGH); digitalWrite(pinChTwo,LOW); } void loop() { //begin_void EthernetClient client = server.available(); if (client) { //begin_If проверка наличия соединения // boolean sendHeader = false; boolean current_line_is_blank = true; while (client.connected()) { //while_begin if (client.available()) { char c = client.read(); // Serial.print(String(c)); if (cnt==5 && c=='1') //передача первого блока данных { // Serial.println("Channel 1 connected"); digitalWrite(pinChOne,HIGH); digitalWrite(pinChTwo,LOW); } if (cnt==5 && c=='2') //передача второго блока данных { // Serial.println("Channel 2 connected"); digitalWrite(pinChTwo,HIGH); digitalWrite(pinChOne,LOW); } cnt++; if (c == '\n' && current_line_is_blank) { // Serial.println("HTML header is passed"); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); delay(250); strData="!"; for (int i=0; i<4; i++) { strData +=String(analogRead(i)); strData +=";"; } client.print(strData); client.println("<br>"); Serial.println(strData); Serial.println(); strData=""; cnt=0; //сброс счётчика символов клиентского запроса по концу передачи break; } if (c == '\n') { current_line_is_blank = true; } else if (c != '\r') { current_line_is_blank = false; } }//end if(client.available) }//end while delay(1); client.stop(); // Serial.println("Client is stopped!"); }//end if(client) }//end loopМожет укажете номер строки, где аналогрид() " сама обеспечивает передачу значения через эзернет"?
Мда, конфуз вышел. Код писал 4 месяца назад. Ардуино у меня это маленькая, но важная часть проекта, поэтому я не самый большой спец в написании скетчей. Может подскажете хороший способ передачи данных с ATmega8 в Ардуино.
Может подскажете хороший способ передачи данных с ATmega8 в Ардуино.
через UARt можно, только не пишите заумных слов про "регистры". И еще - сами процедуры analogWrite() и digitalWrite() ничего никуда передать не могут. это должна делать ваша программа.
все довольно банально - считали значение с пина digitalWrite(), сохранили в переменную. переменные собрали в пакет и передали по UART. На другом МК этот пакет надо принять и распарсить.
Если, судя по предыдущим высказываниям, в этом тексте вам не все понятно - поищите библиотеку VirtualWire и почитайте примеры к ней
Спасибо. Только процесс в другую сторону. От ATmega8 в Ардуино, а указанную библиотеку и примеры обязательно посмотрю.
Спасибо. Только процесс в другую сторону. От ATmega8 в Ардуино
а есть какая-то разница? :)))
Я жуткий зануда