/** ****************************************************************************** * @file vr_Chair_Commands.ino * @author Yahya M * @brief This file provides a demostration on how to control three servo motors by using VoiceRecognitionModule ****************************************************************************** * @note: voice control servo motors ****************************************************************************** * @section HISTORY 2023/07/23 Initial version. */ #include #include #include "VoiceRecognitionV3.h" // create servo objects to control a servo Servo servo1; Servo servo2; Servo servo3; // variable for position of servo (90 degrees for horizontal) int pos = 90; /** Connection Arduino VoiceRecognitionModule 2 -------> TX 3 -------> RX */ VR myVR(2,3); // 2:RX 3:TX, you can choose your favourite pins. uint8_t records[7]; // save record uint8_t buf[64]; #define group0Record1 (1) #define group0Record2 (2) #define group0Record3 (3) #define group0Record4 (4) #define group0Record5 (5) #define group0Record6 (6) /** @brief Print signature, if the character is invisible, print hexible value instead. @param buf --> command length len --> number of parameters */ 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() { delay(100); /** initialize */ myVR.begin(9600); Serial.begin(115200); Serial.println("Elechouse Voice Recognition V3 Module\r\nLift Chair Commands"); //initialize and attach servos servo1.attach(A3); // attaches the servo on pin A3 to the servo object servo2.attach(A1); // attaches the servo on pin A1 to the servo object servo3.attach(A0); // attaches the servo on pin A0 to the servo object servo1.write(pos); // tell servo to go to position in variable 'pos' servo2.write(pos); // tell servo to go to position in variable 'pos' servo3.write(pos); // tell servo to go to position in variable 'pos' if(myVR.clear() == 0){ Serial.println("Recognizer cleared."); }else{ Serial.println("Not find VoiceRecognitionModule."); Serial.println("Please check connection and restart Arduino."); while(1); } records[1] = group0Record1; records[2] = group0Record2; records[3] = group0Record3; records[4] = group0Record4; records[5] = group0Record5; records[6] = group0Record6; if (myVR.load(records, 7) >= 0) { //printRecord(records, 7); Serial.println(F("loaded.")); } } void loop() { int ret; ret = myVR.recognize(buf, 1000); //listen every 1000 ms (1 second). Change this for sensitivity if(ret>0){ switch(buf[1]){ //chair up case group0Record1: //make servo push button for (pos = 90; pos <= (90 + 60); pos += 1) { // goes from 90 degrees to 90+60 degrees // in steps of 1 degree servo1.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(4000); //wait 4 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo1.write(pos); // tell servo to go to position in variable 'pos' break; //chair down case group0Record2: //make servo push button for (pos = 90; pos >= (90 - 60); pos -= 1) { // goes from 90 degrees to 90-60 degrees // in steps of 1 degree servo1.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(4000); //wait 4 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo1.write(pos); // tell servo to go to position in variable 'pos' delay(250); //wait .25 second break; //leg up case group0Record4: //make servo push button for (pos = 90; pos <= (90 + 60); pos += 1) { // goes from 90 degrees to 90+60 degrees // in steps of 1 degree servo2.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(4000); //wait 4 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo2.write(pos); // tell servo to go to position in variable 'pos' break; //leg down case group0Record3: //make servo push button for (pos = 90; pos >= (90 - 60); pos -= 1) { // goes from 90 degrees to 90-60 degrees // in steps of 1 degree servo2.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(4000); //wait 4 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo2.write(pos); // tell servo to go to position in variable 'pos' break; //head up case group0Record6: //make servo push button for (pos = 90; pos <= (90 + 60); pos += 1) { // goes from 90 degrees to 90+60 degrees // in steps of 1 degree servo3.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(3000); //wait 3 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo3.write(pos); // tell servo to go to position in variable 'pos' break; //head down case group0Record5: //make servo push button for (pos = 90; pos >= (90 - 60); pos -= 1) { // goes from 90 degrees to 90-60 degrees // in steps of 1 degree servo3.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } delay(3000); //wait 3 seconds // reset servo back to horizontal position (90 degrees) pos = 90; servo3.write(pos); // tell servo to go to position in variable 'pos' break; default: Serial.println("Record function undefined"); break; } /** voice recognized */ printVR(buf); } else{ Serial.println("Nothing recognized"); } }