Dzień dobry,
Może ktoś pomoże poprawić, uprościć moje wypociny aby zaczęły działać jak należy.
Od początku.
Mam dwa DS18b20, 3 przekaźniki, buzer, lcd 16x2 i arduino nano.
Program powinien robić coś takiego:
Jeżeli temperatura na tempW jest >30 'C to przekaźnik P1 - ON a P2 - OFF
Jeżeli tempG jest > 35 to P3 - ON a jak <=30 to P3 - OFF
Jeżeli temoG >70 to P2 - OFF
Jeżeli tempG >= 80 to Buzer ON i jak tempW > 80 to Buzer ON
Wyświetl na lcd tempG i tempW.
A To moje próby:
Chciałem też dodać aby jak zostanie włączony przekaźnik to minimum na np. 1 minutę ale mnie przerosło.
Może ktoś pomoże poprawić, uprościć moje wypociny aby zaczęły działać jak należy.
Od początku.
Mam dwa DS18b20, 3 przekaźniki, buzer, lcd 16x2 i arduino nano.
Program powinien robić coś takiego:
Jeżeli temperatura na tempW jest >30 'C to przekaźnik P1 - ON a P2 - OFF
Jeżeli tempG jest > 35 to P3 - ON a jak <=30 to P3 - OFF
Jeżeli temoG >70 to P2 - OFF
Jeżeli tempG >= 80 to Buzer ON i jak tempW > 80 to Buzer ON
Wyświetl na lcd tempG i tempW.
A To moje próby:
Kod:
#include <LiquidCrystal_I2C.h>
byte znak0[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 };
byte znak1[8] = { 0b11111, 0b10000, 0b10000, 0b11111, 0b10000, 0b10000, 0b11111, 0b00010 };
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D7 // Pin OneWire
#define TEMPERATURE_PRECISION 9
int przekaznik1 = D9;
int przekaznik2 = D10;
int przekaznik3 = D11;
int buzer = D2;
// unsigned long czas;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress DS_NR1 = { 0x28, 0x32, 0xFD, 0x48, 0xF6, 0xA8, 0x3C, 0xF2 }; // Tu wpisać adresy czujników
DeviceAddress DS_NR2 = { 0x28, 0x6F, 0x82, 0x95, 0xF0, 0x01, 0x3C, 0x85 };
LiquidCrystal_I2C lcd(0x27,16,2);
float tempW = 0;
float tempG = 0;
void setup()
{
// lcd.noBacklight(); //wyłącza podświetlenie
sensors.begin();
lcd.init();
lcd.backlight();
lcd.clear();
//unsigned long czas;
// czas = millis();
pinMode(przekaznik1, OUTPUT); //przekaznik1 jako wyjście
pinMode(przekaznik2, OUTPUT);
pinMode(przekaznik3, OUTPUT);
pinMode(buzer, OUTPUT);
digitalWrite(przekaznik1, HIGH); //stan początkowy przekaznika1 wysoki
digitalWrite(przekaznik2, HIGH);
digitalWrite(przekaznik3, HIGH);
digitalWrite(buzer, LOW);
sensors.setResolution(DS_NR1, TEMPERATURE_PRECISION);
sensors.setResolution(DS_NR2, TEMPERATURE_PRECISION);
}
void loop()
{
sensors.requestTemperatures();
tempW = sensors.getTempC(DS_NR1); // pobierz temperaturę po kolei z termometrów
tempG = sensors.getTempC(DS_NR2);
if(tempW>=30)
{
digitalWrite(przekaznik3, LOW);
}
if(tempW>70)
{
digitalWrite(przekaznik2, LOW);
}
if(tempG>=35)
{
digitalWrite(przekaznik1, LOW);
digitalWrite(przekaznik2, HIGH);
}
if(tempG<=30)
{
digitalWrite(przekaznik1, HIGH);
digitalWrite(przekaznik2, LOW);
}
if((tempG>80) || (tempW>85))
{
digitalWrite(buzer, HIGH);
}
else
{
digitalWrite(buzer, LOW);
}
//======================================================
lcd.createChar(0, znak0);
lcd.createChar(1, znak1);
lcd.setCursor(0,0);
lcd.print("PIEC GAZ: ");
lcd.setCursor(10,0);
lcd.print(tempG,1);
lcd.print((char)0);
lcd.print("C");
//======================================
lcd.setCursor(0,1);
lcd.print("PIEC W");
lcd.print((char)1);
lcd.print("G: ");
lcd.setCursor(10,1);
lcd.print(tempW,1);
lcd.print((char)0);
lcd.print("C");
delay (3000);
}
//=================================
Chciałem też dodać aby jak zostanie włączony przekaźnik to minimum na np. 1 minutę ale mnie przerosło.