• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przewijanie ekranów w pętli
#1
Cześć wszystkim,

Tworzę sterownik klimatu, który ma dość sporo warunków i urządzeń wykonawczych, ale nie w tym rzecz, bo główny kod wykonawczy mam już napisany, poległem na zmianie warunków po przez menu. Próbowałem z prostymi, z wielopoziomowymi, które byłby najlepsze i najprostsze w użytkowaniu, ale niestety nie w programowaniu, albo w ogóle nie działały albo dodając główną petlę wszystko zaczynało migać lub pętla się 
Możliwe, że dodatkowo utrudniłem sobie, upierając się, że zrobię to na LCD Keypad Shield od DF Robot, taki mam i taki chcę/muszę wykorzystać.
Potrzebuję jedynie zmieniać nastawy parametrów, które w kodzie są jako int. Znalazłem i zmodyfikowałem kawałek kodu, który robi to idealnie, za pomocą klawiszy góra/dół zmienia nastawę wilgotności, a lewo/prawo temperaturę, przycisk Select przenosi na 5s do drugiego ekranu na którym jest wyświetlana instrukcja użycia.
Moje pytanie brzmi, czy można zrobić w ten sposób, żeby przycisk Select przełączał kolejne ekrany od pierwszego do ostatniego w pętli, na których będzie można ustawiać daną wartość, przy pomocy UP/Down lub Right/Left. 
Ma ktoś pomysł jak zacząć to pisać?
Załączam kod który już mam, i działa tak jak bym to chciał zrobić.
Kod:
#include <LiquidCrystal_I2C.h>
#include <DFR_Key.h>
#include <DHT.h>

//zmienne początkowe
int temp = 25;
int hum = 50;
int hzal = 1;
int hwyl = 2;
int minzal = 15;
int minwyl = 15;

// DHT22 (AM2023)
#define DHTPIN 2
#define DHTTYPE DHT22
const int relay1 =  5;
const int relay2 =  6;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);
DFR_Key keypad;
int localKey = 0;
String keyString = "";
int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

int read_LCD_buttons(){               
    adc_key_in = analogRead(0);
    if (adc_key_in > 1000) return btnNONE;
    if (adc_key_in < 50)   return btnRIGHT; 
    if (adc_key_in < 250)  return btnUP;
    if (adc_key_in < 450)  return btnDOWN;
    if (adc_key_in < 650)  return btnLEFT;
    if (adc_key_in < 850)  return btnSELECT; 
   
}
             
void setup()
{
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Terrarium v1");
  lcd.setCursor(0, 1);
  lcd.print("instrukcja pod select");
  delay(2500);
  Serial.begin(9600);
  dht.begin();
  delay(1000);
  lcd.clear();
   
  //Sample rate (default 10 ms)
  keypad.setRate(10);
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);

}

void loop()
{
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) { //sprawdzenie stanu czujników
    lcd.begin(16, 2);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Błąd czujnika!!");
    delay(10000);
  } else {
   
    // zmiana wartości warunków
   
    lcd_key = read_LCD_buttons();
    switch (lcd_key){
       
       case btnLEFT:{
             temp = temp +1;
             break;
       }
       case btnRIGHT:{
             temp = temp - 1;
             break;
       }
       case btnUP:{
             hum = hum + 5;
             break;
       }
       case btnDOWN:{
             hum = hum - 5;
             break;
       }
       case btnSELECT:{
            lcd.begin(16, 2);
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print ("Hum:");
            lcd.print(h);
            lcd.print((char)223);
            lcd.print("%");
            lcd.setCursor(0, 1);
            lcd.print("Temp L/R +-1");
            lcd.print((char)223);
            lcd.print("C");
            delay (5000);
            break;
     }
  }
   
    lcd.setCursor(0, 0);
    lcd.print("Hum: ");
    lcd.print(h);
    lcd.print("%");
    lcd.print("(");
    lcd.print(hum);
    lcd.print("%)");
   
    lcd.setCursor(0, 1);
    lcd.print("Tem: ");
    lcd.print(t);
    lcd.print((char)223);
    lcd.print("(");
    lcd.print(temp);
    lcd.print((char)223);
    lcd.print(")");

//Histereza Wilgotnościomierza
     
      int H = hum + 10;   
      if(h < hum )
      digitalWrite(relay1, LOW);
      else if (h >= H)
      digitalWrite(relay1, HIGH);
     

      /* <- UNCOMMENT THIS IF YOU NEED EXACT VALUES BUT COMMENT 5 LINES ABOVE
      if(h < hum )
      digitalWrite(relay1, LOW);
      else
      digitalWrite(relay1, HIGH);
      */


     
      if(t < temp )
      digitalWrite(relay2, LOW);
      else
      digitalWrite(relay2, HIGH);
 
 
  }
}
 
Odpowiedź
  


Wiadomości w tym wątku
Przewijanie ekranów w pętli - przez kostek22111@gmail.com - 28-12-2021, 00:58
RE: Przewijanie ekranów w pętli - przez Jarewa0606 - 28-12-2021, 14:59

Skocz do:


Przeglądający: 1 gości