rf-433 раз в сутки начинает считывать только первый символ сообщения.
- Войдите на сайт для отправки комментариев
Добрый день, уважаемые форумчане. Хотел сделать сигнализацию подвала на rf-433 (самый дешевый из них). Иногда начинались сбои в работе. Включил через монитор порта отслеживание порта. В итоге после того как происходит такой сбой начинает принимать не слово (например "GOD" а просто символ "G". Принимал абсолютно каждый посыл, без пропусков, но почему-то только первый символ.. Думал шумы, помехи, но ведь доходили совершенно все сигналы (первая буква их). К тому же я походил по комнате в поисках полного сигнала, но безуспешно, только первая буква и всё. А после сброса ардуины-приёмника сразу же опять начинало принимать полностью сигналы. Использовал библиотеку VirtualWire. питание от 18650 и ардуины и приемника (параллельно постоянно подзаряжаемой от блока питания телефонного или USB через плату подзарядки liion) .
текст прошивки (отрывок, зацикленный):
выкладывайте полный код
#include <VirtualWire.h> bool m,n,b,p,g; //f-для писка малого динамика g-показывает взломана ли дверь unsigned long timer1,timer2,timer3,timer4; //для связи с сигнализацией,для заряда,для мигания,для писка малого динамика byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения void setup() { vw_set_rx_pin(12); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(8, OUTPUT); // pinMode(13, INPUT); ////УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! pinMode(9, OUTPUT); pinMode(10, OUTPUT); timer3=millis(); timer4=millis(); b=true; //Serial.begin(9600); // для передачи на экран принятого (//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } void loop() { if ((millis() - timer3) > 1000 ) { b=!(b);timer3=millis(); if (b==true) {digitalWrite (9,HIGH); } else {digitalWrite (9,LOW); }} if (vw_get_message(message, &messageLength)) // Если есть данные.. { // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('1');} //УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ!!!!!!!!!!!!!!!! if ((message[0]=='v'&& message[1]=='k'&&message[2]=='l')||(message[0]=='g'&&message[1]=='o'&&message[2]=='d')) // Если принято слово vkl {tone(10, 5000);delay (500);noTone(10); digitalWrite (3,HIGH);n=false; m=false;p=false ;g=false;timer1=millis(); // if (digitalRead(13) == HIGH) {Serial.write('2');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! while (p==false) //пока не пришло сообщение что дверь открыли ключом { // if (digitalRead(13) == HIGH) {Serial.write('3');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (vw_get_message(message, &messageLength)) // Если есть данные.. { // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('4');} //УДАЛИТЬ ПОСЛЕ!!!!!!!!!!!!!!!!!!! //tone(10, 5000);delay (300);noTone(10);//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ (писк при любой приемке сигнала)!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (message[0]=='b'&& message[1]=='a'&&message[2]=='d')// Если принято слово bad (взлом двери) {digitalWrite (8,HIGH);g=true;tone(10, 5000);} if (message[0]=='o'&&message[1]=='t'&&message[2]=='k')// Если принято слово otk (открыта дверь ключом) {p=true;} if (message[0]=='g'&&message[1]=='o'&&message[2]=='d')// Если принято слово god (проверка связи) { timer1=millis();m=false; digitalWrite (5,LOW); if ((n==false) && (g==false)) {noTone(10);}} if (message[0]=='l'&&message[1]=='o'&&message[2]=='w')// Если принято слово low (малый заряд) { n=true; timer2=millis();digitalWrite (6,HIGH); } //if (digitalRead(13) == HIGH) {Serial.write('5');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } if ((millis() - timer1) > 6000000 )//если сигнал о связи не приходит долго {m=true; digitalWrite (5,HIGH);} // if (digitalRead(31) == HIGH) {Serial.write('6');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!! if ((n==true)&&((millis() - timer2)> 70000))//если долго не приходит сигнал о выключеном питании {n=false;digitalWrite (6,LOW); if ((m==false) && (g==false)) {noTone(10);};} // if (digitalRead(13) == HIGH) {Serial.write('7');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!! if ((g==false)&&((m==true)||(n==true)))//если не взломали дверь и(отключено питание или долго не доходит заряд) { // if (digitalRead(13) == HIGH) {Serial.write('8');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if ((millis() - timer4 )> 500 ) {noTone(10); } if ((millis() - timer4) > 9500 ) { timer4=millis();tone(10, 5000);} } if ((millis() - timer3) > 1000 ) { b=!(b);timer3=millis(); if (b==true) {digitalWrite (9,HIGH); } else {digitalWrite (9,LOW); }} // if (digitalRead(13) == HIGH) {Serial.write('9');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!! } digitalWrite (9,HIGH); noTone(10);g=false;digitalWrite (3,LOW);digitalWrite (5,LOW);digitalWrite (6,LOW);digitalWrite (8,LOW); tone(10, 5000);delay (500);noTone(10);}; } }я за 5 лет второй раз обращаюсь. Первый раз причем мне нахамили и не помогли в итоге. Не удивлюсь если снова так будет.
я за 5 лет второй раз обращаюсь. Первый раз причем мне нахамили и не помогли в итоге. Не удивлюсь если снова так будет.
прочитайте прикрепленную тему в Песочнице - первое и второе сообщение. Вставьте код правильно. Без этого с Вами никто разговаривать не будет.
Спасибо за рекомендацию! исправил (см. ранее). Заранее извиняюсь что не сделал так сразу.
byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?
А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв
byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?
А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв
Попытка не пытка. Может кто попадется отзывчивый, например посоветует контроллер поменять или плату заэкранировать или еще какие-нибудь предположения. В передатчик не лезу уже неделю-он безошибочно вещает, это подтверждено тем, что после сброса контроллера приемника он по прежнему работает почти полные сутки без сбоев, именно после перегрузки контроллера. Я просто ищу может у кого была похожая проблема? Может тонкость есть там какая-нибудь, например буфер какой-нибудь переполняется к примеру-я ведь в этой библиотеке не совсем ориентируюсь.
byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?
А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв
Попытка не пытка. Может кто попадется отзывчивый,
Попытка не пытка. Может кто попадется отзывчивый
Вместо того, чтоб ждать "отзывчивого" - может все-таки сделаете над собой усилие и поможете тем, кто будет влезать в ваш код? стоило бы для начала код "причесать", чтобы его можно было читать нормально. Мне кажется, что у вас проблема с вложенностью циклов (то есть условия вложены неправильно) - но, повторюсь, в этой каше разобраться тяжело.
byby22 - вот вы опять скажете, что вас троллят - но это не код... а просто какая-то помойка. Вы специально старались отформатить его так, чтоб было максимально неудобно разбираться? - неужели так трудно правильно расставить отступы и скобки, поместить по одному оператору на строчку? Вставить пробелы между членами логических выражений?
А если по делу -насколько я могу разобраться в этой каше - проблема на стороне передатчика. Думаю, его код нужен тоже. Но если там такая же жуть намешана - с вероятностью процентов 80% никто не полезет копаться в этой куче бессмысленных букв
Попытка не пытка. Может кто попадется отзывчивый,
Спасибо за бесполезно потраченое время!)
Спасибо за бесполезно потраченое время!)
а вы не юродствуйте, а лучше слушайте советы
Попытка не пытка. Может кто попадется отзывчивый
Вместо того, чтоб ждать "отзывчивого" - может все-таки сделаете над собой усилие и поможете тем, кто будет влезать в ваш код? стоило бы для начала код "причесать", чтобы его можно было читать нормально. Мне кажется, что у вас проблема с вложенностью циклов (то есть условия вложены неправильно) - но, повторюсь, в этой каше разобраться тяжело.
цикл там всего один. и ошибку я проверяю всего парой строчкой:
if (vw_get_message(message, &messageLength)) // Если есть данные.. { for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); }и читаю что он поймал. Так вот, когда он не "глючит"-монитор порта пишет полностью сообщения, а после того как глюканет-в монитор порта выводятся только первые буквы сообщения. Ну а скетч полностью Вы зачем-то попросили, зачем вам вдаваться в его подробности мне лично вообще не понятно совсем, но раз Вы попросили-я его предоставил. В любом случае СПАСИБО за то что не прошли мимо.
ну не хотите - как хотите. Вы за 5 лет не только код вставлять, но и вопросы правильно задавть не научились.
ждите отзывчивого
byby22, Для ловли подобной ошибки скетч нужен как можно более короткий, но рабочий. По-этому, кусочка из начального сообщения мало, а полного скетча много. Вы бы оставили в скетче только инициализацию приёмника и в лупе две строчки из сообщения #12. Посмотрели, воспроизводится ошибка или нет. Стало бы понятно - имеет значение остальной код или нет. Дальше, возможно, с передатчиком то же самое сделать нужно будет. Надо как-то локализовывать ошибку.
kalapanga - не вполне согласен. У него в коде сообщение читается как минимум в 2х местах (если не в трех - ХЗ что разберешь в этой мешанине), причем одно чтение вложено в другое. Так что сдается мне. что глюк надо искать в полном коде.
А обозначенного маленького куска в конечном коде ВООБЩЕ НЕТ...
Это я видел. Написано конечно неудачно. И сообщения в двух местах читаются и while ещё там, в котором тоже небось застрять можно. Вот я и предлагаю оставить в скетче одно единственное чтение с выводом в порт. А то может передатчик, в котором автор так уверен, всё-таки не дело передаёт. Так хоть его отсеем.
kalapanga - не вполне согласен. У него в коде сообщение читается как минимум в 2х местах (если не в трех - ХЗ что разберешь в этой мешанине), причем одно чтение вложено в другое. Так что сдается мне. что глюк надо искать в полном коде.
А обозначенного маленького куска в конечном коде ВООБЩЕ НЕТ...
количество мест в которых встречается прием можно посчитать, воспользовавшись Ctrl+F.
Очевидно что их всего 2 шт. И на мой взгляд очевидно что функцию отправки на монитор порта я оставил за комментариями, чтобы вас не отвлекать, но если присмотреться, то эта функция присутствует практически сразу же после каждого из 2-ух мест приёма сообщения (чтобы я не пропускал ни одного из входящих сообщений). Ну а одно вложено в другое, т.к. по алгоритму я так решил. И сам код рабочий-он у меня работает и срабатывает (причем не однократно проверян), но раз в сутки где-то происходит сбой, после которого начинает принимать почему-то не всё слово, а только первый символ. Вот и думаю-или контроллер глючит или есть где-то буфер который переполняется и который еще и обнулять нужно перед каждым приёмом.
byby22 - все что вам представляется "очевидным" - вы уже излагали в первом сообщении. Но мне очевидно, что ваших знаний в данной ситуации недостаточно, так как в противном случае вы не пришли бы на форум. Поэтому у вас два пути - либо вы слушаете советы и выполняете их, и мы попытаемся найти ошибку - либо вы поступаете по своему разумению - и ищете ошибку сами.
Это я видел. Написано конечно неудачно. И сообщения в двух местах читаются и while ещё там, в котором тоже небось застрять можно. Вот я и предлагаю оставить в скетче одно единственное чтение с выводом в порт. А то может передатчик, в котором автор так уверен, всё-таки не дело передаёт. Так хоть его отсеем.
За единственно пока логичный совет спасибо. Единственный минус-сбой встречается где-то раз в сутки. Эксперимент довольно длительный(( Но если другого выхода не будет, придётся к нему прибегнуть.
Насчет передатчика даже не сомневайтесь. Я к нему не подхожу. И простой эксперимент-специально в подвале делаю чтобы сработала сигнализация. В таком случае он присылает каждую секунду сообщение "bad". Так вот, в этот момент если он еще не заглючил приходит это слово. Как только приемная сторона заглючила, каждую секунду, без пропусков приходит "b". Отключаю сигнализацию в подвале (приемник все еще работает)-вместо "otk" приходят сообщения "о". И так любые сообщения. Но как только сделаю сброс контроллеру приемника, даже не подходя к передатчику (3 этажа расстояние)-мгновенно сново начинают приходить сообщения в полном формате, т.е. "bad" и "otk"
byby22 - все что вам представляется "очевидным" - вы уже излагали в первом сообщении. Но мне очевидно, что ваших знаний в данной ситуации недостаточно, так как в противном случае вы не пришли бы на форум. Поэтому у вас два пути - либо вы слушаете советы и выполняете их, и мы попытаемся найти ошибку - либо вы поступаете по своему разумению - и ищете ошибку сами.
Всё правильно. Но есть вещи которых я сам могу отсеить опытным путём и путём логических размышлений. А есть области, в которых я мало разбираюсь. Например подскажите мне, пожалуйста, вначале программы стоит строка vw_setup(2000); -скорость передачи данных. Так вот, вопрос лично к вам например (сам я не могу на это ответить, но правда очень любопытно). В каком диапазоне эту скорость я могу изменять на данных модулях и влияет ли она на то, насколько устойчивым будет в итоге связь???
Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?
Только у Вас присвоение messageLength = VW_MAX_MESSAGE_LEN нужно перед обоими чтениями воткнуть.
За единственно пока логичный совет спасибо. Единственный минус-сбой встречается где-то раз в сутки. Эксперимент довольно длительный(( Но если другого выхода не будет, придётся к нему прибегнуть.
советую добавить вывод в Сериал еще и переменной messageLength
if (vw_get_message(message, &messageLength)) // Если есть данные.. { Serila.print("Message received, length: "); Serial.println(messageLength); for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); }форматированный код
#include <VirtualWire.h> bool m, n, b, p, g; //f-для писка малого динамика g-показывает взломана ли дверь unsigned long timer1, timer2, timer3, timer4; //для связи с сигнализацией,для заряда,для мигания,для писка малого динамика byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения void setup() { vw_set_rx_pin(12); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(8, OUTPUT); // pinMode(13, INPUT); ////УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! pinMode(9, OUTPUT); pinMode(10, OUTPUT); timer3 = millis(); timer4 = millis(); b = true; //Serial.begin(9600); // для передачи на экран принятого (//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } void loop() { if ((millis() - timer3) > 1000) { b = !(b); timer3 = millis(); if (b == true) { digitalWrite(9, HIGH); } else { digitalWrite(9, LOW); } } if (vw_get_message(message, &messageLength)) // Если есть данные.. { // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('1');} //УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ!!!!!!!!!!!!!!!! if ((message[0] == 'v' && message[1] == 'k' && message[2] == 'l') || (message[0] == 'g' && message[1] == 'o' && message[2] == 'd')) // Если принято слово vkl { tone(10, 5000); delay(500); noTone(10); digitalWrite(3, HIGH); n = false; m = false; p = false; g = false; timer1 = millis(); // if (digitalRead(13) == HIGH) {Serial.write('2');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! while (p == false) //пока не пришло сообщение что дверь открыли ключом { // if (digitalRead(13) == HIGH) {Serial.write('3');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (vw_get_message(message, &messageLength)) // Если есть данные.. { // for (int i = 0; i < messageLength; i++) {Serial.write(message[i]); } Serial.println(); if (digitalRead(13) == HIGH) {Serial.write('4');} //УДАЛИТЬ ПОСЛЕ!!!!!!!!!!!!!!!!!!! //tone(10, 5000);delay (300);noTone(10);//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ (писк при любой приемке сигнала)!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (message[0] == 'b' && message[1] == 'a' && message[2] == 'd') // Если принято слово bad (взлом двери) { digitalWrite(8, HIGH); g = true; tone(10, 5000); } if (message[0] == 'o' && message[1] == 't' && message[2] == 'k') // Если принято слово otk (открыта дверь ключом) { p = true; } if (message[0] == 'g' && message[1] == 'o' && message[2] == 'd') // Если принято слово god (проверка связи) { timer1 = millis(); m = false; digitalWrite(5, LOW); if ((n == false) && (g == false)) { noTone(10); } } if (message[0] == 'l' && message[1] == 'o' && message[2] == 'w') // Если принято слово low (малый заряд) { n = true; timer2 = millis(); digitalWrite(6, HIGH); } //if (digitalRead(13) == HIGH) {Serial.write('5');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } if ((millis() - timer1) > 6000000) //если сигнал о связи не приходит долго { m = true; digitalWrite(5, HIGH); } // if (digitalRead(31) == HIGH) {Serial.write('6');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!! if ((n == true) && ((millis() - timer2) > 70000)) //если долго не приходит сигнал о выключеном питании { n = false; digitalWrite(6, LOW); if ((m == false) && (g == false)) { noTone(10); }; } // if (digitalRead(13) == HIGH) {Serial.write('7');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!! if ((g == false) && ((m == true) || (n == true))) //если не взломали дверь и(отключено питание или долго не доходит заряд) { // if (digitalRead(13) == HIGH) {Serial.write('8');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if ((millis() - timer4) > 500) { noTone(10); } if ((millis() - timer4) > 9500) { timer4 = millis(); tone(10, 5000); } } if ((millis() - timer3) > 1000) { b = !(b); timer3 = millis(); if (b == true) { digitalWrite(9, HIGH); } else { digitalWrite(9, LOW); } } // if (digitalRead(13) == HIGH) {Serial.write('9');}//УДАЛИТЬ В СЛУЧАЕ ПОЛНОЙ УСТАНОВКИ !!!!!!!!!!!!!!!!!!!!!!!!!!!! } digitalWrite(9, HIGH); noTone(10); g = false; digitalWrite(3, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(8, LOW); tone(10, 5000); delay(500); noTone(10); }; } }Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?
Только у Вас присвоение messageLength = VW_MAX_MESSAGE_LEN нужно перед обоими чтениями воткнуть.
ОГРОМНОЕ СПАСИБО ЗА ССЫЛКУ!!!! Попытаюсь переделать и посмотреть, прошел глюк или нет. Скорее всего именно в этом и есть беда, но откуда я мог это знать!!!!! СПАСИБО еще раз. Думаю пока мне информации достаточно.
xDriver, тоже спасибо за помощь.
Не Ваш ли это случай: http://forum.amperka.ru/threads/433%D0%9C%D0%93%D1%86-virtualwire.6962/ ?
похоже что да :)
Функция "vw_get_message" криво написана в библиотеке. Только я бы "лечил" это не так - не выставлял бы messageLength = VW_MAX_MESSAGE_LEN перед каждым чтением, а передавал бы функции "vw_get_message" вместо глобала messageLength временную переменную.
Оффтоп для администрации: впишите в правила размещения кода фразу типа "перед вставкой кода отформатируйте его, или находясь в Arduino IDE нажмите Ctrl+T".
FYI: стоит подумать как установить в форум это: https://github.com/prettier/prettier (мб написать какую-то php-затычку, которая будет передавать автоформаттеру содержимое bb-кода [code] из запощиваемого поста). Системные требования node.js+npm
Оффтоп для администрации: впишите в правила размещения кода фразу типа "перед вставкой кода отформатируйте его, или находясь в Arduino IDE нажмите Ctrl+T".
FYI: стоит подумать как установить в форум это: https://github.com/prettier/prettier (мб написать какую-то php-затычку, которая будет передавать автоформаттеру содержимое bb-кода [code] из запощиваемого поста). Системные требования node.js+npm
Насчет Ctrl+T даже не догадывался. Спасибо за обучение!
Тему можно считать закрытой. Ошибка прошла благодаря вышеперечисленному предложению. Всем спасибо за помощь и неравнодушие!!!