Problema con el codigo

Hola, soy un principiante, estoy trabajando en mi proyecto de grado, mi proyecto de grado se basa en la automatización de los hogares con Domotica… para llevar a cabo mi proyecto estamos utilizando un código el cual me permita utilizar comandos de voz para activar cierta luz o parte de la casa, todo resulta bien y el código sale sin ningún problema, pero a la hora de utilizarlo al decir un comando para encender la luz, esto lo que hace es encenderse e instantaneamente apagarse, cuando se tendría que decir dos veces el comando para que este se apague.
Aquí les dejo el código, ojalá puedan ayudarme

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"


VR myVR(2,3);    // 2:RX 3:TX, you can choose your favourite pins.

uint8_t records[7]; // save record
uint8_t buf[64];

int Cocina = 13;
int Pieza = 12;
int Sala = 11;
boolean activado=false;
boolean activadoS=false;
boolean activadoP=false;

#define Encendido   (0)
#define encendidos  (1) 
#define Encendidob  (2)


void printSignature(uint8_t *buf, int len)
{
 int i;
 for(i=0; i<len; i++){
   if(buf[i]>0x19 && buf[i]<0x7F){
     Serial.write(buf[i]);
   }
   else{
     Serial.print("[");
     Serial.print(buf[i], HEX);
     Serial.print("]");
   }
 }
}


void printVR(uint8_t *buf)
{
 Serial.println("VR Index\tGroup\tRecordNum\tSignature");

 Serial.print(buf[2], DEC);
 Serial.print("\t\t");

 if(buf[0] == 0xFF){
   Serial.print("NONE");
 }
 else if(buf[0]&0x80){
   Serial.print("UG ");
   Serial.print(buf[0]&(~0x80), DEC);
 }
 else{
   Serial.print("SG ");
   Serial.print(buf[0], DEC);
 }
 Serial.print("\t");

 Serial.print(buf[1], DEC);
 Serial.print("\t\t");
 if(buf[3]>0){
   printSignature(buf+4, buf[3]);
 }
 else{
   Serial.print("NONE");
 }
 Serial.println("\r\n");
}

void setup()
{
 /** initialize */
 myVR.begin(9600);
 
 Serial.begin(115200);
 Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");
 
 pinMode(Cocina, OUTPUT);
 pinMode(Pieza, OUTPUT);
 pinMode(Sala, OUTPUT);  
 if(myVR.clear() == 0){
   Serial.println("Recognizer cleared.");
 }else{
   Serial.println("Not find VoiceRecognitionModule.");
   Serial.println("Please check connection and restart Arduino.");
   while(1);
 }
 
 if(myVR.load((uint8_t)Encendido) >= 0){
   Serial.println("Encendido Cocina");
 }
 

if(myVR.load((uint8_t)encendidos) >= 0){
   Serial.println("Encendido Pieza");
 }
 if(myVR.load((uint8_t)Encendidob) >= 0){
   Serial.println("Encendido Sala");
 }
}

void loop()
{
 int ret;
 ret = myVR.recognize(buf, 50);
 if(ret>0){
   switch(buf[1]){
     case Encendido:
       /** turn on LED */
       digitalWrite(Cocina, HIGH);

       if (activado==false){
         activado=true;
         Serial.println("Comando cocina encendido");
       delay (300);
       }
       
       
       if(activado==true){
         activado=false;
         Serial.println("Comando cocina apagado");
       delay (300);
       }
       
       activado=true;
       break;
       case encendidos:
       /** turn on LED */
       digitalWrite(Pieza, HIGH);
       if (activado==false){
         activadoP=true;
         Serial.println("Comando pieza encendido");
       }
       if(activadoP==true){
         activadoP=false;
         Serial.println("Comando pieza apagado");
       }
       break;
       case Encendidob:
       digitalWrite(Sala, HIGH);
       if (activado==false){
         activadoS=true;
         Serial.println("Comando sala encendido");
       }
       if(activadoP==true){
         activadoP=false;
         Serial.println("Comando sala apagado");
       }
       break;
     default:
       Serial.println("Record function undefined");
       break;
   }
   
   printVR(buf);
 }
}

Si es un problema de código debería estar en la sección de Software.

Además el código debería estar posteado con las etiquetas code como indican las NORMAS

No se como funciona ese reconocimiento de voz pero veo alguna cosa.

Supongo que cuando haces un digitalWrite(Cocina,HIGH) ha de encenderse la luz, pero para que se apage ¿no debería haber un digitalWrite(Cocina,LOW) para apagar? Cosa que no veo por ningún lado.

Eso me hace pensar que no miras los pines y solo ves lo que te sale por el puerto serie.

Entonces tenemos el código dentro de cada case:

        digitalWrite(Cocina, HIGH);

        if (activado==false){
          activado=true;
          Serial.println("Comando cocina encendido");
        delay (300);
        }
             
        if(activado==true){
          activado=false;
          Serial.println("Comando cocina apagado");
        delay (300);
        }
       
        activado=true;

No ves que si no está activado, lo activas, seguidamente lo desactivas y seguidamente lo vuelves a activar... esa secuencia no es para nada válida.

Hola @juanjo200339, ya he editado el código por esta vez, por favor sigue el consejo de victorjam porque en este foro todos deben respetar las normas.

Que tal si pruebas el case Encendido asi

      case Encendido:
                    activado = !activado;
                    if (activado) {
                        digitalWrite(Cocina, HIGH);   
                        Serial.println("Comando cocina encendido");
                    }
                    else {
                         Serial.println("Comando cocina apagado");
                         digitalWrite(Cocina, LOW);   
                    }
                    delay(300);   // aunque no me gustan los delays.
                    break;