12-08-2017, 19:19
Witam
zmajstrowałem sobie na bazie arduino nano sterownik dwóch lamp LED.
Kod który posiadam wyświetla godzinę ,date,temperature zasilacza,sygnał PWM wyrażony w procentach.Kod działa bez problemów.
Wgrywając kod do arduino pobiera on sobieaktualny czas i datę z laptopa.Chciałbym to zmienić i zrobić tak aby datę i czas można było ustawić za pomocą np. 3 przycisków.Znalazłem taki kod ,który wyswietla czas i date i mogę ustawić je przyciskami.Postanowiłem' jakby'' połączyć ze sobą 2 kody i te polecenia które odpowiadają za nastawę czasu i daty przepisałem do mojego pierwszego kodu ,niestety kod nie chce się skompilować .Czy mógłby ktoś mi podpowiedzieć gdzie jest błąd?
zmajstrowałem sobie na bazie arduino nano sterownik dwóch lamp LED.
Kod który posiadam wyświetla godzinę ,date,temperature zasilacza,sygnał PWM wyrażony w procentach.Kod działa bez problemów.
Wgrywając kod do arduino pobiera on sobieaktualny czas i datę z laptopa.Chciałbym to zmienić i zrobić tak aby datę i czas można było ustawić za pomocą np. 3 przycisków.Znalazłem taki kod ,który wyswietla czas i date i mogę ustawić je przyciskami.Postanowiłem' jakby'' połączyć ze sobą 2 kody i te polecenia które odpowiadają za nastawę czasu i daty przepisałem do mojego pierwszego kodu ,niestety kod nie chce się skompilować .Czy mógłby ktoś mi podpowiedzieć gdzie jest błąd?
Kod:
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN
LiquidCrystal_I2C lcd(0x3F,16,2);
#include "RTClib.h"
#include<OneWire.h>
#define ONE_WIRE_BUS 2
RTC_DS1307 RTC;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int LED1 = 3; //lampa nr 1
int LED2 = 5; // lampa nr 2
int GODZ;
int MIN;
int SEC;
int mocD1; // do syg PWM
int T = 2;
int Ton=45; //temp wł/wył wentylatora
int Toff=27; //temp wł/wył wentylatora
int P1=6; // menu od ustawiania czasu
int P2=7; // przycisk +
int P3=8; // przycisk -
int hourupg;
int minupg;
int yearupg;
int monthupg;
int dayupg;
int menu=0;
void setup()
{
DateTime now = RTC.now();
lcd.setBacklight(HIGH);
lcd.init();
lcd.begin(16,2);
lcd.clear();
Wire.begin();
//czas.adjust(DateTime(__DATE__, __TIME__));
pinMode(P1,INPUT);
pinMode(P2,INPUT);
pinMode(P3,INPUT);
pinMode(T,INPUT); // termometr
pinMode(9,OUTPUT);//wentylator
pinMode(3,OUTPUT); //lampa led 1
pinMode(5,OUTPUT); //lampa led 2
Serial.begin(9600);
sensors.begin();
RTC.begin();
//if(! RTC.isrunning())
{
lcd.println("RTC is NOT running!");
// RTC.adjust(DataTime(_DATE_,_TIME_));
}
int menu=0;
}
void loop()
{
sensors.requestTemperatures();
lcd.setCursor(11,0);
lcd.print(sensors.getTempCByIndex(0));
if ((sensors.getTempCByIndex(0))> Ton)
{
digitalWrite(9,LOW);
}
if ((sensors.getTempCByIndex(0)) < Toff)
{
digitalWrite(9,HIGH);
}
int CZAS = (now.hour()*60+now.minute());// aktualny czas
int dzienG = 13; // rozpoczęcie oświetlenia w godz
int dzienM = 00; // w minutach
int nocG = 22; // ustawienie koniec oswietlenia w godz
int nocM = 00; // w minutach
int maxD1 = 60; // ilosc krokow z tablicy
int STEP = 1;
int ZMIANA =60; //dlugosc rozjasniania lub sciemniania tutaj wynosi 60 min
int czas1=(dzienG*60+dzienM); //obliczenie czas rozjasnienia
int czas2=(nocG*60+nocM); //obl czasu gaszenia
int GODZ=now.hour();
int MIN=now.minute();
int SEC=now.second();
//Serial.print(sensors.requestTemperatures());
static int D1;
int mocD1[61] =
{ 0,5,8,11,14,
18,20,25,
28,30,32,36,40,46,50,
56,58,60,62,68,72,74,78,
80,84,86,90,94,98,106,
112,118,120,124,128,130,
136,138,142,146,150,156,160,164,
172,176,182,184,192,200,
204,208,216,220,228,232,238,
240,244,248,254
};
if (CZAS<czas1)
{
D1= 0;
}
if ((czas1<=CZAS)&&(CZAS<(czas1+ZMIANA)))
{
D1 = ((CZAS-czas1)/STEP);
}
if (((czas1+ZMIANA)<=CZAS)&&(CZAS<(czas2-ZMIANA)))
{
D1 = maxD1;
}
if (((czas2-ZMIANA)<=CZAS)&&(CZAS<czas2))
{
D1 = ((czas2-CZAS)/STEP);
}
if (czas2<=CZAS)
{
D1 = 0;
}
analogWrite(LED1,mocD1[D1]);
analogWrite(LED2,mocD1[D1]);
lcd.setCursor(9,1);
lcd.print("PWM");
lcd.print(' ');
lcd.print((D1*100/maxD1));
lcd.print("%");
if(digitalRead(P1))
{
menu=menu+1;
}
if(menu==0)
{
DisplayDateTime();
}
if (menu==1)
{
DisplaySetHour();
}
if (menu==2)
{
DisplaySetMinute();
}
if (menu==3)
{
DisplaySetYear();
}
if (menu==4)
{
DisplaySetMonth();
}
if (menu==5)
{
DisplaySetDay();
}
if (menu==6)
{
StoreAgg();
delay(500);
menu=0;
}
delay(100);
}
void DisplayDateTime()
{
DateTime now = RTC.now();
lcd.setCursor(0,1);
//lcd.print("Hour");
if (now.hour()<=9)
{
lcd.print("0");
}
lcd.print(now.hour(),DEC);
hourupg=now.hour();
lcd.print(":");
if(now.minute()<=9)
{
lcd.print("0");
}
lcd.print(now.minute(),DEC);
minupg=now.minute();
lcd.print(":");
if (now.second()<=9)
{
lcd.print("0");
}
lcd.print(now.second(),DEC);
lcd.setCursor(0,0);
//lcd.print("Date");
if (now.day()<=9)
{
lcd.print("0");
}
lcd.print(now.day(),DEC);
dayupg=now.day();
lcd.print("/");
if (now.month()<=9)
{
lcd.print("0");
}
lcd.print (now.month(),DEC);
monthupg=now.month();
lcd.print("/");
lcd.print(now.year(),DEC);
yearupg=now.year();
}
void DisplaySetHour()
{
lcd.clear();
DateTime now = RTC.now();
if(digitalRead(P2)==HIGH)
{
if(hourupg==23)
{
hourupg=0;
}
else
{
hourupg=hourupg+1;
}
}
if(digitalRead(P3)==HIGH)
{
if(hourupg==0)
{
hourupg=23;
}
else
{hourupg=hourupg-1;
}
}
lcd.setCursor(0,0);
lcd.print("Set time:");
lcd.setCursor(0,1);
lcd.print(hourupg,DEC);
delay(200);
}
void DisplaySetMinute()
{
lcd.clear();
if(digitalRead(P2)==HIGH)
{
if(minupg==59)
{
minupg=0;
}
else
{
minupg=minupg+1;
}
}
if(digitalRead(P3)==HIGH)
{
if(minupg==0)
{
minupg=59;
}
else
{
minupg=minupg-1;
}
}
lcd.setCursor(0,0);
lcd.print("Set Minutes:");
lcd.setCursor(0,1);
lcd.print(minupg,DEC);
delay(200);
}
void DisplaySetYear()
{
lcd.clear();
if(digitalRead(P2)==HIGH)
{
yearupg=yearupg+1;
}
if(digitalRead(P3)==HIGH)
{
yearupg=yearupg-1;
}
lcd.setCursor(0,0);
lcd.print("Set Year:");
lcd.print(yearupg,DEC);
delay(200);
}
void DisplaySetMonth()
{
lcd.clear();
if(digitalRead(P2)==HIGH)
{
if (monthupg==12)
{
monthupg=1;
}
else
{
monthupg=monthupg+1;
}
}
if (digitalRead(P3)==HIGH)
{
if (monthupg==1)
{
monthupg=12;
}
else
{
monthupg=monthupg-1;
}
}
lcd.setCursor(0,0);
lcd.print("Set Month:");
lcd.setCursor(0,1);
lcd.print(monthupg,DEC);
delay(200);
}
void DisplaySetDay()
{
lcd.clear();
if(digitalRead(P2)==HIGH)
{
if(dayupg==31)
{
dayupg=1;
}
else
{
dayupg=dayupg+1;
}
}
if(digitalRead(P3)==HIGH)
{
if (dayupg==1)
{
dayupg=31;
}
else
{
dayupg=dayupg-1;
}
}
lcd.setCursor(0,0);
lcd.print("Set Day:");
lcd.setCursor(0,1);
lcd.print(dayupg,DEC);
delay(200);
}
void StoreAgg()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SAVING IN");
lcd.setCursor(0,1);
lcd.print("PROGRESS");
RTC.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
delay(200);
}