#include <LiquidCrystal.h>
#include "StringQueue.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int SW = 7;
int LED_empty = 8;
int LED_full = 9;
boolean toggle = false;
int num = 10;
String userPut ,userGet;
char buf[20];
StringQueue st( num );
void setup() {
lcd.begin(16, 2);
pinMode(SW, INPUT_PULLUP);
pinMode(LED_empty, OUTPUT);
pinMode(LED_full, OUTPUT);
Serial.begin(115200);
}
void loop() {
userGet = NULL;
userPut = NULL;
if ((digitalRead(SW) == LOW) && (toggle == false)) {
toggle = true;
} else if ((digitalRead(SW) == HIGH) && (toggle == true)) {
if (st.get(userGet)) {
userGet.toCharArray( buf, 20);
digitalWrite(LED_empty,LOW);
digitalWrite(LED_full,LOW);
Serial.println("[-] Get <= " + userGet + " <= from Queue");
lcd.setCursor(0, 0);
lcd.clear();
lcd.print(userGet);
lcd.setCursor(0, 1);
lcd.print("Remain : " + String(st.size()));
} else {
digitalWrite(LED_empty,HIGH);
digitalWrite(LED_full,LOW);
Serial.println("[!] Queue is Empty");
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("-----EMPTY!-----");
lcd.setCursor(0, 1);
lcd.print("Remain : " + String(st.size()));
}
toggle = false;
}
while(Serial.available() > 0) {
userPut = Serial.readStringUntil(\'\\n\');
}
if (userPut.length() > 16) {
userPut = userPut.substring(0,16);
Serial.println("[!] Your String more than 16 letter. This program get 1 to 16 letter");
}
if (userPut.length() > 0) {
if (!st.put(userPut)) {
digitalWrite(LED_full,HIGH);
digitalWrite(LED_empty,LOW);
Serial.println("\\n[!] Queue is Full!");
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("----- FULL -----");
lcd.setCursor(0, 1);
lcd.print("Remain : " + String(st.size()));
} else {
digitalWrite(LED_full,LOW);
digitalWrite(LED_empty,LOW);
Serial.println("[+] Put => " + userPut + " => to Queue");
}
}
}