не работает условный оператор if
- Войдите на сайт для отправки комментариев
Сб, 06/01/2018 - 23:27
Что то замарочился совсем и не могу понять в чём же дело. Не выполняется условие после оператора "if"...
Подскажите что я не так делаю?!
void loop()
{
butt = digitalRead (10); // считываем текущее состояние кнопки
if (butt ==0 && butt_flag == 0) // Если кнопка нажата И если кнопка не была нажата ....
{
butt_flag = 1; //.... то перезаписываем последнее состояние кнопки
led = !led; // вкл/выкл подсветки (инвертируем состояние при нажатие на кнопку)
digitalWrite (2, led); // на этой ноге питание подсветки экрана
}
if (butt == 1 && butt_flag == 1) // Если кнопка отпущена И она была только что нажата ....
{
butt_flag = 0; } // ...... то опять перезаписываем последнее состояние кнопки
delay (5);
if (millis() - last_time > 500) {
myGLCD.clrScr();
myGLCD.setFont(PFont);
P=bmp.readAltitude();
P=(int)P; // пересчитываем в метры
P = P - abs_P;
if (P > 9) { // !!!!!!!!!!!!!!!!!!!!!!!!!!!! Здесь вот!!!!!
P / 10;
}
p_string = String(P);
myGLCD.print(p_string, RIGHT, 0); // Отображение значения высоты, с точностью до метра
last_time = millis();
}
}
Подскажите что я не так делаю?!
Во-первых, код неправильно вставляете. Да и тот у вас не код, а сплошные огрызки какие-то. Например, "P / 10" - это что за огрызок?
#include <LCD5110_Basic.h> // библиотека #include <Adafruit_BMP085.h> // библиотека для работы с датчиком атм.давления #include <Wire.h> // датчик работает по протоколу i2c boolean butt_flag = 0; // запоминаем последнее состояние кнопки boolean butt; // текущее значение кнопки boolean led = 0; // здесь храним состояние подсветки boolean vcc = 3; // питание экрана int P; int abs_P; // Абсолютная высота unsigned long last_time; LCD5110 myGLCD(4,5,6,8,7); // подключили дисплей String p_string; Adafruit_BMP085 bmp; // Инициализация датчика. extern uint8_t PFont[]; // шрифт void setup() { pinMode (10, INPUT); // кнопка на 10ом пине pinMode (2, OUTPUT); // на этой ноге висит питание подсветкой экрана pinMode (vcc, OUTPUT); // питание экрана digitalWrite(vcc, HIGH); // на цифровом выводе № 3 pinMode (led, OUTPUT); digitalWrite (led, HIGH); myGLCD.InitLCD(); // инициализация экрана bmp.begin(); // начало работы датчика атм. давления abs_P = bmp.readAltitude(); abs_P = round(( int)abs_P); } void loop() { butt = digitalRead (10); // считываем текущее состояние кнопки if (butt ==0 && butt_flag == 0) // Если кнопка нажата И если кнопка не была нажата .... { butt_flag = 1; //.... то перезаписываем последнее состояние кнопки led = !led; // вкл/выкл подсветки (инвертируем состояние при нажатие на кнопку) digitalWrite (2, led); // на этой ноге питание подсветки экрана } if (butt == 1 && butt_flag == 1) // Если кнопка отпущена И она была только что нажата .... { butt_flag = 0; } // ...... то опять перезаписываем последнее состояние кнопки delay (5); if (millis() - last_time > 500) { myGLCD.clrScr(); myGLCD.setFont(PFont); P=bmp.readAltitude(); P=(int)P; // пересчитываем в метры P = P - abs_P; if (P > 9) { // ТУТ НЕ РАБОТАЕТ!!!!!!!! P / 10; } p_string = String(P); myGLCD.print(p_string, RIGHT, 0); // Отображение значения высоты last_time = millis(); } }P/10 - это значит, что если P больше 9, значит её нужно разделить на 10....
Там, где не работает, всегда используйте вывод в сериал монитор для диагностики, устанавливая в то или иное место Serial.print узнаете , "заходит" ли сюда программа или нет, и почему
P/10 - это значит, что если P больше 9, значит её нужно разделить на 10....
Это значит, что у вас написана дичь. P / 10 - куда результат прикажете? У вас он на Марс улетает, как минимум.
например перед проверкой условия распечатайте свою переменную P и после выполнения деления
Спасибо, DIYMan!!!! Всё верно!!!!
Всем спасибо!!!!!