Sei sulla pagina 1di 8

#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();

backward1();
}

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()
{
for (pos1 = 0; pos1 <= 180; pos1 += 1) {
// tell servo to go to position in variable 'pos'
servo_1.write(pos1);
// wait 15 ms for servo to reach the position
delay(15); // Wait for 15 millisecond(s)
}

secondi += 2;
}
void forward2()
{
pos2 = 180;
//servo_2.write(pos2);

secondi += 2;
}

void forward3()
{
pos3 = 180;
//servo_3.write(pos3);

secondi += 2;
}
void forward4()
{
pos4 = 180;
//servo_4.write(pos4);

secondi += 2;
}

void backward1()//
{
for (pos1 = 180; pos1 >= 90; pos1 -= 1) {
// tell servo to go to position in variable 'pos'
servo_1.write(pos1);
// wait 15 ms for servo to reach the position
delay(15); // Wait for 15 millisecond(s)
}

secondi += 2;

}
void backward2()//
{
pos2 = 0;
//servo_2.write(pos2);

secondi += 2;
}

void backward3()//
{
pos3 = 0;
//servo_3.write(pos3);

secondi += 2;
}
void backward4()//
{
pos4 = 0;
//servo_4.write(pos4);

secondi += 2;
}

/*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.

}*/

Potrebbero piacerti anche