sketch programma con errori:
/*
Melody
Plays a melody
circuit:
* 8-ohm speaker on digital pin 8
created 21 Jan 2010
modified 30 Aug 2011
by Tom Igoe
This example code is in the public domain.
http://arduino.cc/en/Tutorial/Tone
*/
#include "pitches.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>
Servo myservo;
int chiuso = 158;
int aperto = 70;
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define ONE_WIRE_BUS 6
#define ventola 23
#define laser 24
#define button A7
#define led_verde 26
#define led_giallo 27
#define buzzer 22
#define fotor A8
#define pin_button A10
boolean stato_button = false;
boolean inserito = false;
int valfotor;
int stato_allarme = 0;
boolean stato_cancello = false;
int pin_buzzer = 34;
int melodia[] = {NOTE_AS5, NOTE_F5};
int tempo[] = {8,4};
int nr = 2;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(13,11,9,7,5,3);
const byte ROWS = 4; // Quattro righe
const byte COLS = 4; // Quattro colonne
// Definizione mappa della tastiera
byte keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {
52,50,48,46 }; // Connessione delle righe: Riga0, Riga1, Riga2 e Riga3 ai pins di Arduino.
byte colPins[COLS] = {
44,42,40,38 }; // Connessione delle colonne: Colonna0, Colonna1 , Colonna2 e Colonna3 ai pins di Arduino.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Creazione della tastiera
char code [4];
char i;
void setup() {
myservo.attach(31);
myservo.write(chiuso);
Serial.begin(9600);
sensors.begin();
irrecv.enableIRIn();
lcd.begin(16,2);
pinMode(ventola,OUTPUT);
pinMode(laser,OUTPUT);
pinMode(button,INPUT);
pinMode(led_verde,OUTPUT);
pinMode(led_giallo,OUTPUT);
pinMode(buzzer,OUTPUT);
Serial.println("Salve e Benvenuto");
lcd.setCursor(0,0);
lcd.print("Salve e");
lcd.setCursor(0,1);
lcd.print("BENVENUTO! ");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PROGETTO ESAME");
lcd.setCursor(0,1);
lcd.print("DI STATO 2014/15");
delay(2000);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("ARDUHOME");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("REALIZZATO DA:");
lcd.setCursor(0,1);
lcd.print("TORTA GUGLIELMO");
delay(2000);
digitalWrite(led_verde,HIGH);
}
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");
}
else if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
else if (results->decode_type == PANASONIC) {
Serial.print("Decoded PANASONIC - Address: ");
Serial.print(results->panasonicAddress,HEX);
Serial.print(" Value: ");
}
else if (results->decode_type == LG) {
Serial.print("Decoded LG: ");
}
else if (results->decode_type == JVC) {
Serial.print("Decoded JVC: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
dump(&results);
irrecv.resume(); // Receive the next value
}
if(analogRead(pin_button) >1022){
for (int numero = 0; numero < nr; numero++) {
int duratanota = 1000 / tempo[numero];
tone(pin_buzzer, melodia[numero], duratanota);
delay(duratanota * 1.30);
noTone(pin_buzzer); }
}
if(analogRead(button) > 500) {
stato_button = true;}
if(stato_button == true){
inserimento_allarme();
stato_button = false;}
if(stato_button ==false){
temp_ambiente();
}
}
void temp_ambiente(){
valfotor = analogRead(fotor);
if((valfotor <= 700) && (stato_allarme == 1)){
digitalWrite(buzzer,HIGH); }
sensors.requestTemperatures();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura");
lcd.setCursor(0,1);
lcd.print("Interna: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" C");
if(sensors.getTempCByIndex(0) >19) {
digitalWrite(ventola,HIGH);}
}
void inserimento_allarme(){
if(stato_cancello == false){
Serial.println("Cancello Chiuso");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cancello");
lcd.setCursor(0,1);
lcd.print("Chiuso");
delay(1500);
}
if(stato_cancello == true){
Serial.println("Cancello Aperto");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cancello");
lcd.setCursor(0,1);
lcd.print("Aperto");
delay(1500);
}
if(inserito == false){
lcd.clear();
delay(500);
Serial.println("ALLARME DISINSERITO");
lcd.setCursor(0,0);
lcd.print("ALLARME");
lcd.setCursor(0,1);
lcd.print("DISINSERITO");
delay(2000);
Serial.println("Per inserire allarme, chiudere o aprire il cancello...");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Per Inserire");
lcd.setCursor(0,1);
lcd.print("Allarme...");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Chiudere/Aprire");
lcd.setCursor(0,1);
lcd.print("il cancello...");
delay(1500);
}
else if(inserito == true){
lcd.clear();
delay(500);
Serial.println("ALLARME INSERITO");
lcd.setCursor(0,0);
lcd.print("ALLARME");
lcd.setCursor(0,1);
lcd.print("INSERITO");
delay(2000);
Serial.println("Per disinserire Allarme, chiudere o aprire il cancello...");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Per Disinserire");
lcd.setCursor(0,1);
lcd.print("Allarme...");
delay(1500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Chiudere/Aprire");
lcd.setCursor(0,1);
lcd.print("il cancello...");
delay(1500);
}
Serial.print("...DIGITA CODICE");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("...DIGITA CODICE:");
for (i=0; i<4; i++) {
code[i] = keypad.waitForKey();
lcd.setCursor(0,1);
lcd.print("*");
Serial.print("Tasto numero:");
Serial.println("*");
}
if((code[0] == '1') && (code[1] == '2') && (code[2] == '3') && (code[3] == 'A')) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODICE ESATTO!");
Serial.println("CODICE ESATTO!");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALLARME");
lcd.setCursor(0,1);
lcd.print("INSERITO");
Serial.println("ALLARME INSERITO");
stato_allarme = 1;
digitalWrite(led_verde,LOW);
digitalWrite(led_giallo,HIGH);
digitalWrite(laser,HIGH);
delay(2000);
inserito = true;
if(stato_allarme == 1){
controllo_allarme();
}
}
if((code[0] == '7') && (code[1] == '9') && (code[2] == '3') && (code[3] == 'B')) {
digitalWrite(buzzer,LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALLARME");
lcd.setCursor(0,1);
lcd.print("DISINSERITO");
Serial.println("ALLARME DISINSERITO");
digitalWrite(led_giallo,LOW);
digitalWrite(led_verde,HIGH);
digitalWrite(laser,LOW);
delay(2000);
inserito = false;
stato_allarme = 0;
ritorno_temp();
}
if((code[0] == '2') && (code[1] == '2') && (code[2] == '2') && (code[3] == '2')) {
myservo.write(aperto);
stato_cancello = true;
}
if((code[0] == '1') && (code[1] == '1') && (code[2] == '1') && (code[3] == '1')) {
myservo.write(chiuso);
stato_cancello = false;
}
}
void controllo_allarme(){
valfotor = analogRead(fotor);
if(valfotor <= 700){
digitalWrite(buzzer,HIGH);
}
}
void ritorno_temp(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ritorno a ");
lcd.setCursor(0,1);
lcd.print("controllo TEMP.");
Serial.println("Ritorno a controllo temperatura!");
delay(5000);
}