#include <Arduino.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "pitches.h"
const int RED = 3;
const int GREEN = 4;
const int BLUE = 5;
const int BUZZ = 6;
//Arduino Nano
//SCK=13, MOSI=11, MISO,12, IRQ=Not_Used;
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
char text[32] = "";
char ACK[32]= "ACK";
char NON[32]="NON",EMPTY[32]="";
char NEW[32]="NEW", END[32]="END";
char ACCEPT[4]="ACC", REJECT[4]="REJ";
int i=0,j=0,num=1,temp=0,STATUS=0;
char userInput;
int nextL;
unsigned long startTime = millis();
void beep(int sound);
void setup() {
Serial.begin(115200);
Serial.println("\n\n\n");
Serial.println("***_RASTAURANT MENU SYSTEM RECIVER VER 3.0_***");
Serial.println(" *** FOUR LEAVES SOFTWARE ***");
Serial.println();
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(BUZZ, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(BUZZ, LOW);
beep(2);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
Serial.println(" *** __ALL SYSTEM ONLINE__ ***");
Serial.println("=================================================\n");
beep(8);
}
void loop(){
if (Serial.available()){
//Recive the text from the radio
text = Serial.readString();
if(strncmp(text, ACK, 3)==0) {
if(STATUS==0) {
STATUS=1;
Serial.println("***_MENU SYSTEM 001 Connected_***");
}
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
delay(500);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
}
else if(strncmp(text, NON, 3)==0) {
Serial.print("");
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
}
else if(strncmp(text, NEW, 3)==0) {
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
beep(6); //sound alarm
Serial.println();
Serial.println("*****New Order Recived*****");
Serial.print("***** Order Number ");
Serial.print(num++);
Serial.println(" *****");
i=0;
}
else if(strncmp(text, END, 3)==0) {
Serial.println();
temp=1;
}
else if(temp==1){
Serial.println(text);
Serial.println("*****New Order End*****");
Serial.println();
temp=0;
Serial.println("Accept Order? (Y/N)");
//log the start wait time
startTime = millis();
while(true) {
while(!Serial.available());
userInput = Serial.read();
if(userInput == 'Y' || userInput == 'y') {
radio.stopListening();
radio.openWritingPipe(address);
radio.write(ACCEPT, sizeof(ACCEPT));
radio.startListening();
Serial.println("Order Accepted");
beep(2); //sound accept
break;
} else if(userInput == 'N' || userInput == 'n') {
radio.stopListening();
radio.openWritingPipe(address);
radio.write(REJECT, sizeof(REJECT));
radio.startListening();
Serial.println("Order Rejected");
beep(3); //sound rejected
break;
} else {
Serial.println("Invalid Input. Please enter Y or N.");
}
//check for time out
if (millis() - startTime > 60000) { // 60 seconds
Serial.println("Timeout: No input received.");
break;
}
}
for(j=0;j<5;j++){
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(1000);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(1000);
}
}
else {
//Check for recived string
if(text[0] != '\0'){
if(strncmp(text, NON, 3)!=0) {
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
i++;
Serial.print(i); Serial.print(" : ");
}
Serial.println(text);
}
else
if(false){//If empty string is recived wait for and do nothing
Serial.print(".");
if(nextL >= 50) {
Serial.println(".");
nextL = 0;
}
else nextL++;
delay(100);
}
}
}
}
void beep(int sound){
switch(sound){
case 0: // Barcode Scanner
tone(BUZZ, NOTE_B6,200);
delay(250);
break;
case 1: // Play Coin Sound
tone(BUZZ, NOTE_B5,100);
delay(100);
tone(BUZZ, NOTE_E6,850);
delay(800);
break;
case 2: //Tone Start G7
tone(BUZZ, NOTE_G6,125);
delay(151);
tone(BUZZ, NOTE_G6,125);
delay(125);
break;
case 3: //Tone End E7
tone(BUZZ, NOTE_E6,125);
delay(151);
tone(BUZZ, NOTE_E6,125);
delay(125);
break;
case 5:/// Door Bell F#5, D#3
tone(BUZZ, NOTE_FS6,200);
delay(500);
tone(BUZZ, NOTE_DS3,300);
tone(BUZZ, NOTE_D3,500);
break;
case 6: // Metal detector sound
for(uint8_t i=0; i<5; i++){
tone(BUZZ, NOTE_E6,200);
delay(500);
}
break;
case 7:// Airplane Alerm Sound
for(uint8_t i=0; i<10; i++){
tone(BUZZ, NOTE_B4,200);
delay(500);
}
break;
case 8:// Play 1-up sound
tone(BUZZ, NOTE_E6,125);
delay(130);
tone(BUZZ, NOTE_G6,125);
delay(130);
tone(BUZZ, NOTE_E7,125);
delay(130);
tone(BUZZ, NOTE_C7,125);
delay(130);
tone(BUZZ, NOTE_D7,125);
delay(130);
tone(BUZZ, NOTE_G7,125);
delay(125);
// noTone(BUZZ);
break;
case 9:// Play Fireball sound
tone(BUZZ, NOTE_G4,35);
delay(35);
tone(BUZZ, NOTE_G5,35);
delay(35);
tone(BUZZ, NOTE_G6,35);
delay(35);
break;
case 10: // Barcode Scanner
tone(BUZZ, NOTE_B6,100);
delay(100);
break;
default:// ERROR Sound
for(uint8_t i=0; i<5; i++){
tone(BUZZ, NOTE_AS3,200);
delay(750);
}
break;
}
noTone(BUZZ);
}