diff --git a/LCD.h b/LCD.h new file mode 100644 index 0000000..490804b --- /dev/null +++ b/LCD.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include +#include + +class LCD { +public: + hd44780_I2Cexp lcd; + + LCD(hd44780_I2Cexp lcd); + + void drawChar(int x, int y, char c); + void drawRectangle(int x, int y); + void drawBlink(int x, int y); + void clear(); +}; diff --git a/sketch/Face.h b/sketch/Face.h new file mode 100644 index 0000000..8883cab --- /dev/null +++ b/sketch/Face.h @@ -0,0 +1,12 @@ +#pragma once +#include "LCD.h" + +class Face { +private: + int x; + LCD lcd; +public: + void blink(); + void drawEyes(); + Face(LCD lcd); +}; diff --git a/sketch/Face.ino b/sketch/Face.ino new file mode 100644 index 0000000..688d348 --- /dev/null +++ b/sketch/Face.ino @@ -0,0 +1,25 @@ +#include "Face.h" + +Face::Face(LCD _lcd) : x(3), lcd(_lcd) {} + +void Face::blink() { + lcd.clear(); + lcd.drawBlink(x, 0); + lcd.drawBlink(x+1, 0); + lcd.drawRectangle(x+7, 0); + lcd.drawRectangle(x+8, 0); + lcd.drawRectangle(x+7, 1); + lcd.drawRectangle(x+8, 1); +} + +void Face::drawEyes() { + lcd.clear(); + lcd.drawRectangle(x, 0); + lcd.drawRectangle(x+1, 0); + lcd.drawRectangle(x+7, 0); + lcd.drawRectangle(x+8, 0); + lcd.drawRectangle(x, 1); + lcd.drawRectangle(x+1, 1); + lcd.drawRectangle(x+7, 1); + lcd.drawRectangle(x+8, 1); +} diff --git a/sketch/LCD.h b/sketch/LCD.h new file mode 100644 index 0000000..056ad53 --- /dev/null +++ b/sketch/LCD.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include +#include + +class LCD { +private: + hd44780_I2Cexp *lcd; +public: + LCD(hd44780_I2Cexp *lcd); + + void drawChar(int x, int y, char c); + void drawRectangle(int x, int y); + void drawBlink(int x, int y); + void clear(); +}; diff --git a/sketch/LCD.ino b/sketch/LCD.ino new file mode 100644 index 0000000..2debe24 --- /dev/null +++ b/sketch/LCD.ino @@ -0,0 +1,17 @@ +#include "LCD.h" + +LCD::LCD(hd44780_I2Cexp *_lcd) : lcd(_lcd) {} + +void LCD::drawChar(int x, int y, char c) { + lcd->setCursor(x,y); + int w = lcd->write(byte(c)); +} + +void LCD::drawRectangle(int x, int y) { + drawChar(x, y, 0); +} +void LCD::drawBlink(int x, int y) { + drawChar(x, y, 1); +} + +void LCD::clear() {lcd->clear();} diff --git a/sketch/sketch.ino b/sketch/sketch.ino index b755836..273a94c 100644 --- a/sketch/sketch.ino +++ b/sketch/sketch.ino @@ -1,9 +1,8 @@ - -#include -#include -#include +#include "Face.h" hd44780_I2Cexp lcd; // auto-detects the I2C address +LCD _lcd(&lcd); +Face face(_lcd); byte rectangle[8] = { 0xff, @@ -26,45 +25,6 @@ byte blink[8] = { 0b11111, }; -#define RECTANGLE 0 -#define BLINK 1 - -#define draw_rectangle(x, y) draw_char(x, y, RECTANGLE); -#define draw_blink(x, y) draw_char(x, y, BLINK); - -void draw_char(int x, int y, char c) { - lcd.setCursor(x,y); - lcd.write(byte(c)); -} - -void draw_eyes(int x) { - draw_rectangle(x, 0); - draw_rectangle(x+1, 0); - draw_rectangle(x+7, 0); - draw_rectangle(x+8, 0); - //draw_char(x, 1, '\n'); - //draw_char(x+1, 1, '\n'); - //draw_char(x+7, 1, '\n'); - //draw_char(x+8, 1, '\n'); - draw_rectangle(x, 1); - draw_rectangle(x+1, 1); - draw_rectangle(x+7, 1); - draw_rectangle(x+8, 1); -} - -void do_blink(int x) { - draw_blink(x, 0); - draw_blink(x+1, 0); - draw_rectangle(x+7, 0); - draw_rectangle(x+8, 0); - draw_rectangle(x+7, 1); - draw_rectangle(x+8, 1); - //draw_char(x, 1, '\n'); - //draw_char(x+1, 1, '\n'); - //draw_char(x+7, 1, '\n'); - //draw_char(x+8, 1, '\n'); -} - void setup() { lcd.begin(16, 2); lcd.createChar(0, rectangle); @@ -73,29 +33,17 @@ void setup() { } void loop() { - draw_eyes(3); + face.drawEyes(); delay(1200); - lcd.clear(); - do_blink(3); + face.blink(); delay(300); - lcd.clear(); - draw_eyes(3); + face.drawEyes(); delay(1200); - lcd.clear(); - - // look to the sides - draw_eyes(1); - delay(800); - lcd.clear(); - draw_eyes(5); - delay(800); - lcd.clear(); Serial.print("[CMD]"); Serial.println("[firefox --new-window 'https://www.terre-plate.org/terre-plate-preuve-ultime/']"); - Serial.print("[CMD]"); Serial.println("[pwd]"); }