Индикация аналоговых входов Arduino UNO R3

FlyAway
Offline
Зарегистрирован: 23.05.2016

Здравствуйте

Имеется программа, в ней светодиоды мигают когда оцифрованное значение с аналоговых входов больше 1 и светится непрерывно , когда меньше 1. Таким образом, я хотел осуществить индикацию, тоесть если есть какой-то сигнал с датчика на аналоговый вход, то светодиод мигает, если нет - светится непрерывно.  Это нужно для того, что-бы знать что нет обрыва от датчика к устройству и значения поступают. НО из-за этого возникают две проблемы:

1. Очень тормозит скорость опроса с аналоговых входов: стоит 38400 бод, а такое впечатление что 300 или итого меньше.

2. Наводки, даже если не трогать датчик ( у меня датчик вибрации), то все-равно будут какие-то значения.

Вопрос: может можно как то улучшить ситуацию? Например, вынести это условие из основного цикла или сделать привязку не к Lower bound, а что бы считывало предыдущее значение снятое с аналогового входа и если оно изменилось, то мигать диодом, если нет - светиться. В таком случае тоже будет видно, есть обрыв или нет.

вот скетч

#define ANALOGA_IN 0
#define ANALOGB_IN 1
#define ANALOGC_IN 2
#define ANALOGD_IN 3
#define ANALOGE_IN 4
#define ANALOGF_IN 5
 
const int LOWER_BOUND= 1;
int counter = 0;
void setup() 
{
  Serial.begin(38400);
 
  pinMode(12, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}
 
void loop() 
{
  int val[5];
 
  val[0] = analogRead(ANALOGA_IN);
 
if (val[0] < LOWER_BOUND)
{
digitalWrite(12, HIGH); 
}
else if (val[0] > LOWER_BOUND)
{
digitalWrite(12, HIGH); 
delay(500);
digitalWrite(12, LOW);
delay(500);
}
 
  val[1] = analogRead(ANALOGB_IN);
 
 if (val[1] < LOWER_BOUND)
{
digitalWrite(2, HIGH); 
}
else if (val[1] > LOWER_BOUND)
{
digitalWrite(2, HIGH); 
delay(500);
digitalWrite(2, LOW);
delay(500);
}
 
  val[2] = analogRead(ANALOGC_IN);
 
    if (val[2] < LOWER_BOUND)
{
digitalWrite(3, HIGH); 
}
else if (val[2] > LOWER_BOUND)
{
digitalWrite(3, HIGH); 
delay(500);
digitalWrite(3, LOW);
delay(500);
}
 
  val[3] = analogRead(ANALOGD_IN);
 
    if (val[3] < LOWER_BOUND)
{
digitalWrite(4, HIGH); 
}
else if (val[3] > LOWER_BOUND)
{
digitalWrite(4, HIGH); 
delay(500);
digitalWrite(4, LOW);
delay(500);
}
 
  val[4] = analogRead(ANALOGE_IN);
 
    if (val[4] < LOWER_BOUND)
{
digitalWrite(5, HIGH); 
}
else if (val[4] > LOWER_BOUND)
{
digitalWrite(5, HIGH); 
delay(500);
digitalWrite(5, LOW);
delay(500);
}
 
  val[5] = analogRead(ANALOGF_IN);
 
    if (val[5] < LOWER_BOUND)
{
digitalWrite(6, HIGH); 
}
else if (val[5] > LOWER_BOUND)
{
digitalWrite(6, HIGH); 
delay(500);
digitalWrite(6, LOW);
delay(500);
}
  Serial.print( "A" );
  Serial.print( val[0] );
  Serial.print( "B" );
  Serial.print( val[1] );
  Serial.print( "C" );
  Serial.print( val[2] );
  Serial.print( "D" );
  Serial.print( val[3] );
  Serial.print( "E" );
  Serial.print( val[4] );
  Serial.print( "F" );
  Serial.print( val[5] );
}
vvadim
Offline
Зарегистрирован: 23.05.2012

естественно будет тормозить - напихали кучу делеев)))

FlyAway
Offline
Зарегистрирован: 23.05.2016

Так а как еще без задержек мигание обеспечить)

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Прочитайте здесь http://arduino.ru/tutorials/BlinkWithoutDelay , как мигать светодиодом delay.

FlyAway
Offline
Зарегистрирован: 23.05.2016

Спасибо)