Нужен трезвый взгляд профи

Genri5
Offline
Зарегистрирован: 31.05.2016

Привет всем !

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

[code]

    
     #include <LiquidCrystal.h>
     #include <Wire.h>
     #include "SparkFunBME280.h"
     #include "ds3231.h"
     BME280 mySensor;
     
     uint8_t time[8];
     unsigned int recv_size = 0;
     unsigned long prev,
     interval = 1000;
    
     int regim=1; // объявление переменной "режим"
     int flag=0; // объявление переменной ""
     
     int led = 13;
     
     LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
     
 void setup()  
{ 
     lcd.begin(16, 2); // инициализация LCD
     lcd.clear(); // очистка LCD
     Wire.begin(); // инициализация 
     pinMode(led,OUTPUT);
     digitalWrite (led, LOW);
     DS3231_init(DS3231_INTCN); // инициализация модуля часов
    
     mySensor.settings.I2CAddress = 0x76; // инициализация BME280
     mySensor.settings.runMode = 3;
     mySensor.settings.tStandby = 0;
     mySensor.settings.filter = 0;
     mySensor.settings.tempOverSample = 1;
     mySensor.settings.pressOverSample = 1;
     mySensor.settings.humidOverSample = 1;
{
     lcd.print(mySensor.begin(),HEX);
     delay(10);
     
} 
} 
 void loop()
{
   
      char tempF[6];
      float temperature;
      delay(1000);
     // char in;
      unsigned long now = millis();
      struct ts t;
      if ((now - prev > interval) && (Serial.available() <= 0))
{
      DS3231_get(&t); //Get time
      temperature = DS3231_get_treg(); //Get temperature
      dtostrf(temperature, 5, 1, tempF);
      
     //ожидание нажатия кнопки
     
      if(digitalRead(8)==HIGH&&flag==0)//если кнопка нажата   
                                       // и переменная flag равна 0 , то ... 
{ 
       regim++;   
       flag=1; 
       lcd.begin(16, 2);              // Очистка дисплея при нажатии кнопки
          
       if(regim>4)                   //ограничим количество режимов 
{ 
       regim=1;                      //так как мы используем только одну кнопку, 
}
}    
       if(digitalRead(8)==LOW&&flag==1)//если кнопка НЕ нажата 
                                       //и переменная flag равна - 1 ,то ... 
{ 
          
       flag=0;                        //обнуляем переменную "knopka" 
} 
       if(regim==1)                  //первый режим 

{ 
    
        
      //здесь может быть любое ваше действие 1
      // вывод на экран показаний даты и времени
      
       lcd.setCursor(2,0);   // Дата
       lcd.print(t.mday);
       printMonth(t.mon);
       lcd.print((t.year));  // вывода даты  
       lcd.setCursor(7,1);   // Время
       lcd.print(t.hour);
       lcd.print(":");
       if(t.min<10)
{
       lcd.print("0");
}
       lcd.print(t.min);
       lcd.print(":");
       if(t.sec<10)
{
      lcd.print("0");
}
      lcd.print(t.sec);
     
      lcd.setCursor(2, 1);  // установка курсора
      printwday(t.wday);    //Вывод на экран дня недели
    //lcd.setCursor(14, 0); // установка курсора
    //lcd.print(t.wday);    //Вывод на экран дня недели цифрой

}
} 
      if(regim==2)          //второй режим 
{ 
         
   //здесь может быть любое ваше действие 2 
   // Вывод на экран атмосферного давления с ВМР280
   
      lcd.setCursor(0,0);
      lcd.print("Press:  "); 
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.setCursor(0,1);
      lcd.print("Humid:  ");
      lcd.print((uint8_t)mySensor.readFloatHumidity());
      lcd.print(" %");
     
} 
      
      if(regim==3)//третий режим 
{ 
        
  //здесь может быть любое ваше действие 3
  //Вывод на экран температуры с ВМР280
    
      lcd.setCursor(0,0);
      lcd.print("BME t: "); 
      lcd.print(mySensor.readTempC(),1);
      lcd.print((char)223);//вывод на экран значка "градус"
      lcd.print("C");
   
   // Вывод на экран атмосферного давления с ВМР280
      lcd.setCursor(0, 1);
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.print((uint8_t)mySensor.readFloatHumidity() );
      lcd.print(" %");
} 
      
      if(regim==4)//четвертый режим 
{ 
        
    //здесь может быть любое ваше действие 4
    // вывод не экран температуры с модуля часов
      
      lcd.setCursor(0, 0);
      lcd.write( "ds3231 ");  
      lcd.print(tempF);
      lcd.print((char)223);
      lcd.print("C");
      prev = now;

  

   // Вывод на экран атмосферного давления с ВМР280
      lcd.setCursor(0, 1);
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.print((uint8_t)mySensor.readFloatHumidity());
      lcd.print(" %");

}
}
   void printMonth(int month)
{
      switch(month)
{
       case 1: lcd.print(" January ");break;
       case 2: lcd.print(" February ");break;
       case 3: lcd.print(" March ");break;
       case 4: lcd.print(" April ");break;
       case 5: lcd.print(" May ");break;
       case 6: lcd.print(" June ");break;
       case 7: lcd.print(" July ");break;
       case 8: lcd.print(" August ");break;
       case 9: lcd.print(" September ");break;
       case 10: lcd.print(" October ");break;
       case 11: lcd.print(" November ");break;
       case 12: lcd.print(" December ");break;
       default: lcd.print(" Error ");break;
       lcd.clear();
}
}
   void printwday(int wday)
{
       switch(wday)
{
                
        case 1: lcd.print("Mon ");break;
        case 2: lcd.print("Tue ");break;
        case 3: lcd.print("Wed ");break;
        case 4: lcd.print("Thu ");break;
        case 5: lcd.print("Fri ");break;
        case 6: lcd.print("Sat ");break;
        case 7: lcd.print("Sun ");break;
        default: lcd.print("Error");break;
        lcd.clear();
}
} 

 
               
[/code]

Скетч работает, но при первом включении на дисплее в верхней строке слева выскакивает цыфра 60. При первом пролистовании показания датчика в режиме 2, несколько занижены. А потом при прокрутке всех режимов все нормализуется. Где -то косячек, но глаз замылился не могу рассмотреть, да и опыта еще не так много.

Genri5
Offline
Зарегистрирован: 31.05.2016

Подчистил чуть, чуть хвосты - убрал 51 строку и 53, 161. Но косяк остался. Наверное нужно еще и строку 12, 13 убрать.

Genri5
Offline
Зарегистрирован: 31.05.2016

Профи разьехались на моря.:-(

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Genri5 пишет:

Профи разьехались на моря.:-(

турки теперь - братья

Genri5
Offline
Зарегистрирован: 31.05.2016

:-)

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

я не работал с этим сенсером, но мои DHT по началу всегда криво показывают, так что нужно наверное подождать пока прогреется. про скетч: я бы избавился от delay, см. blink without delay. Строку 60 он пишет в 39 строке lcd.print(mySensor.begin(),HEX); lcd.begin(16, 2);              // Очистка дисплея при нажатии кнопки не очистка а старт, нужен только в сетапе, потом при необходимости очистки пишем lcd.cleare(); если остальное работает и ладно...

Genri5
Offline
Зарегистрирован: 31.05.2016

: я бы избавился от delay, см. blink without delay. Строку 60 он пишет в 39 строке lcd.print(mySensor.begin(),HEX); lcd.begin(16, 2); // Очистка дисплея при нажатии кнопки не очистка а старт, нужен только в сетапе, потом при необходимости очистки пишем lcd.cleare(); если остальное работает и ладно...

 

Что-то я не понял, можно это как-то наглядней показать?

std
Offline
Зарегистрирован: 05.01.2012

Наглядно

unsigned long timestamp[2];
bool flag=0;

void setup(){
  timestamp[0]=millis();
  timestamp[1]=millis();
}

void loop(){
  if(millis()-timestamp[0]>=4000){
    // тут будет повторяться раз в 4 сек
    timestamp[0]=millis();
  }
  if(millis()-timestamp[1]>=400){
    // произойдёт через 0.4 сек и будет каждый новый loop() повторяться
  }
  if(millis()-timestamp[1]>=70000 && !flag){
    // произойдёт через 70 сек, один раз
    flag=1;
  }
}
Genri5
Offline
Зарегистрирован: 31.05.2016

std пишет:

Наглядно



unsigned long timestamp[2];
bool flag=0;

void setup(){
  timestamp[0]=millis();
  timestamp[1]=millis();
}

void loop(){
  if(millis()-timestamp[0]>=4000){
    // тут будет повторяться раз в 4 сек
    timestamp[0]=millis();
  }
  if(millis()-timestamp[1]>=400){
    // произойдёт через 0.4 сек и будет каждый новый loop() повторяться
  }
  if(millis()-timestamp[1]>=70000 && !flag){
    // произойдёт через 70 сек, один раз
    flag=1;
  }
}

 

Если смотреть отдельно от скетча, то понятно как бы, а вот как это в скетч вписать  не хватает пока понятия. :-(

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Genri5 пишет:

std пишет:

Наглядно



unsigned long timestamp[2];
bool flag=0;

void setup(){
  timestamp[0]=millis();
  timestamp[1]=millis();
}

void loop(){
  if(millis()-timestamp[0]>=4000){
    // тут будет повторяться раз в 4 сек
    timestamp[0]=millis();
  }
  if(millis()-timestamp[1]>=400){
    // произойдёт через 0.4 сек и будет каждый новый loop() повторяться
  }
  if(millis()-timestamp[1]>=70000 && !flag){
    // произойдёт через 70 сек, один раз
    flag=1;
  }
}

 

Если смотреть отдельно от скетча, то понятно как бы, а вот как это в скетч вписать  не хватает пока понятия. :-(

все через это проходили. так что не опускайте руки, я Вам напишу сейчас только без delay(), остальное сами со временем додумаете. Если продолжите заниматься ардуино через полгодика почитаете этот скетч, поймете как тут все легко).попробуйте, я проверять не стал, нет возможности на работе, может со скобками что и напутал. Да и фокус с Вашей структурой я что то не понял. вообщем если будет ругаться пишите...

   #include <LiquidCrystal.h>
     #include <Wire.h>
     #include "SparkFunBME280.h"
     #include "ds3231.h"
     BME280 mySensor;
     
     uint8_t time[8];
     unsigned int recv_size = 0;
     unsigned long prev;
     int interval = 1000;
     char tempF[6];
     float temperature;
     bool screen_update=true;
    
     int regim=1; // объявление переменной "режим"
     int flag=0; // объявление переменной ""
     
     int led = 13;
     
     LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
     
 void setup()  
{ 
     lcd.begin(16, 2); // инициализация LCD
     Wire.begin(); // инициализация 
     pinMode(led,OUTPUT);
     digitalWrite (led, LOW);
     DS3231_init(DS3231_INTCN); // инициализация модуля часов
    
     mySensor.settings.I2CAddress = 0x76; // инициализация BME280
     mySensor.settings.runMode = 3;
     mySensor.settings.tStandby = 0;
     mySensor.settings.filter = 0;
     mySensor.settings.tempOverSample = 1;
     mySensor.settings.pressOverSample = 1;
     mySensor.settings.humidOverSample = 1;
{
     lcd.print(mySensor.begin(),HEX);
     delay(10);
     
} 
} 
 void loop()
{
      struct ts t;
      if ((millis() - prev > interval) && (Serial.available() <= 0))
      {
         prev=millis();
         DS3231_get(&t); //Get time
         temperature = DS3231_get_treg(); //Get temperature
         dtostrf(temperature, 5, 1, tempF);
      }
     //ожидание нажатия кнопки
     
if(digitalRead(8)==HIGH&&flag==0)//если кнопка нажата   
                                       // и переменная flag равна 0 , то ... 
       { 
          regim++;   
          flag=1; 
          lcd.clear();              // Очистка дисплея при нажатии кнопки
          screen_update=true;
          
          if(regim>4)                   //ограничим количество режимов 
          { 
             regim=1;                      //так как мы используем только одну кнопку, 
          }
       }    
if(digitalRead(8)==LOW&&flag==1)//если кнопка НЕ нажата 
                                       //и переменная flag равна - 1 ,то ... 
       { 
           flag=0;                        //обнуляем переменную "knopka" 
       } 
if(regim==1&&screen_update)                  //первый режим 

       { 
      //здесь может быть любое ваше действие 1
      // вывод на экран показаний даты и времени
      
       lcd.setCursor(2,0);   // Дата
       lcd.print(t.mday);
       printMonth(t.mon);
       lcd.print((t.year));  // вывода даты  
       lcd.setCursor(7,1);   // Время
       lcd.print(t.hour);
       lcd.print(":");
       if(t.min<10)
          {
             lcd.print("0");
          }
       lcd.print(t.min);
       lcd.print(":");
       if(t.sec<10)
          {
              lcd.print("0");
          }
      lcd.print(t.sec);
     
      lcd.setCursor(2, 1);  // установка курсора
      printwday(t.wday);    //Вывод на экран дня недели
    //lcd.setCursor(14, 0); // установка курсора
    //lcd.print(t.wday);    //Вывод на экран дня недели цифрой
      screen_update=false;
      }
      if(regim==2&&screen_update)          //второй режим 
      { 
         
   //здесь может быть любое ваше действие 2 
   // Вывод на экран атмосферного давления с ВМР280
   
      lcd.setCursor(0,0);
      lcd.print("Press:  "); 
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.setCursor(0,1);
      lcd.print("Humid:  ");
      lcd.print((uint8_t)mySensor.readFloatHumidity());
      lcd.print(" %");
      screen_update=false;
      } 
if(regim==3&&screen_update)//третий режим 
     { 
        
  //здесь может быть любое ваше действие 3
  //Вывод на экран температуры с ВМР280
    
      lcd.setCursor(0,0);
      lcd.print("BME t: "); 
      lcd.print(mySensor.readTempC(),1);
      lcd.print((char)223);//вывод на экран значка "градус"
      lcd.print("C");
   
   // Вывод на экран атмосферного давления с ВМР280
      lcd.setCursor(0, 1);
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.print((uint8_t)mySensor.readFloatHumidity() );
      lcd.print(" %");
      screen_update=false;
      } 
if(regim==4&&screen_update)//четвертый режим 
      { 
        
    //здесь может быть любое ваше действие 4
    // вывод не экран температуры с модуля часов
      
      lcd.setCursor(0, 0);
      lcd.write( "ds3231 ");  
      lcd.print(tempF);
      lcd.print((char)223);
      lcd.print("C");
      // Вывод на экран атмосферного давления с ВМР280
      lcd.setCursor(0, 1);
      lcd.print((uint32_t)mySensor.readFloatPressure()/133.3);
      lcd.print(" mm ");
      lcd.print((uint8_t)mySensor.readFloatHumidity());
      lcd.print(" %");
      screen_update=false;
      }
}
   void printMonth(int month)
{
      switch(month)
       {
       case 1: lcd.print(" January ");break;
       case 2: lcd.print(" February ");break;
       case 3: lcd.print(" March ");break;
       case 4: lcd.print(" April ");break;
       case 5: lcd.print(" May ");break;
       case 6: lcd.print(" June ");break;
       case 7: lcd.print(" July ");break;
       case 8: lcd.print(" August ");break;
       case 9: lcd.print(" September ");break;
       case 10: lcd.print(" October ");break;
       case 11: lcd.print(" November ");break;
       case 12: lcd.print(" December ");break;
       default: lcd.print(" Error ");break;
       }
}
   void printwday(int wday)
{
       switch(wday)
       {
                
        case 1: lcd.print("Mon ");break;
        case 2: lcd.print("Tue ");break;
        case 3: lcd.print("Wed ");break;
        case 4: lcd.print("Thu ");break;
        case 5: lcd.print("Fri ");break;
        case 6: lcd.print("Sat ");break;
        case 7: lcd.print("Sun ");break;
        default: lcd.print("Error");break;
        }
} 

 
               

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Спасибо за помощь, скетч кампилируется, но режимы прыгают с одного на другой, вообщем пока нужно разбираться.

Genri5
Offline
Зарегистрирован: 31.05.2016
















Mr.Privet, переделал свой скетч для LCD 3310 и добавил кирилицу, но вот с режимами ну никак. Хотелось что бы при включении высвечивалась дата и время, а при нажатии на кнопку выводились данные датчика. Где ошибка ?






   
  [code]
      #include <Adafruit_GFX.h>
      #include <Adafruit_PCD8544.h>
      #include "SparkFunBME280.h"
      #include "ds3231.h"
      #include <Wire.h>
      BME280 mySensor;
      Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

      uint8_t time[8];
      unsigned int recv_size = 0;
      unsigned long prev;
      int interval = 1000;

      bool screen_update=true;
      int regim=1; // объявление переменной "режим"
      int flag=0; // объявление переменной ""

  void setup()  
{ 
      display.begin();
      display.cp437(true);
      display.setContrast(60);
      display.clearDisplay();
      Wire.begin();
      DS3231_init(DS3231_INTCN); // инициализация модуля часов
    
      mySensor.settings.I2CAddress = 0x76; // инициализация BME280
      mySensor.settings.runMode = 3;
      mySensor.settings.tStandby = 0;
      mySensor.settings.filter = 0;
      mySensor.settings.tempOverSample = 1;
      mySensor.settings.pressOverSample = 1;
      mySensor.settings.humidOverSample = 1;
{
      display.print(mySensor.begin(),HEX);
      delay(10);
     
}
}
  void loop()
{
      struct ts t;
      if ((millis() - prev > interval) && (Serial.available() <= 0))
{
      prev=millis();
      DS3231_get(&t); //Get time
         
}
       //ожидание нажатия кнопки
     
      if(digitalRead(9)==HIGH&&flag==0)//если кнопка нажата   
                                       // и переменная flag равна 0 , то ... 
{ 
      regim++;   
      flag=1; 
      display.clearDisplay();              // Очистка дисплея при нажатии кнопки
      screen_update=true;
          
      if(regim>2)                   //ограничим количество режимов 
{ 
      regim=1;                      //так как мы используем только одну кнопку, 
}
      if(digitalRead(9)==LOW&&flag==1)//если кнопка НЕ нажата 
                                       //и переменная flag равна - 1 ,то ... 
{ 
      flag=0;                        //обнуляем переменную "knopka" 
} 
      if(regim==1&&screen_update)                  //первый режим 
{ 
      //здесь может быть любое ваше действие 1
      // вывод на экран показаний даты и времени
      
      
      
      display.setCursor(0,0);
      display.print(t.mday);
      printMonth(t.mon);
      display.print((t.year)+100); 
      display.setCursor(21,9);
      display.print(t.hour);
      display.print(":");
      if(t.min<10)
{
      display.print("0");
}
      display.print(t.min);
      display.print(":");
      if(t.sec<10)
{
      display.print("0");
}
      display.print(t.sec);
}
      display.setCursor(10,16); 
      printwday(t.wday);
      screen_update=false;
}
      if(regim==2&&screen_update)          //второй режим 
{ 
   //здесь может быть любое ваше действие 2 
   // Вывод на экран атмосферного давления с ВМР280
   
      display.setCursor(30,24);
      display.print((uint32_t)mySensor.readFloatPressure()/133.3);
      display.print(utf8rus(" мм"));
      display.setCursor(41,32);
      display.print((uint8_t)mySensor.readFloatHumidity());
      display.print(" %");
      display.setCursor(41,40);
      display.print(mySensor.readTempC(),1);
      display.print((char)9);
      display.print("C");
      
      set_text(0,24,utf8rus("Давл:"),BLACK);
      set_text(0,32,utf8rus("Влажн: "),BLACK);
      set_text(0,40,utf8rus("Темпер:"),BLACK);
      display.clearDisplay();
      delay(1000);
}
  void set_text(int x,int y,String text,int color){
      display.setTextColor(color);
      display.setCursor(x,y);
      display.println(text);
      display.display();
      screen_update=false;

      
}
     
} 
      void printMonth(int month)
{
      switch(month)
{
      case 1: display.print(utf8rus(" Января "));break;
      case 2: display.print(utf8rus(" Февраля "));break;
      case 3: display.print(utf8rus(" Марта "));break;
      case 4: display.print(utf8rus(" Апреля "));break;
      case 5: display.print(utf8rus(" Мая "));break;
      case 6: display.print(utf8rus(" Июня "));break;
      case 7: display.print(utf8rus(" Июля "));break;
      case 8: display.print(utf8rus(" Августа "));break;
      case 9: display.print(utf8rus(" Сентября "));break;
      case 10:display.print(utf8rus(" Октября "));break;
      case 11:display.print(utf8rus(" Ноября "));break;
      case 12:display.print(utf8rus(" Декабря "));break;
      default:display.print(" Error ");break;
      
}
}
  void printwday(int wday)
 
{
      switch(wday)
{
      case 1: display.print(utf8rus("Понедельник"));break;
      case 2: display.print(utf8rus("Вторник"));break;
      case 3: display.print(utf8rus("Среда"));break;
      case 4: display.print(utf8rus("Четверг"));break;
      case 5: display.print(utf8rus("Пятница"));break;
      case 6: display.print(utf8rus("Суббота"));break;
      case 7: display.print(utf8rus("Воскресенье"));break;
      default:display.print("Error");break;
      
 
}
}
      String utf8rus(String source)
{
      int i,k;
      String target;
      unsigned char n;
      char m[2] = { '0', '\0' };
      k = source.length(); i = 0;
      while (i < k) {
      n = source[i]; i++;
      if (n >= 0xC0) {
      switch (n) {
      case 0xD0: {
      n = source[i]; i++;
      if (n == 0x81) { n = 0xA8; break; }
      if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
      break;
}
      case 0xD1: {
      n = source[i]; i++;
      if (n == 0x91) { n = 0xB8; break; }
      if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
      break;
}
}
}
      m[0] = n; target = target + String(m);
}
  return target;
}  

[/code]

 

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Итак, давай по порядку. Наченем с того что я не работал с данным дисплеем, по этому не могу сказать что делает строки 081 и 133 display.display(); может и ничего. Во вторых я тебе уже убирал очистку дисплея после написаний месяца, дня недели и после написания влажности итд. ты их зачем то поставил обратно (твои строчки 126, 157, 173). Довольно таки недальновидно писать что то и затем сразу это стирать, поскольку удаленный наблюдатель не успеет это прочесть (если он конечно не белка). Так, идем дальше. Чтобы понять как будет работать программа нужно думать как микропроцессор. Продумывать нужно последовательно сверху вниз, либо по изменениям переменных. Для этого очень помогают комментарии в коде, коими твой код не блещет. Давай смотреть что происходит с переменной режим по всему циклу: итак, мы включаем нашу пространственно-временную метеостанцию и что происходит? создаются переменные, в сетапе все инициируется, потом начинаются луп и начинаются приколы: мне также не понятно зачем в 052 Serial.avalible? у нас сериал не включался даже... потом я тебе скобки исправлял, ты их опять накосячил, вот режимы и прыгают. Смысл в том что в цикле 052-057 делается все то что должно делаться раз в секунду, если тебе на пример нужно чтобы что то делалось раз в 5 или скажем 10 секунд нужно ввести переменную unsigned long prev_2, int interval_2=5000 или 10000 и в этом цикле прописываем то что нам нужно. скобки {} ограничивают цикл. далее у нас идет if в с 060 и должен заканчиваться в 071, количество закрытых и открытых скобок {} должны совпадать. У тебя ошибка еще, ты "поднимаешь" флаг когда читаешь значение пина 8, а "опускаешь" когда читаешь значение пина 9. я так понимаю что это не правильно. пины "по феншую" обозначаются через counst int либо через #define, на пример с самого верха пишете #define button_pin 8 (обратите внимание на пунктуацию, точку с запятой ставить не нужно). если у вас скажем несколько цветных лампочек или пищалка также пишите все через #define led_1_pin 10 итд. теперь в тексте мы используем button_pin а компелятор вместо него подставляет везде 8. Итак, надеюсь это понятно. Теперь скобочки:  стачала у нас идут "ифы" с периудами, потом "ифы" ответственные за кнопку. то есть if (кнопка нажата && флажек опущен){поднять флаг!; действия, в том числе переполнение regim(то биш if>2{regim=1}}. Затем if (кнопка отжата&& флажок поднят){опустить флаг!;} потом ифы для распечатки экранов в зависимости от режимов. Да, кстати, вы значения с датчиков печатаете сразу на экран, их бы сохранить в отдельные переменные и делать это в периодичном цыкле. что то мне показывает что делать это надо раз в 2 секунды:). Переменные обновляем в цикле с millis()-prev, из распечатки экрана убираем делай, убираем очистку(мы экран чистим при нажатии кнопки, еще нужно чистить при обновлении переменных. А переменные уже печатаем на экране. Попробуй учесть все мои замечания и все должно полететь, если что пиши...

Genri5
Offline
Зарегистрирован: 31.05.2016

 

Mr.Privet, спасибо за комментарий. С дисплеем работаю сам впервые.  Почистил свой скетч от лишних  -« display.clearDisplay();» и « display.display();».  Оставил только там где это необходимо. Вообщем потом отпишусь. Если убиреш "display.display();" из 133 строки не печатается текст вообще, висит какая-то птичка. Особенность библиотеки с кирилицей. Если убрать из 126 стр. "display.clearDisplay();", то печать показаний барометра размазывается(возможно, потом можно будет убрать). А с пин 8 - явно напартачил. 

Genri5
Offline
Зарегистрирован: 31.05.2016

show splashscreen