14-11-2017, 00:23
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();
}
page();
menu();
}
void page(int a){
switch(a){
case 0:{
if(digitalRead(switch1){
a=1;
}
break;
}
case 1:{
break;
}
case 2:{
break;
}
case 3:{
break;
}
case 4:{
break;
}
case 5:{
break;
}
}
}
Jeśli pomogłem podziękuj punktem reputacji