// HERE I AM GOING TO DEFIND THE GPIO LINES FOR MESSAGES ONE THROUGH EIGHT, AND A BUSY INPUT // BOTH THE HQ RECORD AND PLAYBACK MODULE, AND THE ARDUINO NEED THEIR OWN POWER SOURCES. // YOU NEED TO CONNECT THE GROUND LINES FROM EACH OF THESE UNITS TOGETHER SO THAT THEY CAN COMMUNICATE. // FOR THIS EXAMPLE, I AM USING ALL EIGHT MESSAGES PINS AND THE BUSY PIN ON THE HQ MODULE. I AM CONNECTION TO ARDUINO UNO PINS 2 THROUGH 10 #define BUSY 2 #define ONE 3 #define TWO 4 #define THREE 5 #define FOUR 6 #define FIVE 7 #define SIX 8 #define SEVEN 9 #define EIGHT 10 void setup() // HERE I AM GOING TO DECLARE ALL MESSAGE PINS AS OUTPUTS, AND THE BUSY PIN AS AN INPUT. I AM ALSO GOING TO ENSURE THAT ALL OUTPUTS ARE SET TO HIGH (5V) BY DEFAULT // I JUST NEED TO DO THIS ONCE { pinMode(BUSY,INPUT); pinMode(ONE,OUTPUT); pinMode(TWO,OUTPUT); pinMode(THREE,OUTPUT); pinMode(FOUR,OUTPUT); pinMode(FIVE,OUTPUT); pinMode(SIX,OUTPUT); pinMode(SEVEN,OUTPUT); pinMode(EIGHT,OUTPUT); digitalWrite(ONE,HIGH); digitalWrite(TWO,HIGH); digitalWrite(THREE,HIGH); digitalWrite(FOUR,HIGH); digitalWrite(FIVE,HIGH); digitalWrite(SIX,HIGH); digitalWrite(SEVEN,HIGH); digitalWrite(EIGHT,HIGH); delay(200); // SHORT POWER UP DELAY OF 200MS } void loop() { // THIS CODE CALLS FOR EACH MESSAGE TO BE PLAYED IN ORDER FROM MESSAGE 1 THROUGH MESSAGE 8. // ONCE ALL MESSAGES HAVE COMPLETED PLAYING, THERE WILL BE A 3 SECOND DELAY, AND THEN ALL MESSAGES WILL BE PLAYED AGAIN. OVER AND OVER... PlayONE(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayONE" FUNCTION PlayTWO(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayTWO" FUNCTION PlayTHREE(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayTHREE" FUNCTION PlayFOUR(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayFOUR" FUNCTION PlayFIVE(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayFIVE" FUNCTION PlaySIX(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlaySIX" FUNCTION PlaySEVEN(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlaySEVEN" FUNCTION PlayEIGHT(); // IN ORDER TO PLAY MESSAGE#1, ALL THAT I HAVE TO DO IS CALL THE "PlayEIGHT" FUNCTION delay(3000); } void PlayONE() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(ONE,LOW); delay(200); digitalWrite(ONE,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlayTWO() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(TWO,LOW); delay(200); digitalWrite(TWO,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlayTHREE() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(THREE,LOW); delay(200); digitalWrite(THREE,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlayFOUR() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(FOUR,LOW); delay(200); digitalWrite(FOUR,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlayFIVE() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(FIVE,LOW); delay(200); digitalWrite(FIVE,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlaySIX() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(SIX,LOW); delay(200); digitalWrite(SIX,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlaySEVEN() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(SEVEN,LOW); delay(200); digitalWrite(SEVEN,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } } void PlayEIGHT() { // IN ORDER TO TRIGGER A MESSAGE, PULL THE RELATIVE GPIO LINE LOW FOR 200ms, THEN SET BACK TO 5V (HIGH) // IF YOU WANT TO LOOP A MESSAGE, SIMPLY HOLD THE LINE LOW UNTIL YOU WISH TO STOP REPLAYING THE MESSAGE // IF YOU WANT TO STOP A MESSAGE MID-WAY THROUGH, BRING THE SAME LINE LOW AGAIN FOR 200ms, THEN SET BACK TO 5V (HIGH) digitalWrite(EIGHT,LOW); delay(200); digitalWrite(EIGHT,HIGH); delay(100); // THIS WHILE STATEMENT IS OPTIONAL. IT KEEPS THE SOFTWARE FROM DOING ANYTHING ELSE UNTIL THE MESSAGE IS DONE PLAYING. // COMMENT OUT THE BELOW WHILE STATEMENT IF YOU DON'T WANT TO USE THE BUSY SIGNAL while (digitalRead(BUSY) == LOW) { {} } }