Salve. Sto realizzando un progetto di casa domotica. Tutto sembra funzionare. Noto però che all'avvio del progetto i led sui pin 2 e 4 sono accesi anche se settati spenti come gli altri e inoltre quando impartisco un ordine, all'accensione del led di avvenuto ascolto, collegato all'uscita i0 sempre questi led si accendo o spengono. Ho controllato il codice e sembra tutto ok. Help......
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
Presentazioni fatte. Scusate ma sono tre giorni che sbatto per risolvere il problema.....
per qualsiasi "help"
manca comunque il codice
da inserire "correttamente " come da regolamento
scusate ma essendo lungo il codice lo devo spezzettare. Ecco la prima parte del codice.
#include <EasyVR.h>
#include "Arduino.h"
#include "EasyVR.h"
#include "SoftwareSerial.h"
#if !defined(SERIAL_PORT_MONITOR)
#endif
#if defined(SERIAL_PORT_USBVIRTUAL)
#define port SERIAL_PORT_HARDWARE
#define pcSerial SERIAL_PORT_USBVIRTUAL
#else // Shield Jumper on SW (using pins 12/13 or 8/9 as RX/TX)
SoftwareSerial port(12, 13);
#define pcSerial SERIAL_PORT_MONITOR
#endif
EasyVR easyvr(port);
//////////////////////////dichiarazione output///////////////////////////
#define luce_salotto 2 // collegare la centralina relè luce salotto.
#define luce_cucina 3 // collegare la centralina relè luce cucina
#define luce_giardino 4 // collegare la centralina relè luci garage
#define luce_camera 5 // collegare la centralina relè luce camera
#define luce_bagno 6 // collegare la centralina relè luce bagno
#define garage 10 // collegare alla centralina meccanismo garage( uscita a impulso )
#define allarme 9 // collegare luce intermittente e cicalina allarme.
#define cancello 8 // collegare alla centralina meccanismo cancello( uscita a impulso )
#define luce_garage 11
//#define riscaldamento I02 // collegare alla centralina riscaldamento ( uscita basetta EasyVr)
//#define tapparella I03 // collegare alla centralina meccanismo tapparelle ( uscita a impulso basetta EasyVr)
//////////////////////////////////////////////dichiarazione ingressi///////////////////////////
#define luce_salotto_in A0 // collegare pulsante del salotto.
#define luce_cucina_in A1 // collegare pulsante cucina.
#define luce_giardino_in A2 // collegare pulsante giardino.
#define luce_camera_in A3 // collegare pulsante camera.
#define luce_bagno_in A4 // collegare pulsante bagno.
#define riscaldamento_in A5 // collegare termostato riscaldamento (sensore di temperatura LM 35).
#define sensorepir_in 11 // collegare il sensore PIR.(movimento)
#define garage_in 10 // collegare il tasto apertura garage.
#define cancello_in 10 // collegare il tasto apertura cancello.
//#define tapparella_up I02
//#define tapparella_dw I02
/////////////////////////////// dichiarazioni bluetooth ///////////////////////////////////////////
int inByte = 0; // incoming serial byte
boolean status_bluetooth;
int8_t group, idx;
///////////////////////////////dichiarazione guppi dei comandi vocali////////////////////////////////////////////
enum Groups
{
GROUP_1 = 1,
GROUP_2 = 2,
GROUP_3 = 3,
};
enum Group1
{
G1_BUONGIORNO = 0,
G1_PRESENTATI = 1,
G1_ACCENDI_LUCE = 3,
G1_SPEGNI_LUCE = 4,
G1_RISCALDAMENTO = 5,
G1_APRI_CANCELLO = 6,
G1_ALZA_TAPPARELLA = 7,
G1_ABBASSA_TAPPARELLA = 13,
G1_APRI_GARAGE = 8,
G1_CHIUDI_GARAGE = 9,
G1_SCENARIO_NOTTE = 11,
G1_SCENARIO_GIORNO = 10,
G1_ATTIVA_ALLARME = 12,
G1_DISATTIVA_ALLARME = 14,
};
enum Group2
{
G2_SALOTTO = 0,
G2_CUCINA = 1,
G2_CAMERA = 2,
G2_BAGNO = 3,
G2_GIARDINO = 5,
G2_GARAGE = 4,
G2_ALICE = 6,
};
enum Group3
{
G3_SALOTTO = 0,
G3_CUCINA = 1,
G3_CAMERA = 2,
G3_BAGNO = 3,
G3_GIARDINO = 5,
G3_GARAGE = 4,
G3_ALICE = 6,
};
int luce_cucina_mem=0 ; // memoria stato luce
int luce_salotto_mem=0 ; // memoria stato luce
int luce_camera_mem=0 ; // memoria stato luce
int luce_bagno_mem=0 ; // memoria stato luce
int luce_giardino_mem=0 ; // memoria stato luce
int riscaldamento_mem=0 ; // memoria stato riscaldamento
int tapparella_up_mem=0 ; // memoria stato tapparella up
int tapparella_dw_mem=0 ; // memoria stato tapparella down
int garage_mem=0 ; // memoria stato luce
int cancello_mem=0 ; // memoria stato cancello
int sensorepir_mem=0; // memoria stato del sensore di movimento PIR.
int tentativi=0 ; // memoria numero dei tentativi errore vocale.( inserita nel programma affinchè comunichi sul monitor seriale solo una volta l'errore)
int menu=0; // memoria numero volte scrittura "pronuncia un comando..."
int legenda=0 ; // memoria numero delle spiegazioni dei gruppi sul monitor seriale.
int enable1=false; // funzione che viene attivata solo dal sensore pir per accendere il salotto,e non dal interruttore. dopo un certo tempo infatti interval2 spegne la luce del salotto se enable e alto.
int enable2=false; // funzione che permette di disattivare la sirena allarme dopo un certo tempo.
int allarme_mem=0; // memoria allarme attiva/disattiva.
unsigned long previousMillis = 0; // memoria temporale
const long interval = 400; // intervallo lettura ingresso interruttori
const long interval1 = 700; // intervallo lettura ingresso interruttori2
const long interval3 = 5000; // dopo aver rilevato un movimento se allarme attivato fa la sirena per 5 secondi.
void setup()
{
// setup PC serial port
pcSerial.begin(9600);
// dicharazione output modalità
pinMode (luce_salotto,OUTPUT);
pinMode (luce_cucina,OUTPUT);
pinMode (luce_camera,OUTPUT);
pinMode (luce_bagno,OUTPUT);
pinMode (luce_giardino,OUTPUT);
pinMode (allarme,OUTPUT);
pinMode (cancello,OUTPUT);
pinMode (garage,OUTPUT);
// dicharazione modalità input
pinMode (luce_salotto_in,INPUT);
pinMode (luce_cucina_in,INPUT);
pinMode (luce_giardino_in,INPUT);
pinMode (luce_camera_in,INPUT);
pinMode (luce_bagno_in,INPUT);
pinMode (sensorepir_in,INPUT);
// modalià dello shield easyvr bridge
int mode = easyvr.bridgeRequested(pcSerial);
switch (mode)
{
case EasyVR::BRIDGE_NONE:
// setup EasyVR serial port
port.begin(9600);
// run normally
pcSerial.println(F("VERIFICA SISTEMA..."));
break;
case EasyVR::BRIDGE_NORMAL:
// setup EasyVR serial port (low speed)
port.begin(9600);
// soft-connect the two serial ports (PC and EasyVR)
easyvr.bridgeLoop(pcSerial);
// resume normally if aborted
pcSerial.println(F("---"));
pcSerial.println(F("Bridge connection aborted!"));
break;
case EasyVR::BRIDGE_BOOT:
// setup EasyVR serial port (high speed)
port.begin(115200);
// soft-connect the two serial ports (PC and EasyVR)
easyvr.bridgeLoop(pcSerial);
// resume normally if aborted
pcSerial.println(F("---"));
pcSerial.println(F("Bridge connection aborted!"));
break;
}
while (!easyvr.detect())
{
Serial.println("EasyVR not detected!"); // comunica che cè un errore.
}
easyvr.setPinOutput(EasyVR::IO2, LOW);
easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR RICONOSCIUTA");
Serial.println("AVVIO DEL SISTEMA... "); // comunica che ilsistema si è avviato correttamente
Serial.println(""); // stampa easy vr riconosciuta e comincia l'ascolto
// stampa easy vr riconosciuta e comincia l'ascolto
easyvr.setTimeout(5);
easyvr.setLanguage(1);
group = 1; //<-- gruppo di inizio
}
void action();
//programma
void loop()
{
// programma riconoscimento vocale
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED in ascolto
Serial.print("pronuncia un comando ");
Serial.println(group);
easyvr.recognizeCommand(group);
do
{
//qui dentro esegue tutti i processi all' interno
unsigned long currentMillis = millis();
if (Serial.available() > 0)
{
inByte = Serial.read();
//dichiarazione variabile stato memoria
luce_camera_mem=luce_camera ; // ass. alla variabile stato di mem il valore della lampada
luce_bagno_mem=luce_bagno; // ass. alla variabile stato di mem il valore della lamp
luce_giardino_mem=luce_giardino; // ass. alla variabile stato di mem il valore della lamp
luce_salotto_mem=luce_salotto; // ass. alla variabile stato di mem il valore della lamp
riscaldamento_mem=0; // ass. alla variabile stato di mem il valore della lamp
tapparella_up_mem=0;
garage_mem=garage;
cancello_mem=cancello;
allarme_mem=allarme;
//programma bluetooth
.........
//LETTURA STATO DEI PULSANTI
if (analogRead(luce_salotto_in) >= 200) // legge stato dell interruttore
{
if (currentMillis - previousMillis >= interval) // continua il programma una volta, dopo si disabilita per un tempo
{
previousMillis = currentMillis;
easyvr.setPinOutput(EasyVR::IO2, HIGH);
if (luce_salotto_mem==HIGH) //se la var della memoria è alta, allora:
{
digitalWrite(luce_salotto,LOW); //spegne la lampadina
luce_salotto_mem=LOW; // assegna alla variabile di memoria lo stato basso.
}
else //se la var della memoria,è bassa allora:
{
digitalWrite(luce_salotto,HIGH); // accende la lampadina.
uce_salotto_mem=HIGH; // assegna alla variabile di memoria lo stato alto..
}
}
}
if (analogRead(luce_cucina_in) >= 200) // legge lo stato dell interruttore dai pin di ingresso , se viene premuto (stato alto):
{
if (currentMillis - previousMillis >= interval) // continua il programma una volta, dopo si disabilita per un tempo
{
previousMillis = currentMillis;
if (luce_cucina_mem==HIGH) //se la var della memoria,è alta allora:
{
digitalWrite(luce_cucina,LOW); //spegne la lampadina
uce_cucina_mem=LOW; // assegna alla var di memoria lo stato basso.
}
else //se la var della memoria,è bassa allora:
{
digitalWrite(luce_cucina,HIGH); // accende la lampadina.
luce_cucina_mem=HIGH; // assegna alla variabile di memoria lo stato alto..
}
}
}
if (analogRead(luce_giardino_in) >= 50) // legge stato dell interruttore dai pin di ingresso analogico, se viene premuto va a 255, in prallelo ce il sensore di luminosità, quando supera il valore 50 ( buio) si accende.
{
if (luce_giardino_mem==HIGH) //se la var della memoria,è alta allora:
{
digitalWrite(luce_giardino,LOW); //spegne la lampadina
luce_giardino_mem=LOW; // assegna alla var di memoria lo stato basso.
}
else //se la var della memoria,è bassa allora:
{
digitalWrite(luce_giardino,HIGH); // accende la lampadina.
luce_giardino_mem=HIGH; // assegna alla var di memoria lo stato alto..
}
}
if (analogRead(riscaldamento_in) >= 200) // legge stato dell interruttore dai pin di ingresso , se viene premuto (stato alto):
{
if (currentMillis - previousMillis >= interval) // fa una lettura, dopo che ne ha fatta una si disabilita per un tempo:(intervallo)
{
previousMillis = currentMillis;
if (riscaldamento_mem==HIGH) //se la var della memoria,è alta allora:
{
digitalWrite(riscaldamento_mem,LOW); //spegne la lampadina
riscaldamento_mem=LOW; //assegna alla vari di memoria lo stato basso.
}
else //se la var della memoria,è bassa allora:
{
digitalWrite(riscaldamento_mem,HIGH); // accende la lampadina.
riscaldamento_mem=HIGH; // assegna alla var di memoria lo stato alto..
}
}
}
if (digitalRead(garage_in) == HIGH ) // legge stato dell interruttore dai pin di ingresso , se viene premuto (stato alto):
{
if (currentMillis - previousMillis >= interval) // fa una lettura, dopo che ne ha fatta una si disabilita per un tempo:(intervallo)
{
previousMillis = currentMillis;
if (garage_mem==HIGH) //se la var della memoria,è alta allora:
{
digitalWrite(garage,LOW); //spegne la lampadina
garage_mem=LOW; // assegna alla var di memoria lo stato basso.
}
else //se la var della memoria,è bassa, cioè la lampadina e spenta allora:
{
digitalWrite(garage,HIGH); // accende la lampadina.
garage_mem=HIGH; // assegna alla var di memoria lo stato alto..
}
}
}
if (analogRead(cancello_in) >= 200) // legge stato dell interruttore dai pin di ingresso , se viene premuto (stato alto):
{
if (currentMillis - previousMillis >= interval) // fa una lettura, dopo che ne ha fatta una si disabilita per un tempo:(intervallo)
{
previousMillis = currentMillis;
f (cancello_mem==HIGH) //se la var della memoria,è alta, cioè la lampadina e accesa allora:
{
digitalWrite(cancello,LOW); //spegne la lampadina
cancello_mem=LOW; // assegna alla variabile di memoria lo stato basso.
}
else //se la var {
digitalWrite(cancello,HIGH); // accende la lampadina.
cancello_mem=HIGH; // assegna alla variabile di memoria lo stato alto..
}
}
}
}
while (!easyvr.hasFinished());
easyvr.setPinOutput(EasyVR::IO1, LOW); //LED verde OFF ricezione sonora in reinizializzazione.
idx = easyvr.getCommand();
if (idx >= 0)
{
// print debug message
uint8_t train = 0;
char name[32];
Serial.print("Command: ");
Serial.print(idx);
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
easyvr.playSound(0, EasyVR::VOL_FULL);
// perform some action
action();
}
else // errors or timeout
{
if (easyvr.isTimeout())
Serial.println("Timed out, try again...");
int16_t err = easyvr.getError();
if (err >= 0)
{
Serial.print("Error ");
Serial.println(err, HEX);
}
}
//ACCENDE I PIN i/O DI EASYVR
if (riscaldamento_mem== HIGH)
{ easyvr.setPinOutput(EasyVR::IO2, HIGH); }
else
{easyvr.setPinOutput(EasyVR::IO2, LOW); }
if (tapparella_up_mem == HIGH) // IMPULSO DI APERT TAPPARELLA
{ easyvr.setPinOutput(EasyVR::IO3, HIGH);
tapparella_up_mem=0;
delay(500);
easyvr.setPinOutput(EasyVR::IO3, LOW);
}
if (tapparella_dw_mem== HIGH) // IMPULSO DI chiusura
{ easyvr.setPinOutput(EasyVR::IO4, HIGH);
delay(500);
easyvr.setPinOutput(EasyVR::IO4, LOW);
tapparella_dw_mem=0;
}
if (garage_mem== HIGH)
{ easyvr.setPinOutput(EasyVR::IO3, HIGH);
}
}
void action()
{
switch (group)
{
case GROUP_1:
switch (idx)
{
case G1_BUONGIORNO:
easyvr.playSound(1, EasyVR::VOL_FULL);
break;
case G1_PRESENTATI:
easyvr.playSound(18, EasyVR::VOL_FULL);
break;;
case G1_ACCENDI_LUCE: //lista azioni da eseguire quando il comando viene richiamato
easyvr.playSound(5, EasyVR::VOL_FULL);
group = GROUP_2; //<-- vai al gruppo 2
break;
case G1_SPEGNI_LUCE:
easyvr.playSound(4, EasyVR::VOL_FULL); // lista azioni da eseguire quando il comando viene richiamato
group = GROUP_3;
break; //<-- vai al gruppo 3
case G1_RISCALDAMENTO:
easyvr.setPinOutput(EasyVR::IO2, HIGH);
easyvr.playSound(19, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_ALZA_TAPPARELLA:
easyvr.setPinOutput(EasyVR::IO3, HIGH);
easyvr.playSound(9, EasyVR::VOL_FULL);
break;
case G1_ABBASSA_TAPPARELLA:
easyvr.setPinOutput(EasyVR::IO3, LOW);
easyvr.playSound(13, EasyVR::VOL_FULL);
break;
case G1_SCENARIO_NOTTE:
digitalWrite (luce_salotto,LOW);
digitalWrite (luce_cucina,LOW);
digitalWrite (luce_camera,LOW);
digitalWrite (luce_giardino,HIGH);
digitalWrite (luce_bagno,LOW);
digitalWrite (allarme,HIGH);
digitalWrite (garage,LOW);
easyvr.setPinOutput(EasyVR::IO3, LOW);
easyvr.playSound(20, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_SCENARIO_GIORNO:
digitalWrite (luce_camera,HIGH);
digitalWrite (luce_giardino,LOW);
digitalWrite (luce_bagno,LOW);
digitalWrite (luce_salotto,LOW);
digitalWrite (luce_cucina,LOW);
digitalWrite (allarme,LOW);
easyvr.setPinOutput(EasyVR::IO3, HIGH);
easyvr.playSound(15, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_APRI_GARAGE:
digitalWrite (garage,HIGH);
easyvr.playSound(23, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_APRI_CANCELLO:
digitalWrite (cancello,HIGH);
easyvr.playSound(3, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_ATTIVA_ALLARME:
digitalWrite (allarme,HIGH);
easyvr.playSound(0, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_DISATTIVA_ALLARME:
digitalWrite (allarme,LOW);
easyvr.playSound(0, EasyVR::VOL_FULL);
easyvr.playSound(0, EasyVR::VOL_FULL);
easyvr.playSound(0, EasyVR::VOL_FULL);
easyvr.playSound(0, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G1_CHIUDI_GARAGE:
digitalWrite (garage,LOW);
easyvr.playSound(24, EasyVR::VOL_FULL);
group = GROUP_1;
break;
}
break;
case GROUP_2:
switch (idx)
{
case G2_SALOTTO:
digitalWrite (luce_salotto,HIGH);
easyvr.playSound(7, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_CUCINA:
digitalWrite (luce_cucina,HIGH);
easyvr.playSound(6, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_BAGNO:
digitalWrite (luce_bagno,HIGH);
easyvr.playSound(16, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_GIARDINO:
digitalWrite (luce_giardino,HIGH);
easyvr.playSound(14, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_CAMERA:
digitalWrite (luce_camera,HIGH);
easyvr.playSound(21, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_ALICE:
easyvr.playSound(1, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G2_GARAGE:
digitalWrite (luce_garage,HIGH);
easyvr.playSound(0, EasyVR::VOL_FULL);
group = GROUP_1;
break;
}
break;
case GROUP_3: /////////////////////////////////////////// spegnimento luci //////////////////////////////////////////////////////////
switch (idx)
{
case G3_SALOTTO:
digitalWrite (luce_salotto,LOW);
easyvr.playSound(10, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_CUCINA:
digitalWrite (luce_cucina,LOW);
easyvr.playSound(12, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_CAMERA:
digitalWrite (luce_camera,LOW);
easyvr.playSound(22, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_GARAGE:
digitalWrite (luce_garage,LOW);
easyvr.playSound(0, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_BAGNO:
digitalWrite (luce_bagno,LOW);
easyvr.playSound(17, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_ALICE:
easyvr.playSound(1, EasyVR::VOL_FULL); // rispondi audio
group = GROUP_1;
break;
case G3_GIARDINO:
digitalWrite (luce_giardino,LOW);
easyvr.playSound(11, EasyVR::VOL_FULL);
group = GROUP_1;
break;
}
break;
}
}
codice ultimato.
come mai per alcuni interruttori leggi lo stato così
if (analogRead(luce_salotto_in) >= 200)
e per altri
if (digitalRead(garage_in) == HIGH )
come sono collegati gli interruttori?
qui ricopi il numero del pin in un'altra variabile è questo che vuoi fare?
luce_camera_mem = luce_camera ; // ass. alla variabile stato di mem il valore della lampada
luce_bagno_mem = luce_bagno; // ass. alla variabile stato di mem il valore della lamp
luce_giardino_mem = luce_giardino; // ass. alla variabile stato di mem il valore della lamp
luce_salotto_mem = luce_salotto; // ass. alla variabile stato di mem il valore della lamp
riscaldamento_mem = 0; // ass. alla variabile stato di mem il valore della lamp
tapparella_up_mem = 0;
garage_mem = garage;
cancello_mem = cancello;
allarme_mem = allarme;
[code]
perchè poi qui cambi tutto
(tra l'altro il codice non compila perchè ci sono almeno 2 "uce_"
[code]
luce_salotto_mem = LOW;
uce_salotto_mem = HIGH;
poi in ogni if aggiorni previousmillis()
prima del loop hai messo
void action();
e poi a linea 356 (più o meno) parte la void Action()
anche questo sicuramente non funziona come vorresti
digitalWrite(riscaldamento_mem, LOW); //spegne la lampadina
riscaldamento_mem = LOW; //assegna alla vari di memoria lo sta
case GROUP_3: /////////////////////////////////////////// spegnimento luci //////////////////////////////////////////////////////////
switch (idx)
{
case G3_SALOTTO:
digitalWrite (luce_salotto,LOW);
easyvr.playSound(10, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_CUCINA:
digitalWrite (luce_cucina,LOW);
easyvr.playSound(12, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_CAMERA:
digitalWrite (luce_camera,LOW);
easyvr.playSound(22, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_GARAGE:
digitalWrite (luce_garage,LOW);
easyvr.playSound(0, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_BAGNO:
digitalWrite (luce_bagno,LOW);
easyvr.playSound(17, EasyVR::VOL_FULL);
group = GROUP_1;
break;
case G3_ALICE:
easyvr.playSound(1, EasyVR::VOL_FULL); // rispondi audio
group = GROUP_1;
break;
case G3_GIARDINO:
digitalWrite (luce_giardino,LOW);
easyvr.playSound(11, EasyVR::VOL_FULL);
group = GROUP_1;
break;
}
break;
}
}
codice ultimato.
Patrick_M:
come mai per alcuni interruttori leggi lo stato cosìif (analogRead(luce_salotto_in) >= 200)
e per altri
if (digitalRead(garage_in) == HIGH )
come sono collegati gli interruttori?
qui ricopi il numero del pin in un'altra variabile è questo che vuoi fare?
luce_camera_mem = luce_camera ; // ass. alla variabile stato di mem il valore della lampada
luce_bagno_mem = luce_bagno; // ass. alla variabile stato di mem il valore della lamp
luce_giardino_mem = luce_giardino; // ass. alla variabile stato di mem il valore della lamp
luce_salotto_mem = luce_salotto; // ass. alla variabile stato di mem il valore della lamp
riscaldamento_mem = 0; // ass. alla variabile stato di mem il valore della lamp
tapparella_up_mem = 0;
garage_mem = garage;
cancello_mem = cancello;
allarme_mem = allarme;
[code]
perchè poi qui cambi tutto
(tra l'altro il codice non compila perchè ci sono almeno 2 "uce_"
[code]
luce_salotto_mem = LOW;
uce_salotto_mem = HIGH;
poi in ogni if aggiorni previousmillis() prima del loop hai messo void action(); e poi a linea 356 (più o meno) parte la void Action()
deve leggere lo stato dell interruttore dai pin di ingresso , se viene premuto (stato alto), il primo "salotto" collegamento pulsante-led; il secondo devo simulare l'apertuta del garage con un motorino.
Patrick_M:
anche questo sicuramente non funziona come vorrestidigitalWrite(riscaldamento_mem, LOW); //spegne la lampadina
riscaldamento_mem = LOW; //assegna alla vari di memoria lo sta
ancora non vi è collegato nulla...solo led per vedere se manda impulso...si accende ma dopo qualche secondo si spegne.
il problema grosso sta nel fatto che quando avvio la simulazione i led dei pin 2 e 4 sono accesi e vengono influenzati dal del di ascolto...se cambio le uscite dei pin il problema si sposta con altri...
leonardi:
ancora non vi è collegato nulla...solo led per vedere se manda impulso...si accende ma dopo qualche secondo si spegne.
il problema grosso sta nel fatto che quando avvio la simulazione i led dei pin 2 e 4 sono accesi e vengono influenzati dal del di ascolto...se cambio le uscite dei pin il problema si sposta con altri...
non ho guardato tutto ma questo è sicuramente un errore
digitalWrite(riscaldamento_mem, LOW); //spegne la lampadina
riscaldamento_mem = LOW; //assegna alla vari di memoria lo sta
nella digitalWrite il primo parametro è il numero del pin
se riscaldamento_mem è = 0 (perchè all'inizio lo imposti così)
allora con la prima istruzione metti il pin 0 al valore LOW
ma tu sul pin digitale 0 (zero) non hai nulla collegato
quindi il tuo riscaldamento sicuramente non parte
-.-.-.-.-.-.-.-
if (analogRead(luce_salotto_in) >= 200)
deve leggere lo stato dell interruttore dai pin di ingresso , se viene premuto (stato alto), il primo "salotto" collegamento pulsante-led; il secondo devo simulare l'apertuta del garage con un motorino.
appunto, se devi leggere lo stato di un pulsante non lo fai con analogRead ma con digitalRead perchè il pulsante o è ON (+5V) oppure è OFF (0V) non sarà mai una tensione a metà tra 0V e 5V
Patrick_M:
non ho guardato tutto ma questo è sicuramente un erroredigitalWrite(riscaldamento_mem, LOW); //spegne la lampadina
riscaldamento_mem = LOW; //assegna alla vari di memoria lo sta
nella digitalWrite il primo parametro è il numero del pin se riscaldamento_mem è = 0 (perchè all'inizio lo imposti così) allora con la prima istruzione metti il pin 0 al valore LOW ma tu sul pin digitale 0 (zero) non hai nulla collegato quindi il tuo riscaldamento sicuramente non parte -.-.-.-.-.-.-.-
if (analogRead(luce_salotto_in) >= 200)
appunto, se devi leggere lo stato di un pulsante non lo fai con analogRead ma con digitalRead perchè il pulsante o è ON (+5V) oppure è OFF (0V) non sarà mai una tensione a metà tra 0V e 5V
ho messo analogRead perché il pulsante è collegati alle uscite analogiche a0
leonardi:
ho messo analogRead perché il pulsante è collegati alle uscite analogiche a0
... NON esistono "uscite analogiche" su Arduno UNO, esistono "ingressi anaogici" e, in ogni caso, nessuno ti impedisce di usare anche questi come dei normali pin "digitali" con l'uso di tutte le funzioni che normalmente si usano per essi.
Guglielmo
Il fatto e che essendo impostate i pin in input se metto digitalRead mi da errore il programma....
Cioé, se fai così, ti da errore ? ? ? :o
pinMode(A0, INPUT);
valore = digitalRead(A0);
Guglielmo
ce n'è solo uno che ti può dare errore
riscaldamento_in
perchè non l'hai definito nel setup
Esatto.... Ho ricontrollato il tutto.... Corretto I vari errori.... E adesso funziona tutto a dovere... Grazie infinite...