Всем привет!
Занимаюсь Ардуино всего 2ой день т.к. нужно написать программку для одного устройства.
Схема: 4 тактовые кнопки, которые отвечают за каждый режим.Проблема в том, что у меня не обновляется в реальном времени данные с пинов А0 и А1. Если нажать кнопку BUTTON_PIN_3, то значения обновляются.
Получается что программа тормозится после нажатия кнопки.
Как сделать чтобы данные с пинов А0 и А1 опрашивались постоянно и выводились на экран сразу же?
Занимаюсь Ардуино всего 2ой день т.к. нужно написать программку для одного устройства.
Схема: 4 тактовые кнопки, которые отвечают за каждый режим.Проблема в том, что у меня не обновляется в реальном времени данные с пинов А0 и А1. Если нажать кнопку BUTTON_PIN_3, то значения обновляются.
Получается что программа тормозится после нажатия кнопки.
Как сделать чтобы данные с пинов А0 и А1 опрашивались постоянно и выводились на экран сразу же?
C++:
#include <LiquidCrystal.h> /* подключаем встроенную в Arduino IDE
библиотеку для дисплея LCD 16x2 */
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define BUTTON_PIN_1 6
#define BUTTON_PIN_2 7
#define BUTTON_PIN_3 8
#define BUTTON_PIN_4 9
#define LED_PIN_1 10
#define LED_PIN_2 13
boolean buttonWasUp_1 = true;
boolean buttonWasUp_2 = true;
boolean buttonWasUp_3 = true;
boolean buttonWasUp_4 = true;
boolean ledEnabled_1 = false;
boolean ledEnabled_2 = false;
//Здесь у нас практически тоже самое, вот только кнопок у нас теперь две и два светодиода
void setup()
{
lcd.begin(16, 2);// указываем тип дисплея LCD 16X2
Serial.begin(9600);
pinMode (LED_PIN_1, OUTPUT);
pinMode (LED_PIN_2, OUTPUT);
pinMode (BUTTON_PIN_1, INPUT_PULLUP);
pinMode (BUTTON_PIN_2, INPUT_PULLUP);
pinMode (BUTTON_PIN_3, INPUT_PULLUP);
pinMode (BUTTON_PIN_4, INPUT_PULLUP);
}
void loop()
{
boolean buttonIsUp_1 = digitalRead(BUTTON_PIN_1); // режим MUTE, зажигает LED_PIN D10 кнопкой BUTTON_PIN_1_D6
if (buttonWasUp_1 && !buttonIsUp_1) {
delay(10);
buttonIsUp_1 = digitalRead (BUTTON_PIN_1);
if (!buttonIsUp_1) {
ledEnabled_1 = !ledEnabled_1;
digitalWrite(LED_PIN_1, ledEnabled_1);
lcd.clear();
lcd.print("MUTE+LED");
}
}
buttonWasUp_1 = buttonIsUp_1;
boolean buttonIsUp_2 = digitalRead(BUTTON_PIN_2); // режим NIGHT, зажигает LED_PIN D13 кнопкой BUTTON_PIN_2_D7
if (buttonWasUp_2 && !buttonIsUp_2) {
delay(10);
buttonIsUp_2 = digitalRead (BUTTON_PIN_2);
if (!buttonIsUp_2) {
ledEnabled_2 = !ledEnabled_2;
digitalWrite(LED_PIN_2, ledEnabled_2);
lcd.clear();
lcd.print("NIGHT+LED");
}
}
buttonWasUp_2 = buttonIsUp_2;
boolean buttonIsUp_3 = digitalRead(BUTTON_PIN_3); // режим вид 1, включается кнопкой BUTTON_PIN_3_D8
if (buttonWasUp_3 && !buttonIsUp_3) {
delay(10);
buttonIsUp_3 = digitalRead (BUTTON_PIN_3);
if (!buttonIsUp_3) {
lcd.setCursor(11, 0);
lcd.print("VOLUM");
int perV = map(analogRead(0), 0, 1023, 0, 100);
fillBar1(0, 0, 11, perV);
delay(10);
int perB = map(analogRead(1), 0, 1023, 0, 100);
fillBar1(0, 1, 11, perB);
delay(10);
}
}
buttonWasUp_3 = buttonIsUp_3 ;
boolean buttonIsUp_4 = digitalRead(BUTTON_PIN_4); // режим вид 2, включается кнопкой BUTTON_PIN_4_D9
if (buttonWasUp_4 && !buttonIsUp_4) {
delay(10);
buttonIsUp_4 = digitalRead (BUTTON_PIN_4);
if (!buttonIsUp_4) {
lcd.clear();
lcd.print("VID2");
}
}
buttonWasUp_4 = buttonIsUp_4;
}
void fillBar1(byte start_pos, byte row, byte bar_length, byte fill_percent) {
byte infill = round((float)bar_length * fill_percent / 100);
lcd.setCursor(start_pos, row);
for (int n = 1; n < bar_length; n++) {
if (n < infill) lcd.write(255);
if (n >= infill) lcd.write(16);
}
int sensorValue = analogRead(A1);
lcd.setCursor(11, 1);
if (sensorValue < 100) lcd.print("20 Hz");
else if (sensorValue < 200) lcd.print("30 Hz");
else if (sensorValue < 300) lcd.print("40 Hz");
else if (sensorValue < 400) lcd.print("50 Hz");
else if (sensorValue < 500) lcd.print("60 Hz");
else if (sensorValue < 600) lcd.print("70 Hz");
else if (sensorValue < 700) lcd.print("80 Hz");
else if (sensorValue < 800) lcd.print("90 Hz");
else if (sensorValue < 900) lcd.print("100Hz");
else lcd.print("120Hz");
}