#include "RTClib.h" #include "VoiceRecognitionV3.h" #include #define SD_ChipSelectPin 53 #define On (1) #define Off (2) #define Time (3) #define clara (4) #define Date (5) #define sad (6) #define exercise (7) #define laugh (8) #define study (9) #define Stop (10) #define Timer (11) #define min1 (12) #define min2 (13) #define min3 (14) #define min5 (15) #define min15 (16) #define min30 (17) #define hour1 (18) int trigger = 0; int slave = 2; int temp; int num = 0; uint8_t buf[64]; int flag = 1; int light = 13; int count = 0; int Hour; int Minute; int Second; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; class Clock { private: int Hours; int Minutes; int Seconds; public: Clock() { this->Hours = 0; this->Minutes = 0; this->Seconds = 0; } Clock(int x, int y, int z) { this->Hours = x; this->Minutes = y; this->Seconds = z; } void assign (int x, int y, int z) { this->Hours = x; this->Minutes = y; this->Seconds = z; } void add_min() { if ( this-> Minutes + 1 < 60) { this -> Minutes ++; } if ( this-> Minutes + 1 == 60) { this -> Minutes = 0; this -> Hours ++; } if ( this-> Hours + 1 == 24) { this -> Hours = 0; } } void add(int temp) { for (;;) { if (temp == 0) { break; } if (this->Seconds + temp >= 60) { this->add_min(); if (temp >= 60) { temp = temp - 60; } else { temp = this->Seconds + temp - 60; } } if ( this->Seconds + temp < 60) { this->Seconds = this->Seconds + temp; temp = 0; } } } bool compare() { if ( (Hour == this->Hours) && (Minute == this->Minutes) && (Second == this->Seconds) ) { return true; } return false; } int get_Hours() { return this->Hours; } int get_Minutes() { return this->Minutes; } int get_Seconds() { return this->Seconds; } }; VR myVR(2, 3); RTC_DS3231 rtc; Clock C; void initialize1() { myVR.clear(); for (;;) { if (myVR.load((uint8_t)On) >= 0) { //Serial.println("1 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Off) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Time) >= 0) { //Serial.println("1 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)clara) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Date) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Timer) >= 0) { //Serial.println("2 loaded"); break; } } } void initialize2() { myVR.clear(); for (;;) { if (myVR.load((uint8_t)sad) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Timer) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)exercise) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)laugh) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)study) >= 0) { //Serial.println("2 loaded"); break; } } for (;;) { if (myVR.load((uint8_t)Stop) >= 0) { //Serial.println("2 loaded"); break; } } } void initialize3() { myVR.clear(); for (;;) { if (myVR.load((uint8_t)min1) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)min2) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)min3) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)min15) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)min5) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)min30) >= 0) { break; } } for (;;) { if (myVR.load((uint8_t)hour1) >= 0) { break; } } } void Send (int i) { Wire.begin(); Wire.beginTransmission(slave); Wire.write(i); Wire.endTransmission(); } void Send (int x, int y, int z) { Wire.begin(); Wire.beginTransmission(slave); Wire.write(x); Wire.write(y); Wire.write(z); Wire.endTransmission(); } void Send (int x, int y, int z, int k) { Wire.begin(); Wire.beginTransmission(slave); Wire.write(x); Wire.write(y); Wire.write(z); Wire.write(k); Wire.endTransmission(); } void setup() { if (! rtc.begin()) { Serial.println("Couldn't find RTC"); Serial.flush(); abort(); } if (rtc.lostPower()) { Serial.println("RTC lost power, let's set the time!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); myVR.begin(9600); Serial.begin(115200); pinMode(light, OUTPUT); digitalWrite(light, LOW); if (myVR.clear() == 0) { Serial.println("Recognizer cleared."); } else { Serial.println("Not find VoiceRecognitionModule."); Serial.println("Please check connection and restart Arduino."); while (true); } } void loop() { DateTime now = rtc.now(); Hour = now.hour(); Minute = now.minute(); Second = now.second(); if (trigger == 1) { if ( C.compare() == true ) { trigger = 0; Send(20); } } if (flag == 1) { if (myVR.clear() != 0) { Serial.println("stun"); } initialize1(); flag = 0; } if ( flag == 2) { if (myVR.clear() != 0) { Serial.println("stun"); } initialize2(); flag = 0; count = 0; } if ( flag == 3) { if (myVR.clear() != 0) { Serial.println("stun"); } initialize3(); flag = 0; count = 0; } if ( count == 1000) { flag = 1; count = 0; Send(0); } int rec; rec = myVR.recognize(buf, 50); if (rec > 0) { if (buf[1] == On ) { digitalWrite(light, LOW); Serial.println("in"); Send(1); digitalWrite(light, HIGH); delay(500); } if (buf[1] == Off) { Send(2); digitalWrite(light, LOW); delay(500); } if (buf[1] == Time) { Serial.println(Hour); Serial.println(Minute); Send(3, Hour, Minute); delay(500); } if (buf[1] == Date) { int Day = now.day(); int Month = now.month(); int Week = now.dayOfTheWeek(); Send(12, Day, Month, Week); delay(500); } if (buf[1] == clara) { flag = 2; Send(4); delay(500); } if ( buf[1] == study ) { flag = 1; switch (count % 3) { case 1: Send(5); break; case 2: Send(6); break; case 0: Send(7); break; } delay(500); } if ( buf[1] == sad) { flag = 1; Send(8); delay(500); } if ( buf[1] == laugh ) { flag = 1; Send(9); delay(500); } if ( buf[1] == Timer ) { flag = 3; Send(21); delay(500); } if ( buf[1] == min1 ) { C.assign(Hour, Minute, Second); C.add(60); trigger = 1; flag = 1; Send(13); delay(500); } if ( buf[1] == min2 ) { C.assign(Hour, Minute, Second); C.add(60 * 2); trigger = 1; flag = 1; Send(14); delay(500); } if ( buf[1] == min3 ) { C.assign(Hour, Minute, Second); C.add(60 * 3); trigger = 1; flag = 1; Send(15); delay(500); } if ( buf[1] == min5 ) { C.assign(Hour, Minute, Second); C.add(60 * 5); trigger = 1; flag = 1; Send(16); delay(500); } if ( buf[1] == min15 ) { C.assign(Hour, Minute, Second); C.add(60 * 15); trigger = 1; flag = 1; Send(17); delay(500); } if ( buf[1] == min30 ) { C.assign(Hour, Minute, Second); C.add(60 * 30); trigger = 1; flag = 1; Send(18); delay(500); } if ( buf[1] == hour1 ) { C.assign(Hour, Minute, Second); C.add(60 * 60); trigger = 1; flag = 1; Send(19); delay(500); } if ( buf[1] == exercise) { flag = 1; Send(10); delay(500); } } count ++; }