/** * CANAL YOUTUBE * L GUSTAVO PROGRAMAÇÃO E ROBÓTICA * PROF. ENG. LUIZ GUSTAVO * */ #include #include "VoiceRecognitionV3.h" /** Connection Arduino VoiceRecognitionModule 52 -------> TX 53 -------> RX */ VR myVR(52,53); // 52:RX 53:TX, you can choose your favourite pins. SoftwareSerial bt_serial(50,51);//RX e TX BLUETOOTH uint8_t records[7]; // save record uint8_t buf[64]; // Leds indicadores de pais e filhos int Led_Arduino = 13; int Led_Ligar = 12; int Led_Desligar = 11; int Led_Lampada = 10; int Led_TV = 9; int Led_Portao = 8; unsigned long tempo_limite; unsigned long tempo_espera; // Variaveis para armazenar o estado do comando reconhecido boolean comando_Arduino = false; boolean comando_Bluetooth = false; boolean comando_Ligar = false; boolean comando_Desligar = false; boolean comando_Lampada = false; boolean comando_TV = false; boolean comando_Portao = false; //COMANDO AVÔ #define Arduino (0) //COMANDOS PAIS #define Ligar (1) #define Desligar (2) //COMANDOS FILHOS #define Lampada (3) #define TV (4) #define Portao (5) void printSignature(uint8_t *buf, int len) { int i; for(i=0; i0x19 && buf[i]<0x7F){ Serial.write(buf[i]); } else{ Serial.print("["); Serial.print(buf[i], HEX); Serial.print("]"); } } } /** @brief Print signature, if the character is invisible, print hexible value instead. @param buf --> VR module return value when voice is recognized. buf[0] --> Group mode(FF: None Group, 0x8n: User, 0x0n:System buf[1] --> number of record which is recognized. buf[2] --> Recognizer index(position) value of the recognized record. buf[3] --> Signature length buf[4]~buf[n] --> Signature */ 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); bt_serial.begin(9600); Serial.begin(9600); Serial.println("COMANDOS PAIS E FILHOS"); // Declarar todos pinos como saída para os LEds pinMode(Led_Arduino, OUTPUT); pinMode(Led_Ligar, OUTPUT); pinMode(Led_Desligar, OUTPUT); pinMode(Led_Lampada, OUTPUT); pinMode(Led_TV, OUTPUT); pinMode(Led_Portao, 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); } //Carregar todos os comandos no VR3 if(myVR.load((uint8_t)Arduino) >= 0){ Serial.println("onRecord loaded"); } if(myVR.load((uint8_t)Desligar) >= 0){ Serial.println("offRecord loaded"); } if(myVR.load((uint8_t)Ligar) >= 0){ Serial.println("onRecord loaded"); } if(myVR.load((uint8_t)Lampada) >= 0){ Serial.println("offRecord loaded"); } if(myVR.load((uint8_t)TV) >= 0){ Serial.println("offRecord loaded"); } if(myVR.load((uint8_t)Portao) >= 0){ Serial.println("onRecord loaded"); } } void loop() { int ret; ret = myVR.recognize(buf, 50); if(ret>0){ switch(buf[1]){ // Verifica se o comando Arduino para iniciar o sistema foi reconhecido case Arduino: // Verifica se o sistema já está iniciado if(comando_Arduino==false){// COMANDO CASO MODULO DE VOZ DESLIGADO UTILIZA BLUETOOTH char c=bt_serial.read(); if(c=='A'){digitalWrite(Led_Lampada,HIGH);}// LIga lampada BLuetooth if(c=='a'){digitalWrite(Led_Lampada,LOW);} if(c=='B'){digitalWrite(Led_TV,HIGH);}//Liga TV Bluetooth if(c=='b'){digitalWrite(Led_TV,LOW);} if(c=='C'){digitalWrite(Led_Portao,HIGH);}// Liga PORTAO bluetooth if(c=='c'){digitalWrite(Led_Portao,LOW);} comando_Arduino = true; tempo_limite = millis(); Serial.println("Olá Mestre, o que você deseja?"); // Ola mestre, o que você deseja? (áudio) digitalWrite(Led_Arduino, HIGH); } else{ Serial.println("Já estou esperando suas ordens!"); // Já estou esperando suas ordens (áudio) } break; case Ligar: if(comando_Arduino==true){ comando_Ligar = true; comando_Desligar = false; Serial.println("Qual equipamento deseja ligar?"); //Qual equipamento deseja acionar? áudio digitalWrite(Led_Ligar, HIGH); digitalWrite(Led_Desligar, LOW); // Pois não senhor, o que deseja ligar? } break; case Desligar: if(comando_Arduino==true){ comando_Ligar = false; comando_Desligar = true; Serial.println("Qual equipamento deseja desligar?"); //Qual equipamento deseja desligar? áudio digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, HIGH); // Pois não senhor, o que deseja ligar? } break; case Lampada: if(comando_Ligar==true){ if(digitalRead(Led_Lampada)==HIGH){ Serial.println("Lampada já está ligada"); //Senhor a lampada já está ligada } else{ Serial.println("Ligando lampada..."); //Será um prazer atender } digitalWrite(Led_Lampada, HIGH); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } if(comando_Desligar==true){ if(digitalRead(Led_Lampada)==LOW){ Serial.println("Lampada já está desligada"); //Senhor a lampada já está desligada } else{ Serial.println("Desligando lampada..."); //Será um prazer atender } digitalWrite(Led_Lampada, LOW); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } break; case TV: if(comando_Ligar==true){ if(digitalRead(Led_TV)==HIGH){ //Senhor a TV já está ligada } else{ //Será um prazer atender } digitalWrite(Led_TV, HIGH); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } if(comando_Desligar==true){ if(digitalRead(Led_TV)==LOW){ //Senhor a TV já está desligada } else{ //Será um prazer atender } digitalWrite(Led_TV, LOW); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } break; case Portao: if(comando_Ligar==true){ Serial.println("Abrir portao"); digitalWrite(Led_Portao, HIGH); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } if(comando_Desligar==true){ if(digitalRead(Led_Portao)==LOW){ //Senhor a TV já está desligada } else{ //Será um prazer atender } digitalWrite(Led_Portao, LOW); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); digitalWrite(Led_Arduino, LOW); } break; default: Serial.println("Record function undefined"); break; } /** voice recognized */ printVR(buf); } // Calcular tempo de espera sem resposta if(comando_Arduino==true){ tempo_espera = millis() - tempo_limite; if(tempo_espera > 8000){ Serial.println("Tempo esgotado!"); comando_Arduino = false; comando_Ligar = false; comando_Desligar = false; digitalWrite(Led_Arduino, LOW); digitalWrite(Led_Ligar, LOW); digitalWrite(Led_Desligar, LOW); } } }