#include <SPI.h>
#include <dht.h>
#include <Servo.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
bool idle = true;
bool blink = false;
bool sleep = false;
bool lookaround = false;
bool bimo = false;
int delayerIdle = 0;
int delayerBlink = 0;
int delayerLookaround = 0;
int delayerBimo = 0;
void setup() {
// put your setup code here, to run once:
u8g2.begin();
u8g2.clearBuffer();
Serial.begin(9600);
Serial.println("Start");
}
void loop() {
// put your main code here, to run repeatedly:
if (idle) {
u8g2.drawBox(22, 16, 31, 22);
u8g2.drawBox(74, 16, 31, 22);
u8g2.sendBuffer();
delayerIdle++;
if (delayerIdle == 90) {
idle = false;
blink = true;
sleep = false;
lookaround = false;
bimo = false;
u8g2.clearBuffer();
delayerIdle = 0;
}
char inputString[10];
if (Serial.available()) {
Serial.readBytesUntil('\n', inputString, sizeof(inputString));
if (strcmp(inputString, "Bimo") == 0 || strcmp(inputString, "bimo") == 0) {
idle = false;
blink = false;
sleep = false;
lookaround = false;
bimo = true;
u8g2.clearBuffer();
delayerIdle = 0;
delayerLookaround = 0;
delayerBlink = 0;
delayerBimo = 0;
tone(13, 453, 200);
}
}
} else if (blink) {
u8g2.drawBox(22, 25, 31, 13);
u8g2.drawBox(74, 25, 31, 13);
u8g2.sendBuffer();
delay(100);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(22, 29, 31, 9);
u8g2.drawBox(74, 29, 31, 9);
u8g2.sendBuffer();
delay(100);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(22, 34, 31, 4);
u8g2.drawBox(74, 34, 31, 4);
u8g2.sendBuffer();
delay(100);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(22, 29, 31, 9);
u8g2.drawBox(74, 29, 31, 9);
u8g2.sendBuffer();
delay(100);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(22, 25, 31, 13);
u8g2.drawBox(74, 25, 31, 13);
u8g2.sendBuffer();
delay(100);
//call update display for time
delayerIdle = 0;
delayerBlink++;
if (delayerBlink == 5) {
idle = false;
blink = false;
sleep = false;
lookaround = true;
bimo = false;
u8g2.clearBuffer();
delayerBlink = 0;
} else {
idle = true;
blink = false;
sleep = false;
lookaround = false;
bimo = false;
u8g2.clearBuffer();
}
} else if (lookaround) {
u8g2.drawBox(22, 16, 31, 22);
u8g2.drawBox(74, 16, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(16, 13, 31, 22);
u8g2.drawBox(63, 12, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(10, 9, 31, 22);
u8g2.drawBox(56, 9, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(41, 13, 31, 22);
u8g2.drawBox(84, 10, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(46, 22, 31, 22);
u8g2.drawBox(90, 21, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
//call update display for time
u8g2.drawBox(11, 28, 31, 22);
u8g2.drawBox(59, 27, 31, 22);
u8g2.sendBuffer();
delay(500);
u8g2.clearBuffer();
delayerLookaround++;
if (delayerLookaround == 2) {
idle = true;
blink = false;
sleep = false;
lookaround = false;
bimo = false;
delayerLookaround = 0;
u8g2.clearBuffer();
}
} else if (bimo) {
u8g2.drawBox(28, 7, 31, 22);
u8g2.drawBox(72, 6, 31, 22);
char inputString[50];
if (Serial.available()) {
Serial.readBytesUntil('\n', inputString, sizeof(inputString));
Serial.print(strcmp(inputString, "what is your name"));
if (strcmp(inputString, "what is your name") == 0) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(23, 46, "My name is Bimo");
u8g2.sendBuffer();
}
if (strstr(inputString, "I am") != NULL) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_helvB08_tr);
char* nameStart = inputString + 4;
u8g2.drawStr(23, 46, "Nice to meet you, ");
u8g2.drawStr(40, 60, nameStart);
u8g2.sendBuffer();
}
}
u8g2.sendBuffer();
if (delayerBimo == 60) {
idle = true;
blink = false;
sleep = false;
lookaround = false;
bimo = false;
delayerBimo = 0;
}
}
}