Проблема с управлением нагрузкой на выводах Ардуино

kvlads
Offline
Зарегистрирован: 29.03.2018

Всем привет. Прошу помощи в решении одной проблемы. Суть такова. Собираю контроллер, который будет уплавлять нагрузкой. Пока вместо нагрузки подключил светодиоды с резисторами. Контроллер считывает значение напряжения на аналоговых входах, и в зависимоти от напряжения включает или отключает нагрузку. Суть проблемы такова: программа работает не адекватно. При считывании с порта 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); 
  }  }
  

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Для начала выясните почему он моргает: натыкайте в каждом месте, где происходит digitalWrite(sp,..) по Serial.println(...). Наверняка у вас этот светодиод включается и выключается по сто раз в секунду.

SegaKHV
Offline
Зарегистрирован: 13.03.2018

Судя по программе чтобы на "sp"  был стабильный уровень 1, на всех аналоговых входах должно быть >=50.

Если >=50 нет хотя бы на одном входе, этот вход тут же опускает "sp" в ноль.

И да, почему переменные analogRead float?