#include <LiquidCrystal_I2C.
h>
#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header
//#include <Servo.h>
//#include "Volume.h" // Include the Volume library
//Volume vol;
#define NOTE_C4 262
#define NOTE_G3 196
#define NOTE_A3 220
#define NOTE_B3 247
hd44780_I2Cexp lcd;
const int LCD_COLS = 16;
const int LCD_ROWS = 2;
//int servo1 = 7;
//int servo2 = 6;
//int servo3 = 5;
//int servo4 = 4;
//Servo servo_1;
//Servo servo_2;
//Servo servo_3;
//Servo servo_4;
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
//int seconds = 0;
int pulsanteOre = 13;
int pulsanteMinuti = 12;
int pulsanteTimer = 14;
int ledPin = 17;
byte ledState = LOW;
boolean timer = false;
boolean suona = false;
int fermaSuono = 0;
int conteggioSuono = 60;
int ore = 2;
int minuti = 59;
int secondi = 50;
boolean movimentoAvanti = false;
int passiAvanti = 0;
boolean movimentoIndietro = false;
int passiIndietro = 0;
const int buzzerPin = 5;
int spead =255;//define the spead of motor
void setup()
{
Serial.begin(9600);
pinMode(pulsanteOre, INPUT);
pinMode(pulsanteMinuti, INPUT);
pinMode(pulsanteTimer, INPUT);
//servo_1.attach(servo1);
//servo_2.attach(servo2);
//servo_3.attach(servo3);
//servo_4.attach(servo4);
pinMode(ledPin, OUTPUT);
//vol.begin();
int result = lcd.begin(LCD_COLS, LCD_ROWS);
if (result) {
Serial.print("LCD initialization failed: ");
Serial.println(result);
hd44780::fatalError(result);
}
stampaOra();
}
void loop()
{
secondi += 1;
calcolaOra();
stampaOra();
azionaSuono();
//fermaMotore();
spegniTutto();
Serial.println("attendo");
delay(1500);
Serial.println("fine attesa");
byte buttonStateOre = digitalRead(pulsanteOre);
byte buttonStateMinuti = digitalRead(pulsanteMinuti);
if(buttonStateOre == LOW){
ore += 1;
}
if(buttonStateMinuti == LOW){
int diff = minuti%10;
minuti -= diff;
minuti += 10;
}
if(buttonStateOre == HIGH && buttonStateMinuti == HIGH){
attivaSveglia();
if(timer == true){
lcd.setCursor(0, 1);
lcd.print("SVEGLIA");
ledState = HIGH;
digitalWrite(ledPin, ledState);
}else{
lcd.setCursor(0, 1);
lcd.print("OFF");
}
}
void azionaSuono(){
Serial.println("azionaSuono");
if(suona && conteggioSuono%30 == 0){
Serial.println("azionato");
int noteDuration = 10000;
tone(buzzerPin, NOTE_C4, noteDuration);
//vol.tone(880, 255); // 100% Volume
//vol.fadeOut(2000); // Start a 5 second fade out
fermaSuono+= 1;
}
if(fermaSuono%5 == 0){
noTone(buzzerPin);
Serial.println("fermato");
fermaSuono = 0;
}
if(suona){
conteggioSuono += 1;
}
if(fermaSuono > 0){
fermaSuono += 1;
}
/*void fermaMotore(){
if(passiAvanti == 2){
stop();
movimentoAvanti = false;
passiAvanti = 0;
}
if(passiIndietro == 2){
stop();
movimentoIndietro = false;
passiIndietro = 0;
}
if(movimentoAvanti){
passiAvanti += 1;
}
if(movimentoIndietro){
passiIndietro += 1;
}
}*/
void spegniTutto(){
Serial.println("spegniTutto");
byte buttonStateTimer = digitalRead(pulsanteTimer);
if(buttonStateTimer == LOW){
Serial.println("spengo");
lcd.clear();
timer = false;
ledState = LOW;
if(pos1>0){
backward1();
}
if(pos2>0){
backward2();
}
if(pos3>0){
backward3();
}
if(pos4>0){
backward4();
}
movimentoIndietro = true;
suona = false;
conteggioSuono = 0;
digitalWrite(ledPin, ledState);
void attivaSveglia(){
Serial.println("attivaSveglia");
byte buttonStateOre = digitalRead(pulsanteOre);
byte buttonStateMinuti = digitalRead(pulsanteMinuti);
if(buttonStateOre == HIGH && buttonStateMinuti == HIGH){
if(ore == 3 && minuti == 0 && secondi == 2){
Serial.println("attivo prima sveglia");
timer = true;
forward1();
movimentoAvanti = true;
suona = true;
}
}
void stampaOra(){
Serial.println("stampaOra");
String oreS = "";
String minutiS = "";
String secondiS = "";
if(ore < 10){
oreS = "0"+String(ore);
}else{
oreS = String(ore);
}
if(minuti < 10){
minutiS = "0"+String(minuti);
}else{
minutiS = String(minuti);
}
if(secondi < 10){
secondiS = "0"+String(secondi);
}else{
secondiS = String(secondi);
}
if(secondi == 60){
lcd.clear();
}
lcd.setCursor(0, 0);
lcd.print(oreS+":"+minutiS+":"+secondiS);
void calcolaOra(){
Serial.println("calcolaOra");
if(ore > 23){
ore = 0;
}
if(minuti > 59){
ore += 1;
minuti = 0;
}
if(secondi > 59){
//lcd.clear();
minuti += 1;
secondi = 0;
}
void forward1()
{
pos1 = 180;
//servo_1.write(pos1);
}
void forward2()
{
pos2 = 180;
//servo_2.write(pos2);
}
void forward3()
{
pos3 = 180;
//servo_3.write(pos3);
}
void forward4()
{
pos4 = 180;
//servo_4.write(pos4);
void backward1()//
{
pos1 = 0;
//servo_1.write(pos1);
}
void backward2()//
{
pos2 = 0;
//servo_2.write(pos2);
void backward3()//
{
pos3 = 0;
//servo_3.write(pos3);
}
void backward4()//
{
pos4 = 0;
//servo_4.write(pos4);
/*void stop()//
{
digitalWrite(enablePin12,LOW);// Unenble the pin, to stop the motor. this
should be done to avid damaging the motor.
digitalWrite(enablePin34,LOW);// Unenble the pin, to stop the motor. this
should be done to avid damaging the motor.
digitalWrite(enablePin56,LOW);// Unenble the pin, to stop the motor. this
should be done to avid damaging the motor.
digitalWrite(enablePin78,LOW);// Unenble the pin, to stop the motor. this
should be done to avid damaging the motor.
}*/