У меня есть скетч, работавший на столе нормально. Но когда я встроил ардуино в реальный девайс (макет элеватора)- появились глюки, связанные с наводками или помехами (это я так мыслю - могу ошибаться). Борьбу с помехами я до того уже проделал - на каждй вход поставил делитель напряжения с 24 на 5В. Даже емкости подключал. но после некоторого "прогрева"произвольно появляется ложный сигнал на движение. Мне нужно контролировать состояние пина во времени - если появился ложный сигнал - на lcd должна появиться звездочка в определенном месте ( для каждого пина свое знакоместо). Я не владею программированием и у меня не скомпилировался контроль пинов if(digitalRead(pin52) = 1) lcd.setCursor(12, 0); lcd.print("* "); else lcd.clear(); if(digitalRead(pin50) = 1) lcd.setCursor(1,1); lcd.print("* "); else lcd.clear(); подскажите как это сделать. Привожу свой скетч: PHP: //Корректировка 7мая после второго включения . pinы упорядочены под удобство разводки шилда #include <LiquidCrystal.h> LiquidCrystal lcd( 6,7,8,9,10,11); // группа входных сигналов. на каждый пин делитель 24/5Вольт #define pinN 50 // включение привода вниз #define pinV 52 // включение привода вверх #define pinTR 36 // включение ТОРМОЗА // группа выходных сигналов. каждый к ЭЭЛ через 1-2кОм: разъем однорядный #define VN 3 // датчик замедления #define TO 4 // датчик точной остановки //#define VV 5 #define DHE 24 // сработал датчик низа #define DVE 26 // сработал датчик верха #define DEL_1 150 // длительность импульса #define DEL_2 250 // задержка между импульсами #define DEL_3 100 // задержка между пачками импульсов #define DEL_4 100 // задержка крайних датчиков byte pins[2] = {TO, VN}; //byte pins[3] = {VV, TO, VN}; char state = 1; int door = 3; void setup() { Serial.begin(9600); lcd.begin(16, 2); // включается дисплей screenInit(); delay(500); pinMode(VN, OUTPUT); pinMode(TO, OUTPUT); //pinMode(VV, OUTPUT); pinMode(DHE, OUTPUT); pinMode(DVE, OUTPUT); //digitalWrite(VV, 1); digitalWrite(TO, 1); digitalWrite(VN, 1); Display();} void loop(){ //**************************************************** if(digitalRead(pinTR) == 1) { if(digitalRead(pinV) == 1) // условие движения вверх ПРОБЛЕМА -помеха!! { if(door < 16) { state++; if(state == 4) state = 0; State(state); } } if(digitalRead(pinN) == 1) // условие движения вниз { if(door > 1) { state--; if(state == -1) state = 3; State(state); }}} //**************************************************** } void State(byte state) { if(state) { static char flag = 0; if(state == 2) { door += flag; Display(); Serial.println(door); flag = 0; } else if(state == 1) flag = 1; else if(state == 3) flag = -1; byte pin = pins[state-1]; digitalWrite(pin, 0); delay(DEL_1); digitalWrite(pin, 1); if(state == 1 || state == 3)//вводим крайние датчики { delay(DEL_2 - DEL_4); if(door == 2) digitalWrite(DHE, 1); else digitalWrite(DHE, 0); if(door == 15) digitalWrite(DVE, 1); else digitalWrite(DVE, 0); delay(DEL_4); } else delay(DEL_2); } else delay(DEL_3);} void Display() { lcd.clear(); lcd.setCursor(2, 1); lcd.print("door "); lcd.setCursor(8, 1); if(door < 10) lcd.print(' '); // обеспечиваем несмещение текста lcd.print(door); if(door == 1) { lcd.setCursor(1, 1); lcd.print("DNE"); } if(door == 16) { lcd.setCursor(1, 1); lcd.print("DVE"); }} // заставка при включении void screenInit() { lcd.clear(); lcd.setCursor(3, 0); lcd.print("=ELEVATOR="); delay(2000); }
Я неточно выразился. У меня один из входов, обвязанный как положено, реагировал как на сигнал помехи. В скетче есть условие "И"наличия двух единиц одновременно для начала движения. if(digitalRead(pinTR)==1){ if(digitalRead(pinV)==1) И мне нужно было узнать какой из них выдает ложную "1". Как оказалось, глюк был из-за брака в металлизации отверстия шилда. http://forum.amperka.ru/threads/Пайка-на-proto-shield.3057/#post-23991
Код (Text): if(digitalRead(pinTR)==1){ if(digitalRead(pinV)==1) { ... } } == Код (Text): if(digitalRead(pinTR)==1 && digitalRead(pinV)==1) { ... }
Можно. Но я в итоге пришел к записям вида x == true как более наглядным. Понять смысл можно при любой записи, но так оно сразу в глаза бросается. То же самое с разделением отдельных по смыслу кусочков кода пустыми строками - можно писать и сплошняком, но с пустыми строчками оно лучше в глаза бросается. В общем, дело вкуса