не работает условный оператор if

fessefrem
Offline
Зарегистрирован: 08.04.2017

Что то замарочился совсем и не могу понять в чём же дело. Не выполняется условие после оператора "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();
  
}
 
  
}
vk007
Offline
Зарегистрирован: 16.06.2015

fessefrem пишет:

Подскажите что я не так делаю?!

Во-первых, код неправильно вставляете. Да и тот у вас не код, а сплошные огрызки какие-то. Например, "P / 10" - это что за огрызок?

fessefrem
Offline
Зарегистрирован: 08.04.2017
#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();
  
}
 
  
}

 

fessefrem
Offline
Зарегистрирован: 08.04.2017

P/10 - это значит, что если P больше 9, значит её нужно разделить на 10....

MaksVV
Offline
Зарегистрирован: 06.08.2015

Там, где не работает, всегда используйте вывод в сериал монитор для диагностики, устанавливая в то или иное место Serial.print узнаете , "заходит" ли сюда программа или нет,  и почему

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

fessefrem пишет:

P/10 - это значит, что если P больше 9, значит её нужно разделить на 10....

Это значит, что у вас написана дичь. P / 10 - куда результат прикажете? У вас он на Марс улетает, как минимум.

 

P /= 10; // надо так

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

например перед проверкой условия распечатайте свою переменную и после выполнения деления

fessefrem
Offline
Зарегистрирован: 08.04.2017

Спасибо, DIYMan!!!! Всё верно!!!! 

Всем спасибо!!!!!