#include <WiFi.h>
#include <esp_now.h>
#include <esp_wifi.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "Font7Seg.h"
#define MAX_DEVICES 4
#define CLK_PIN 2
#define DATA_PIN 0
#define CS_PIN 1
MD_MAX72XX mx = MD_MAX72XX(MD_MAX72XX::FC16_HW, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
struct ScoreData {
int home;
int away;
};
ScoreData scores = {0, 0};
// Empfangs-Callback
void onDataRecv(const esp_now_recv_info_t *info, const uint8_t *data, int len) {
if (len == sizeof(ScoreData)) {
memcpy(&scores, data, sizeof(scores));
Serial.printf("Empfangen -> Heim: %d, Auswärts: %d\n", scores.home, scores.away);
showScore();
} else {
Serial.println("Ungültige Daten empfangen.");
}
}
void drawDigit(int digit, int startCol) {
int index = digit;
for (int j = 0; j < 7; j++) {
uint8_t colData = pgm_read_byte(&font7seg[index * 8 + j]);
mx.setColumn(startCol + j, colData);
}
}
void drawColon(int col) {
mx.setColumn(col, 0b00100100); // mittiger Doppelpunkt
}
void showScore() {
mx.clear();
int z4 = scores.home / 10;
int z3 = scores.home % 10;
int z2 = scores.away / 10;
int z1 = scores.away % 10;
drawDigit(z1, 0); // Spalten 0–6
drawDigit(z2, 8); // Spalten 8–14
drawDigit(z3, 16); // Spalten 16–22
drawDigit(z4, 24); // Spalten 24–30
mx.setPoint(3, 23, true); // Doppelpunkt Pixel oben
mx.setPoint(6, 23, true); // Doppelpunkt Pixel unten
mx.update();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE); // Kanal für ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("ESP-NOW Initialisierung fehlgeschlagen!");
return;
}
esp_now_register_recv_cb(onDataRecv);
mx.begin();
mx.setFont(font7seg);
mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
mx.clear();
mx.update();
Serial.println("Empfänger bereit.");
}
void loop() {
// Kein aktiver Code nötig – alles läuft über Callback
}