Здравствуйте
Имеется программа, в ней светодиоды мигают когда оцифрованное значение с аналоговых входов больше 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] );
}
естественно будет тормозить - напихали кучу делеев)))
Так а как еще без задержек мигание обеспечить)
Прочитайте здесь http://arduino.ru/tutorials/BlinkWithoutDelay , как мигать светодиодом delay.
Спасибо)