Имеется код:
Код: Выделить всё
// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
int colls=0;
volatile byte UDDelay=0;
volatile byte DDelay=0;
volatile byte BUpStatus=0, BUpPstatus=0, k=0;
volatile byte BDownStatus=0, BDownPStasus=0;
volatile bool BUpProc = false, BDnProc = true;
byte PowerLevel=0;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("POWER MANAGMENT:");
pinMode(6, INPUT);
pinMode(7, INPUT);
BUpProc=false;
}
void loop() {
BUpStatus = digitalRead(6);
lcd.setCursor(colls, 1);
lcd.print(' ');
lcd.setCursor(colls, 1);
lcd.print(BUpStatus);
lcd.print(" 1 ");
if (not BUpProc) {
lcd.print(BUpPstatus);
}
if (BUpStatus=0) {
lcd.setCursor(11, 1);
lcd.print("E");
lcd.print(BUpStatus);
if (BUpPstatus=0) {
lcd.setCursor(13, 1);
lcd.print("Y");
if (not BUpProc) {
UDDelay=millis();
BUpProc=true;
lcd.setCursor(6, 1);
lcd.print(" УУУУУУУ ");
}
}
}
if (BUpStatus=1) {
lcd.setCursor(11, 1);
lcd.print("o");
lcd.print(BUpStatus);
if (BUpPstatus=0) {
lcd.setCursor(13, 1);
lcd.print("Y");
if (not BUpProc) {
UDDelay=millis();
BUpProc=true;
lcd.setCursor(6, 1);
lcd.print(" УУУУУУУ ");
}
}
}
delay(500);
}
Это часть некоего кода обработки двух кнопок. Не стал весь приводить, просто чтоб не перегружать. Суть не в этом.
Код должен работать так:
1. Читаем содержимое пина 6.
2. Выводим на дисплей BUpStatus и через пробелы с единичкой выводим переменную BUpPstatus. Это нужно для того, чтобы понять, что у нас кнопка работает и BUpStatus приобретает статус кнопки.
3. Если кнопка не нажата, то печатаем E+статус кнопки (итого E0) ну и выполняем некоторый другой код.
4. Если кнопка нажата, то печатаем o+статус кнопки (итого о1) ну и тоже выполняем некоторый другой код.
5. Далее все повторяется.
В реальности пока кнопка не нажата на дисплее: 0 1 0 o1, а когда кнопку нажимаем 1 1 0 o1.
Т.е. получается изначально и в дальнейшем он выполняет блок для нажатой кнопки (хотя блин сам вначале пишет, что она 0) независимо от ее состояния, а блок ненажатой кнопки вообще игнорирует.
Что я делаю не так? Или это компилятор мне погоду портит.?