Импульс мозг кушает.

Илья73
Offline
Зарегистрирован: 06.09.2013

Нужно сделать импульс, регулируемый переменным резистором .

Читаю аналоговый вход где подключен резистор переменный.

Масштабирую его в миллисекунды и вывожу на дисплей.

Все работает как надо.

Светодиод загорается на заданный промежуток в миллисекундах и затем гаснет.

И после этого еле заметно продолжает вспыхивать, вспыхивает с частотой обновления экрана. Она у меня 600 миллисекунд. Меняю частоту обновления и меняется частота вспыхивания.

Как мне убрать это вспыхивание?

#include <LiquidCrystal.h>
LiquidCrystal lcd (12, 11, 5, 4, 3,2);
unsigned long previousMillis = 0;
unsigned long pMillis =0;
int v =0;
int led = 9;
int a = 0;
int e = 0;
void setup ()
{
 lcd.begin (16, 12);
 pinMode (A0, INPUT);
 pinMode(led,1);
}
void loop ()
{ 
  if (millis() - previousMillis >600)
  {
    previousMillis = millis();  
   lcd.clear (); 
   a = analogRead (A0);
   lcd.setCursor (0,0);
   lcd.print ( a);
   lcd.setCursor (0, 1);
   lcd.print (v);
   v = analogRead(A0);
   v = map(v,0,1023,0,3000);
   digitalWrite(led,1);
   if(millis() - pMillis > v)
    {
    digitalWrite(led,0); 
    }
 }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

У вас все обновляется каждые 600 миллисекунд, а не только дисплей, а вспыхивает светодиод от того что вы его включаете в 29 строке, а затем выключаете в 31.

А решить можно так:

  if(millis() - pMillis > v) 
  {
    digitalWrite(led,0); 
  }
  else 
  {
    digitalWrite(led,1);
  }

 

Илья73
Offline
Зарегистрирован: 06.09.2013

maksim , еще раз спасибо! Да, действительно, все заработало как надо!

Илья73
Offline
Зарегистрирован: 06.09.2013

Еще один вопросик в догонку. Как можно записать так что бы обновлялся только LCD? А то ведь это вроде как бы не правильно когда все обновляется.

maksim
Offline
Зарегистрирован: 12.02.2012

Вынесите то что не касается дисплея за фигурные скобки условия 

  if (millis() - previousMillis >600)
  {
    previousMillis = millis();  
    .....
  }
  // сюда