add face
This commit is contained in:
parent
7a4e9df6ce
commit
5e7c6a1f9c
86
src/face.cpp
Normal file
86
src/face.cpp
Normal file
@ -0,0 +1,86 @@
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include "face.h"
|
||||
|
||||
// ===== OLED CONFIG =====
|
||||
#define SCREEN_WIDTH 128
|
||||
#define SCREEN_HEIGHT 32
|
||||
#define OLED_RESET -1
|
||||
#define OLED_ADDR 0x3C
|
||||
|
||||
#define SDA_PIN 21
|
||||
#define SCL_PIN 22
|
||||
|
||||
static Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
static FaceExpression currentFace = FACE_NEUTRAL;
|
||||
|
||||
// ===== Drawing helpers =====
|
||||
static void clearFace() {
|
||||
display.clearDisplay();
|
||||
}
|
||||
|
||||
// 🙂 Нейтральный
|
||||
static void drawNeutral() {
|
||||
clearFace();
|
||||
display.drawLine(40, 18, 88, 18, SSD1306_WHITE);
|
||||
display.display();
|
||||
}
|
||||
|
||||
// 😀 Улыбка
|
||||
static void drawHappy() {
|
||||
clearFace();
|
||||
display.drawLine(42, 16, 48, 20, SSD1306_WHITE);
|
||||
display.drawLine(48, 20, 80, 20, SSD1306_WHITE);
|
||||
display.drawLine(80, 20, 86, 16, SSD1306_WHITE);
|
||||
display.display();
|
||||
}
|
||||
|
||||
// 😮 Удивление
|
||||
static void drawSurprised() {
|
||||
clearFace();
|
||||
display.drawCircle(64, 18, 6, SSD1306_WHITE);
|
||||
display.display();
|
||||
}
|
||||
|
||||
// 😐 Скука
|
||||
static void drawBored() {
|
||||
clearFace();
|
||||
display.drawLine(40, 17, 88, 17, SSD1306_WHITE);
|
||||
display.drawLine(40, 19, 88, 19, SSD1306_WHITE);
|
||||
display.display();
|
||||
}
|
||||
|
||||
// 😠 Злой
|
||||
static void drawAngry() {
|
||||
clearFace();
|
||||
display.drawLine(40, 22, 88, 14, SSD1306_WHITE);
|
||||
display.display();
|
||||
}
|
||||
|
||||
void faceInit() {
|
||||
Wire.begin(SDA_PIN, SCL_PIN);
|
||||
|
||||
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
|
||||
while (true); // OLED не найден
|
||||
}
|
||||
|
||||
faceSet(FACE_NEUTRAL);
|
||||
}
|
||||
|
||||
void faceSet(FaceExpression f) {
|
||||
currentFace = f;
|
||||
|
||||
switch (f) {
|
||||
case FACE_NEUTRAL: drawNeutral(); break;
|
||||
case FACE_HAPPY: drawHappy(); break;
|
||||
case FACE_SURPRISED: drawSurprised(); break;
|
||||
case FACE_BORED: drawBored(); break;
|
||||
case FACE_ANGRY: drawAngry(); break;
|
||||
}
|
||||
}
|
||||
|
||||
FaceExpression faceGet() {
|
||||
return currentFace;
|
||||
}
|
||||
13
src/face.h
Normal file
13
src/face.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
enum FaceExpression {
|
||||
FACE_NEUTRAL,
|
||||
FACE_HAPPY,
|
||||
FACE_SURPRISED,
|
||||
FACE_BORED,
|
||||
FACE_ANGRY
|
||||
};
|
||||
|
||||
void faceInit();
|
||||
void faceSet(FaceExpression f);
|
||||
FaceExpression faceGet();
|
||||
@ -7,12 +7,14 @@
|
||||
#include "ws_server.h"
|
||||
#include "servo.h"
|
||||
#include "ultrasonic.h"
|
||||
#include "face.h"
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
servoInit();
|
||||
ultrasonicInit();
|
||||
faceInit();
|
||||
actuatorsInit();
|
||||
webServerInit();
|
||||
wsInit();
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "ws_server.h"
|
||||
#include "controller.h"
|
||||
#include "robot_state.h"
|
||||
#include "face.h"
|
||||
|
||||
static WebSocketsServer ws(81); // порт 81
|
||||
|
||||
@ -53,6 +54,17 @@ void wsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
|
||||
}
|
||||
}
|
||||
|
||||
else if (msg.startsWith("FACE:")) {
|
||||
String v = msg.substring(5);
|
||||
v.toUpperCase();
|
||||
|
||||
if (v == "HAPPY") faceSet(FACE_HAPPY);
|
||||
else if (v == "ANGRY") faceSet(FACE_ANGRY);
|
||||
else if (v == "BORED") faceSet(FACE_BORED);
|
||||
else if (v == "SURPRISED") faceSet(FACE_SURPRISED);
|
||||
else faceSet(FACE_NEUTRAL);
|
||||
}
|
||||
|
||||
else if (msg.startsWith("SPEED:")) {
|
||||
int v = msg.substring(6).toInt();
|
||||
controllerSetSpeed(v, v);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user