Skocz do zawartości

Sterownik ogrzewania - zmiana wyświetlacza


marko83

Pomocna odpowiedź

potrzebuje pomocy przy wyswietlaniu  mam tu dwa ekrany LCD I LCD1  chciałbym je zmieniac  za pomocom guzika NIEUMIE TEGO ROZWIĄZAC 

[code]
#include <OneWire.h>
#include <DS18B20.h>
#include <LiquidCrystal_I2C.h>
#define ONEWIRE_PIN 4   // czujniki nuzka nr 6
#define SENSORS_NUM 6
#define inPin 3  `      // 3,2,1 KLAWISZE HISTEREZY
#define inPin 2
#define inPin 1
#define inPin 17 //----16,17 KLAWISZE TEMPERATURY
#define inPin 16 //
LiquidCrystal_I2C lcd(0x27, 20, 4);
LiquidCrystal_I2C lcd1(0x276, 16, 2);

const byte address[SENSORS_NUM][8] PROGMEM = {

  0x28, 0xFF, 0x81, 0x24, 0x90, 0x15, 0x3, 0xE9,
  0x28, 0xFF, 0x9F, 0x64, 0x90, 0x15, 0x3, 0xD7,
  0x28, 0xFF, 0x51, 0x47, 0xC2, 0x16, 0x3, 0xCE,
  0x28, 0x61, 0x64, 0x11, 0x95, 0x8C, 0x98, 0xFF,
  0x28, 0xFF, 0xD0, 0xCC, 0x30, 0x17, 0x4, 0x0,
  0x28, 0x61, 0x64, 0x11, 0x8C, 0x7F, 0xE6, 0x10,//NOWY
} ;
int histereza = 3;
int TEMPERATURA = 25;
int K1 = 6;   //K1 STYCZNIK DO POMPY BOJLERA
int K2 = 7;   //K2 STYCZNIK DO POMPY OGRZEWANIA
int K3 = 8;   // STYCZNIK GRZALKI
//int k4 =
OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

void setup() {

  sensors.begin();
  sensors.request();
  lcd.init();
  lcd.backlight();
  
  lcd.clear(); 
  lcd1.clear();
  
  lcd1.init();//DRUGI
  lcd1.backlight();//DRUGI

  pinMode(2, INPUT_PULLUP);  //-----KLAWISZE-------( +++)
  pinMode(3, INPUT_PULLUP);//-----KLAWISZE-----(---)
  pinMode(1, INPUT_PULLUP); //MENU nuzka nr3
  pinMode(16,INPUT_PULLUP);
  pinMode(17,INPUT_PULLUP);//KLAWISZE TERMOSTAT
  
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT); //wyjscie allarm
  pinMode(9, tone); // alarm stan niski
 // digitalWrite(6, LOW); 
  //---------LCD ustawienie wyswietlania na wyswietlaczu---------

  lcd.setCursor(0, 0);
     lcd.print("BOJLER");
  lcd.setCursor(0, 1);
     lcd.print("PANEL");
  lcd.setCursor(0, 2);
     lcd.print("PIEC");
  lcd.setCursor(12, 0);
     lcd.print(" HIST");
  lcd.setCursor(13, 1);
     lcd.print("K1 OFF");
  lcd.setCursor(13, 2);
     lcd.print("K2 OFF");
  lcd.setCursor(13, 3);
     lcd.print("T.p");
  lcd.setCursor(0, 3);
     lcd.print("C.Z");
  lcd.setCursor(7, 3);
     lcd.print("P.P"); 
  
  //----------DRUGI WYSWIETL   ---
  
lcd1.setCursor(0,0);
    lcd1.print("PIE"); 
lcd1.setCursor(10,0);
    lcd1.print("T.ZAD");
lcd1.setCursor(0,1);
    lcd1.print("POK");
lcd1.setCursor(10,1);
    lcd1.print("K3");
  
   
   
}

void loop() {

  if (sensors.available())

    for (byte i = 0; i < SENSORS_NUM; i++)
    {
      float T = sensors.readTemperature(FA(address[i]));
    }
  float T0 = sensors.readTemperature(FA (address[0]));
  float T1 = sensors.readTemperature(FA (address[1]));
  float T2 = sensors.readTemperature(FA (address[2]));
  float T3 = sensors.readTemperature(FA (address[3]));//CZUJNIK ZEWNETRZNY
  float T4 = sensors.readTemperature(FA (address[4]));
  float T5 = sensors.readTemperature(FA (address[5]));// nowy

  //-----------LCD----wyswietlanie temperatur

  lcd.setCursor(7, 0);
  lcd.print(T0,1); //--Bojler
  lcd.setCursor(7,1);
  lcd.print(T1,1); //---Panel
  lcd.setCursor(7,2);
  lcd.print(T2,1); //---Piec
  lcd.setCursor(3,3);
  lcd.print(T3,0); //----CZUJNIK ZEWNETRZNY---
  lcd.setCursor(10,3);
  lcd.print(T4,0); //--CZUJNIK POD�OGUWKI--
  lcd.setCursor(16,3);
  lcd.print(T5,1);// czujnik pokpju
  if (histereza < 10) {
    lcd.setCursor(18,0);
  } else {
    lcd.setCursor(17,0);
  }

  lcd.print(histereza);
  sensors.request();

  if (((T1 - T0 > histereza)&&(T2<30)) || (T2 - T0 > histereza)) //zmienna  załoncz conajmniej jeden warunek spełniony
  {
    digitalWrite(K1, HIGH);
    lcd.setCursor(15, 1);
    lcd.print(" ON ");
  }

 if ((T1 <= T0 + 1) && (T2 <= T0 + 1)) // zmienna wyĹoncz
  
  { digitalWrite(K1, LOW);
    lcd.setCursor(15, 1);
    lcd.print(" OFF");
  }

  if (T2 >= 40)  //piec zalacz
  {
    digitalWrite(K2, HIGH);
    lcd.setCursor(15, 2);
    lcd.print(" ON ");
  }
  if (T2 <= 38)  //piec wylacz
  {
    digitalWrite(K2, LOW);
    lcd.setCursor(15, 2);
    lcd.print(" OFF");
  }

 /* if (T0 <= 50)  //grzaĹka ZALONCZ
  {
    digitalWrite(K3, HIGH);
    lcd.setCursor(15, 3);
    lcd.print(" ON ");
  }

  if ((T0 >= 55) || (T0 = -273)) //grzalka WYŁONCZ
  {
    digitalWrite(K3, LOW);
    lcd.setCursor(15, 3);
    lcd.print(" OFF");
  }

  if ((T2 >= 90, HIGH) || (T1 >= 90, HIGH))
  {
    tone(9, 3000, 100);
    delay (200);
    tone(9, 3000, 100);
    delay (200);
  }
*/
  if (digitalRead(1) == LOW)
  {
    tone(9, LOW);
  }
  if (digitalRead(2) == LOW)
  {
    histereza ++;
  }
  if (digitalRead(3) == LOW)
  {
    histereza --;
  }
  
//      -----DRUGI WYSWIETLACZ----

 lcd1.setCursor(5,0);
    lcd1.print(T2,0);//T.PIECA
 lcd1.setCursor(5,1);
    lcd1.print(T5,0);//T.POKO
  
   lcd1.setCursor(18,0);
   lcd1.print(TEMPERATURA);
   
   if((T5 < TEMPERATURA)&&(T2 >= 40))
      {                       // {dwa warunki speĹnione }  program dzała kiedy na piecu jest temperatura
      digitalWrite(K3,HIGH);    
      lcd1.setCursor(17,1);      
      lcd1.print("ON ");                       
      }
      else if ((T5 <= TEMPERATURA)||(T2 <= 38))// to lub to
      {
      digitalWrite(K3,LOW);
      lcd1.setCursor(17,1);
      lcd1.print("OFF ");
      delay(5000);
      }
      
  if (digitalRead(16)==LOW) // temp pok
     {
      TEMPERATURA ++;  
      }
  if (digitalRead(17)==LOW)//temp pok
    {
      TEMPERATURA --;  
    } 
  delay(2000);
  }
[/code]

 

Link do komentarza
Share on other sites

Dnia 13.01.2020 o 08:36, Treker napisał:

@marko83 witam na forum 🙂 Z czym dokładnie masz problem? Próbowałeś najpierw zrobić prostszy szkic, w którym działałaby taka funkcja?

Ciekawy jest ten ades 0x276.

Link do komentarza
Share on other sites

Dnia 14.01.2020 o 14:00, Gość napisał:

Ciekawy jest ten ades 0x276.

a sorki😊

	int Display = 0;
#define inPin 2
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20,4);
#include <OneWire.h>
LiquidCrystal_I2C lcd1(0x27, 20, 4);
   
     void setup()
     {
      lcd.init();                      // initialize the lcd
      lcd.backlight();
      pinMode(2, INPUT_PULLUP);
     
      lcd.setCursor(0, 1);
      lcd.print("ekran1");
   
      }
      
     void loop()
    {
	    if (digitalRead(2) == LOW) {
   
         delay(500);
    
        Display = Display + 1;
           
            if(Display > 2)
          {
            Display = 1;
            lcd.clear();
          }
    
        
    switch (Display) {
        case 1: {
               lcd.clear();
           lcd.setCursor(0, 1);
            lcd.print("ekran1");
            break;
          }
        
        case 2: {
            lcd.clear();
           lcd.setCursor(0, 1);
            lcd.print("ekran13");
            break;
        }
        
      
    }
	    }
    }
    

to mniej więcej mi działa ale jak podstawiłem  tresc lcd /lcd1 do  case:1  / case:2 to program nie kompilował  odnosił sie do czyjników znowu utknołem  😫 niewiem  niby proste  a jednak

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

36 minut temu, marko83 napisał:

mniej więcej mi działa ale jak podstawiłem  tresc lcd /lcd1 do  case:1  / case:2 to program nie kompilował  odnosił sie do czyjników znowu utknołem  😫 niewiem  niby proste  a jednak

nie wiem jak inni ale ja kompletnie nie rozumiem co autor miał na myśli... pomijając już literówki i błędy ort... 

P. S. sprawdź jak i gdzie masz pozamykane zawiasy z if-ów... 

ma się zmieniać w czasie ciągle wciśniętego przycisku, czy po pojedynczym krótkim naciśnięciu? 

Edytowano przez SOYER
Link do komentarza
Share on other sites

14 godzin temu, marko83 napisał:

a sorki😊

 


	int Display = 0;
#define inPin 2
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20,4);
#include <OneWire.h>
LiquidCrystal_I2C lcd1(0x27, 20, 4);
   
     void setup()
     {
      lcd.init();                      // initialize the lcd
      lcd.backlight();
      pinMode(2, INPUT_PULLUP);
     
      lcd.setCursor(0, 1);
      lcd.print("ekran1");
   
      }
      
     void loop()
    {
	    if (digitalRead(2) == LOW) {
   
         delay(500);
    
        Display = Display + 1;
           
            if(Display > 2)
          {
            Display = 1;
            lcd.clear();
          }
    
        
    switch (Display) {
        case 1: {
               lcd.clear();
           lcd.setCursor(0, 1);
            lcd.print("ekran1");
            break;
          }
        
        case 2: {
            lcd.clear();
           lcd.setCursor(0, 1);
            lcd.print("ekran13");
            break;
        }
        
      
    }
	    }
    }
    

 

to mniej więcej mi działa ale jak podstawiłem  tresc lcd /lcd1 do  case:1  / case:2 to program nie kompilował  odnosił sie do czyjników znowu utknołem  😫 niewiem  niby proste  a jednak

Nie mozesz miec jednego adresu do obu lcd. Chyba ze zmienisz procek na taki majacy dwa sprzetowe i2c, badz bedziesz je przelaczal. Inaczej nie moga byc dwa takie same adresy.

  • Lubię! 1
Link do komentarza
Share on other sites

Dnia 17.01.2020 o 21:34, SOYER napisał:

nie wiem jak inni ale ja kompletnie nie rozumiem co autor miał na myśli... pomijając już literówki i błędy ort... 

P. S. sprawdź jak i gdzie masz pozamykane zawiasy z if-ów... 

ma się zmieniać w czasie ciągle wciśniętego przycisku, czy po pojedynczym krótkim naciśnięciu? 

ma się zmieniać przy krótkim wciśnięciu  między lcd1 a lcd i tak w kółko

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.