Skocz do zawartości

Sterownik ogrzewania - zmiana wyświetlacza


Pomocna odpowiedź

Napisano

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]

 

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.

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

(edytowany)
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
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
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

 

  • 4 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...