Witam. Troszkę poszukałem na forum, niestety nie znalazłem odpowiedzi na mój problem. Może gdzieś i jest bo i postów jest za dużo żeby wszystko znaleźć. Może dla niektórych osób wyda się to banalne - jeśli tak to mam nadzieje ze ktoś szybko odpowie.. no ale do rzeczy:
Mam zbudowany taki projekcik kotła - sterowanie poziomem wody, grzałka wyświetlacz pare LEDów.
Mam problem ze zrobieniem sterowania temperatury z przycisków: chcę zrobić tak żeby na wyświetlaczu była wartość zadana (set) i wartość odczytana (read) temperatury. 2 przyciski jednym zwiększamy wartość temp o 1, drugim zmniejszamy.
Uwarunkować sama inkrementację czy dekrementację przy samym naciśnięciu przycisku potrafię zrobić, ale nie mam pojęcia jak to zamknąć w przedziale ( temperatura np. od 20stopni do - 80 stopni). Pewnie jakas petla by się przydała?
no i później jak tym załączać grzałkę?
Na dole kod całego programu - narazie bez okreslonych przyciskow , i z temperatura ustaloną w programie.
Mam zbudowany taki projekcik kotła - sterowanie poziomem wody, grzałka wyświetlacz pare LEDów.
Mam problem ze zrobieniem sterowania temperatury z przycisków: chcę zrobić tak żeby na wyświetlaczu była wartość zadana (set) i wartość odczytana (read) temperatury. 2 przyciski jednym zwiększamy wartość temp o 1, drugim zmniejszamy.
Uwarunkować sama inkrementację czy dekrementację przy samym naciśnięciu przycisku potrafię zrobić, ale nie mam pojęcia jak to zamknąć w przedziale ( temperatura np. od 20stopni do - 80 stopni). Pewnie jakas petla by się przydała?
no i później jak tym załączać grzałkę?
Na dole kod całego programu - narazie bez okreslonych przyciskow , i z temperatura ustaloną w programie.
Kod:
//*****************************************************
#include <OneWire.h>
#include <Wire.h>
#include <Timers.h>
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
//*****************************************************
Timers <2> akcja;
LiquidCrystal_I2C lcd (0x27,16,2);
#define ODSTEP 1000
#define ONEWIRE_PIN 10
OneWire oneWire(ONEWIRE_PIN);
DallasTemperature sensors(&oneWire);
float Celsius = 0;
float Fahrenheit = 0;
int czujka1 = 3;
int czujka2 = 4;
int pompa = 5;
int grzalka = 6;
int ledgrzalka = 8;
int ledpompa= 9;
int ledp = 11;
int ledpw = 12;
int stan1 = 0;
int stan2 = 0;
int licznik = 0;
unsigned long czas_poprzedni = 0;
void setup() {
Serial.begin(9600);
delay(2000);
pinMode(czujka1, INPUT);
pinMode(czujka2, INPUT);
pinMode(pompa, OUTPUT);
pinMode(grzalka, OUTPUT);
pinMode(ledp, OUTPUT);
pinMode(ledpw, OUTPUT);
pinMode(ledpompa, OUTPUT);
pinMode(ledgrzalka, OUTPUT);
digitalWrite(grzalka,LOW);
sensors.begin();
Serial.println("Program START");
//*****************************************************
akcja.attach(0, 2001, woda);
akcja.attach(1, 5001, temperatura);
akcja.attach(2, 50000000, alarmy);
//*****************************************************
lcd.init();
lcd.backlight();
}
void loop()
{
sensors.requestTemperatures();
Celsius = sensors.getTempCByIndex(0);
Fahrenheit = sensors.toFahrenheit(Celsius);
lcd.setCursor(0, 0);
lcd.print("Temperature");
lcd.setCursor(0, 1);
lcd.print(Celsius);
lcd.setCursor(6,1);
lcd.print((char)223);
lcd.print("Celsius");
akcja.process(); //aktywujemy wątki
unsigned long czas_aktualny = millis();
if(czas_aktualny - czas_poprzedni > ODSTEP)
{
czas_poprzedni = czas_aktualny;
licznik = licznik + 1;
}
}
void woda()
{
stan1 = digitalRead(czujka1);
stan2 = digitalRead(czujka2);
if (stan1==1 && stan2==1)
{
digitalWrite (pompa,HIGH);
Serial.println("Pompka OFF");
}
else if (stan1==0 && stan2==0)
{
digitalWrite (pompa, LOW);
Serial.println("Pompka ON");
}
if (digitalRead (pompa) == LOW)
{
digitalWrite (ledpompa,HIGH);
}
else
{
digitalWrite (ledpompa,LOW);
}
}
void temperatura()
{
stan1 = digitalRead(czujka1);
Serial.println(sensors.getTempCByIndex(0));
if (Celsius >= 40.00 || stan1==0)
{
digitalWrite(grzalka,HIGH);
Serial.print("Grzalka OFF");
}
else
{
digitalWrite(grzalka,LOW);
Serial.println("Grzalka ON");
}
if (digitalRead (grzalka) == LOW)
{
digitalWrite (ledgrzalka,HIGH);
}
else
{
digitalWrite (ledgrzalka,LOW);
}
}
void alarmy()
{
if (digitalRead(czujka1) == 0 && digitalRead(czujka2) == 0)
{
digitalWrite(ledp, HIGH);
}
else
{
digitalWrite(ledp, LOW);
}
if (digitalRead(czujka1) == 1 && digitalRead(czujka2) == 1)
{
digitalWrite(ledpw, HIGH);
}
else
{
digitalWrite(ledpw, LOW);
}
}