#include <Servo.h>
#include <LiquidCrystal.h>
#include "STSServoDriver.h"
//variabili schermo
LiquidCrystal lcd(11,10,5,4,3,2);
unsigned seconds =0,minutes =0, hours =0;
unsigned hoursM = 0, minutesM = 0,hoursS = 0, minutesS = 0;
bool aperto = false;
bool chiuso = false;
Servo servo_9;
const byte dirPin = 9; // Sostituisci con il tuo numero di pin effettivo
STSServoDriver servo;
int pin = 0;
int val;
int val_map;
int buttonAumentaState = 0; //pin 8
unsigned int buttonDiminuisciState = 0; // pin 7
int buttonChangeNumber = 0; //pin 13
unsigned contPosChanged = 0,constPosChangedM = 0,constPosChangedS = 0;
bool lcdFirst = false, lcdSecond = false;
void setup()
{
//servo_9.attach(9,500,2500);
servo.init(dirPin);
lcd.clear();
lcd.begin(16,2);
Serial.begin(9600);
}
void loop()
{
mainFunction();
}
void mainFunction()
{
orarioMattina();
orarioSera();
if(constPosChangedM == 2 && constPosChangedS == 2)
{
timerLCD(hours,minutes,"ORARIO POLLESCO",contPosChanged);
setClock(contPosChanged,hours,minutes);
changeHourMinutePosition(contPosChanged);
servoMotorTimer(hours,minutes);
}
}
void orarioMattina()
{
if(constPosChangedM != 2)
{
timerLCD(hoursM,minutesM,"SVEGLIA MATTINA",constPosChangedM);
setClock(constPosChangedM,hoursM,minutesM);
changeHourMinutePosition(constPosChangedM);
}
if(!lcdFirst && constPosChangedM == 2)
{
lcd.clear();
lcdFirst = true;
}
}
void orarioSera()
{
if(constPosChangedM == 2 && constPosChangedS != 2)
{
timerLCD(hoursS,minutesS,"SVEGLIA SERA",constPosChangedS);
setClock(constPosChangedS,hoursS,minutesS);
changeHourMinutePosition(constPosChangedS);
}
if(!lcdSecond && constPosChangedS == 2)
{
lcd.clear();
lcdSecond = true;
}
}
void servoMotorTimer(int hour,int minute)
{
val = analogRead(pin);
if(!chiuso && contPosChanged == 2)
{
if(hour == hoursM && minute == minutesM )
{
val_map = map(val,0,125,0,90);
servo_9.write(val_map);
delayMicroseconds(3000);
chiuso = true;
aperto = false;
}
}
if(!aperto)
{
if(hour == hoursS && minute == minutesS)
{
val_map = map(val,0,125,90,0);
servo_9.write(val_map);
delayMicroseconds(3000);
chiuso = false;
aperto = true;
}
}
}
void changeHourMinutePosition(unsigned& pos)
{
buttonChangeNumber = digitalRead(13);
if(buttonChangeNumber == HIGH)
pos++;
if(buttonChangeNumber == HIGH && pos >=2)
pos = 2;
}
void setClock(unsigned& number, unsigned& h, unsigned& m)
{
buttonAumentaState = digitalRead(8);
buttonDiminuisciState = digitalRead(7);
//se number è zero possiamo modoficare le ore
if(number == 0)
{
if(buttonAumentaState == HIGH)
{
if(h == 24)
h = 0;
else
h++;
}
if(buttonDiminuisciState == HIGH)
{
if(h < 1)
h = 0;
else
h--;
}
}
//Se number è uno possiamo modificare i minuti
if(number == 1)
{
if(buttonAumentaState == HIGH)
{
if(m == 60)
{
m = 0;
h++;
}
else
m++;
}
if(buttonDiminuisciState == HIGH)
{
if(m < 1)
m = 0;
else
m--;
}
}
//Se number è uguale a 2 faccio partire
//la funzione orologio
if(number == 2)
clock();
}
void clock()
{
seconds+=1;
delay(50);
if(seconds == 60)
{
seconds = 0;
minutes++;
}
if(minutes == 60)
{
minutes = 0;
hours++;
}
if(hours == 24)
hours = 0;
}
void timerLCD(unsigned& h,unsigned& m,String str,unsigned number)
{
delay(100);
lcd.setCursor(0,0);
lcd.print(str);
lcd.setCursor(0,1);
if(number == 0)
lcd.print("H:");
if(number == 1)
lcd.print("M:");
lcd.setCursor(5,1);
beginPrint(h);
lcd.print(":");
beginPrint(m);
lcd.print(":");
beginPrint(seconds);
}
void beginPrint(int number)
{
if(number < 10)
{
lcd.print("0");
lcd.print(number);
}
else
lcd.print(number);
}