Easyvr shield 3.0

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. :slight_smile:

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 :wink:

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 vorresti

digitalWrite(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 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)




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... :slight_smile: