Проблема с управлением нагрузкой на выводах Ардуино
- Войдите на сайт для отправки комментариев
Чт, 29/03/2018 - 21:55
Всем привет. Прошу помощи в решении одной проблемы. Суть такова. Собираю контроллер, который будет уплавлять нагрузкой. Пока вместо нагрузки подключил светодиоды с резисторами. Контроллер считывает значение напряжения на аналоговых входах, и в зависимоти от напряжения включает или отключает нагрузку. Суть проблемы такова: программа работает не адекватно. При считывании с порта A0 все работает нормально, нагрузка на выходах включается и отключается, а при считывании напряжения с других аналоговых потров, выход "sp" работает неадекватно: светодиод либо горит в полнакала, либо моргает. Как изменить код, чтобы все работало нормально? Заранее спасибо!
int res = 7; int pl = 6; int pp = 5; int zl = 4; int zp = 3; int sp = 2; float FLValue = 0; float FRValue = 0; float RLValue = 0; float RRValue = 0; void setup(){ pinMode(res, OUTPUT); pinMode(pl, OUTPUT); pinMode(pp, OUTPUT); pinMode(zl, OUTPUT); pinMode(zp, OUTPUT); pinMode(sp, OUTPUT); } void loop(){ FLValue = analogRead(A0); RLValue = analogRead(A1); FRValue = analogRead(A2); RRValue = analogRead(A3); if (FLValue >= 50){ digitalWrite(sp, HIGH); digitalWrite(pl, HIGH); }else if (FLValue > 0 && FLValue < 50){ digitalWrite(pl, LOW); digitalWrite(sp, LOW); } if (RLValue >= 50){ digitalWrite(sp, HIGH); digitalWrite(zl, HIGH); }else if (RLValue > 0 && RLValue < 50){ digitalWrite(zl, LOW); digitalWrite(sp, LOW); } if (FRValue >= 50){ digitalWrite(sp, HIGH); digitalWrite(pp, HIGH); }else if (FRValue > 0 && FRValue < 50){ digitalWrite(pp, LOW); digitalWrite(sp, LOW); } if (RRValue >= 50){ digitalWrite(sp, HIGH); digitalWrite(zp, HIGH); }else if (RRValue > 0 && RRValue < 50){ digitalWrite(zp, LOW); digitalWrite(sp, LOW); } }
Для начала выясните почему он моргает: натыкайте в каждом месте, где происходит digitalWrite(sp,..) по Serial.println(...). Наверняка у вас этот светодиод включается и выключается по сто раз в секунду.
Судя по программе чтобы на "sp" был стабильный уровень 1, на всех аналоговых входах должно быть >=50.
Если >=50 нет хотя бы на одном входе, этот вход тут же опускает "sp" в ноль.
И да, почему переменные analogRead float?