improvment: object oriented face

This commit is contained in:
DinoMalin 2025-03-05 01:39:01 +01:00
parent 4caff40708
commit 4068f02fb2
6 changed files with 94 additions and 58 deletions

17
LCD.h Normal file
View File

@ -0,0 +1,17 @@
#pragma once
#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
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();
};

12
sketch/Face.h Normal file
View File

@ -0,0 +1,12 @@
#pragma once
#include "LCD.h"
class Face {
private:
int x;
LCD lcd;
public:
void blink();
void drawEyes();
Face(LCD lcd);
};

25
sketch/Face.ino Normal file
View File

@ -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);
}

17
sketch/LCD.h Normal file
View File

@ -0,0 +1,17 @@
#pragma once
#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
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();
};

17
sketch/LCD.ino Normal file
View File

@ -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();}

View File

@ -1,9 +1,8 @@
#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
#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]");
}