• 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
LCD menu
#5
Obecnie mam to:

Kod:
//Biblioteki
#include <OneWire.h>                         //dodaj biblitekę LiquidCrystal.h
#include <DallasTemperature.h>               //dodaj biblitekę LiquidCrystal.h
#include <LiquidCrystal_I2C.h>
#include "PinChangeInterrupt.h"
//Przypisanie Pinów
#define dmuchawa 9
#define pompa 10
#define podajnik 11
#define disconnected 12 //Przekaźnik nie używany, zostawiony do przyszłej rozbudowy
#define switch1 2
#define rotaryA 4
#define rotaryB 3
//Zmienne
boolean sw1pre = 1, sw1akt = 1;
int x = 0, xpre = 0, one_wire = 8, value=0;                           //x, y - pozycja kursora, z zmienne pomocnicze menuTransmisja 1-Wire (czujniki temperatury na pinie 8)
float t1,t3,t5;                                //t1 - temperatura nastawiona, t3 - temperatura pieca, t5 - temperatura w pokoju
unsigned long czas = millis();                                          
unsigned long time = 0;
//Zainicjowanie Bibliotek
LiquidCrystal_I2C  lcd(0x27, 20, 4);
OneWire oneWire(one_wire);                   //wywołujemy transmisję 1-Wire na pinie 10
DallasTemperature sensors(&oneWire);         //informujemy Arduino, ze przy pomocy 1-Wire
//Utworzenie znaku kursora
byte cursor[8] = {
 0b11000,
 0b10100,
 0b10010,
 0b10001,
 0b10001,
 0b10010,
 0b10100,
 0b11000
};
void setup(void)
{
 lcd.createChar(0, cursor); //Utworzenie znaku kursora
 time = millis();
 pinMode(disconnected, OUTPUT);
 pinMode(dmuchawa, OUTPUT);
 pinMode(pompa, OUTPUT);
 pinMode(podajnik, OUTPUT);
 pinMode(switch1, INPUT_PULLUP);
 pinMode(rotaryA, INPUT_PULLUP);
 pinMode(rotaryB, INPUT_PULLUP);  
 digitalWrite(dmuchawa, HIGH);
 digitalWrite(pompa, HIGH);
 digitalWrite(podajnik, HIGH);
 digitalWrite(disconnected, HIGH);
 sensors.begin();                           //rozpocznij odczyt z czujnika
 lcd.begin();
 lcd.backlight();
 Serial.begin(9600);
 lcd.clear();                             //wyczysc ekran
 lcd.setCursor(1,0);
 lcd.print("STEROWNIK PIECA CO");
 lcd.setCursor(8,1);
 lcd.print("V1.0");
 lcd.setCursor(4,2);
   for(x=0; x<=12; x++){
     delay(800);
     lcd.print("#");
   }
   x=0;
   lcd.clear();
 attachPCINT(digitalPinToPCINT(switch1), pressbutton, FALLING);
 attachPCINT(digitalPinToPCINT(rotaryA), rotaryUP, RISING);
 attachPCINT(digitalPinToPCINT(rotaryB), rotaryDW, RISING);
}
//Obrót Enkodera w Lewo
void rotaryDW(void) {
 if ((millis() - time) > 50)
       value--;
       time = millis();
   }
//Obrót Enkodera w Prawo
void rotaryUP(void) {
 if ((millis() - time) > 50)
       value++;
       time = millis();
   }
//Nacisnięcie przycisku Enkodera
void pressbutton(){
 xpre = x;
 x++;
 value=0;
 }
//Wyświetlanie aktualnej temperatury
void menu(){
 if(xpre != x){
   lcd.clear();
   xpre = x;
 }
   
       lcd.setCursor(0,0);
       lcd.print("Temp. Nast.:");
       lcd.print(t1);
       lcd.setCursor(0,1);                       //ustaw kursor w pozycji 0,0
       lcd.print("Temp. Piec :");               //wyswietl "Temperatura: "
       lcd.print(t3);    //wyswietl wartosc z czujnika 0
       lcd.write(byte(223));                       //wyswietl znak stopnia
       lcd.print("C");      
       lcd.setCursor(0,2);                       //ustaw kursor w pozycji 0,0
       lcd.print("Temp. Pokoj:");               //wyswietl "Temperatura: "
       lcd.print(t5);    //wyswietl wartosc z czujnika 1
       lcd.write(byte(223));                       //wyswietl znak stopnia
       lcd.print("C");
 }
//Odczyt temperatury z czujników
void tempread(){
   sensors.requestTemperatures();            //zazadaj odczyt temperatury z czujnika
   t3 = sensors.getTempCByIndex(0);
   t5 = sensors.getTempCByIndex(1);
 }
void loop(void)
{
//Odczyt temeratury co 10s
   if((millis()- czas)> 10000){
     tempread();
     czas = millis();
   }
   menu();
}
Mam jeszcze algorytm jak ma się zachowywać program sterujący, który nie będzie wyzwaniem dlatego go jeszcze nie wpisałem w program. Odczyt temperatury na wyświetlaczy zrobiłem co 10s ponieważ bazując na bibliotece dallas skazuje program na opóźnienia, których chcę uniknąć ale uznałem, iż użycie tej biblioteki będzie najlepszym rozwiązaniem dla tej aplikacji. Proszę wybaczyć bałagan w kodzie, ma szczątki prób implementacji menu i testowaniu innych elementów.
 
  


Wiadomości w tym wątku
LCD menu - przez pawcio404 - 12-11-2017, 23:40
RE: LCD menu - przez adix - 13-11-2017, 19:48
RE: LCD menu - przez pawcio404 - 13-11-2017, 22:24
RE: LCD menu - przez adix - 13-11-2017, 22:26
RE: LCD menu - przez pawcio404 - 13-11-2017, 23:42
RE: LCD menu - przez adix - 14-11-2017, 00:23
RE: LCD menu - przez pawcio404 - 14-11-2017, 22:13
RE: LCD menu - przez adix - 14-11-2017, 23:01
RE: LCD menu - przez pawcio404 - 15-11-2017, 21:33
RE: LCD menu - przez adix - 15-11-2017, 22:21
RE: LCD menu - przez pawcio404 - 16-11-2017, 01:54
RE: LCD menu - przez adix - 19-11-2017, 00:45

Skocz do:


Przeglądający: 1 gości