ds1307 włącznik czasowy - elektromechanik - 18-01-2017
witam wszystkich. Mam następujący problem . Piszę program do sterowania akwarium .
W programie mam wgrane biblioteki:
Kod: #include <Time.h>
#include <DS1302.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
ale nie mogę opanować ani znależć sposobu w jaki sposub sterować czasem.
np . chciałbym aby przekaznik złapał o godz 16:00 a o godz 22:00 wyłaczył się.
Pozdrawiam .
I z góry dziekuje za jakie kolwiek pomysły
RE: ds1307 włącznik czasowy - Lobaf - 18-01-2017
Sprawdź ten kod poniżej, same biblioteki nic nie dadzą, nie wiem jaki masz wyświetlacz, pod które piny podpięty przekaźnik, ale myślę, że to ogarniesz, u mnie pod 20x4 działało, jeśli masz 16x2, to tutaj:
Kod: lcd.begin(20,4); //rozmiar wyświetlacza
musisz zmienić.
Polecam dołożyć klawiaturę i zrobić parametry czasu ( i nie tylko ) nastawne. Są tutaj tematy na forum które bardzo ładnie opisują jak taki sterownik ugryźć.
Kod: #include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Time.h>
#include <DS1307RTC.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int wlacznik_1 = 2; // pin przekaźnika
// zmienne przechowujące aktualną godzinę i minutę
int godzina = 0;
int minuta = 0;
// odświeżanie daty na wyświetlaczu co sekundę
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
lcd.begin(20,4); //rozmiar wyświetlacza
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("WLACZNIK");
lcd.setCursor(2,1);
lcd.print("AUTOMATYCZNY");
pinMode(wlacznik_1, OUTPUT);
digitalWrite(wlacznik_1, HIGH);
}
void loop() {
czas(); // wyświetanie czasu
wlacznik(); // sterowanie włącznikiem
}
void czas() {
tmElements_t tm;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (RTC.read(tm)) {
lcd.setCursor(12,3);
print2digits(tm.Hour);
godzina = tm.Hour;
lcd.print(":");
print2digits(tm.Minute);
minuta = tm.Minute;
lcd.print(":");
print2digits(tm.Second);
lcd.setCursor(0,3);
lcd.print(tm.Day);
lcd.print("/");
lcd.print(tm.Month);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));
} else {
lcd.setCursor(15,3);
if (RTC.chipPresent()) {
lcd.print("0x0x0x0x");
} else {
lcd.print("error");
}
}
}
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.print('0');
}
lcd.print(number);
}
void wlacznik(){
// tutaj ustalamy sobie ramy czasowe tj. od 16:00 do 22:00
if (godzina >= 16 && minuta >= 00 && godzina < 22 && minuta < 00)
{
digitalWrite(wlacznik_1, LOW);
lcd.setCursor(0,2);
lcd.print("on ");
}
else {
digitalWrite(wlacznik_1, HIGH);
lcd.setCursor(0,2);
lcd.print("off");
}
}
RE: ds1307 włącznik czasowy - szybki946 - 06-02-2017
Witam a jak podłączyć kilka czasów włączania i wyłączania bo mam z tym problem
|