Проблема с управлением нагрузкой на выводах Ардуино
- Войдите на сайт для отправки комментариев
Чт, 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?