Last active
October 6, 2020 08:10
-
-
Save andi34/ffca2b2017946d672d4301d94a89d8a2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// beMyValentine Codebeispiel für den AZ-Delivery Blogbeitrag Valentinstag 2020 | |
// https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/valentinstag-projekt-2020 | |
// V1.0 von AZcp 14.02.2020 - GNU Lesser General Public License v2.1 | |
// Verwendet die Bibliothek MD_MAX72XX von Marco Colli / MajicDesigns : https://github.com/MajicDesigns/MD_MAX72XX | |
// Teile dieses Codes basieren auf den Beispielen der MD_MAX72XX Bibliothek | |
#include <MD_MAX72xx.h> | |
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // falls die Darstellung fehlerhaft ist, ersetze FC16_HW durch PAROLA_HW oder GENERIC_HW | |
#define MAX_DEVICES 4 // Anzahl der 8x8 Module, in unserem Fall 4 | |
// Pindefination für ESP Amica Node | |
#define CLK_PIN D5 | |
#define DATA_PIN D6 | |
#define CS_PIN D8 | |
#define BUTTON_PIN D2 // Hier wird der Button angeschlossen | |
// Pindefination für ESP8266 | |
//#define CLK_PIN 14 //D5 GPIO14 | |
//#define DATA_PIN 12 //D6 GPIO12 | |
//#define CS_PIN 15 //D8 GPIO15 | |
//#define BUTTON_PIN 4 // Hier wird der Button angeschlossen D2 GPIO04 | |
// Pindefination für ESP32 | |
//#define CLK_PIN 18 //D5 GPIO18 | |
//#define DATA_PIN 23 //D6 GPIO13 | |
//#define CS_PIN 5 //D8 GPIO05 | |
//#define BUTTON_PIN 4 // Hier wird der Button angeschlossen GPIO04 | |
// Pindefination für Arduino | |
//#define CLK_PIN 13 | |
//#define DATA_PIN 11 | |
//#define CS_PIN 10 | |
//#define BUTTON_PIN 8 // Hier wird der Button angeschlossen | |
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); | |
bool last = false; // Diese Variable merk sich ob der Taster gedrückt wurde | |
#define ARRAYSIZE 13 // Anzahl der Sätze | |
// Damit der Text nach der Anzeige komplett von der Anzeige verschwindet, | |
// empfiehlt es sich, nach dem Satz 10 Leerzeichen anzuhängen. | |
char* results[ARRAYSIZE] = { | |
"Ja! ", | |
"nein. ", | |
"Das wuerde mich freuen. ", | |
"Von mir aus. . . ", | |
"Hoechstwahrscheinlich. ", | |
"Ja, klingt gut! ", | |
"Mach was DU willst. . . ", | |
"Ist deine Entscheidung. . . ", | |
"Gerne, Schatz! ", | |
"Ja, gefaellt mir ganz gut. . . ", | |
"Das ist eine gute Idee! ", | |
"Vielleicht?! ", | |
"*Seufz* " | |
}; | |
//Wurde der Taster gedrückt? | |
bool button() { | |
bool current = digitalRead(BUTTON_PIN); | |
if (current != last) { | |
last = current; | |
if (last) { | |
return true; | |
} | |
} | |
return false; | |
} | |
// Text wird gesrollt | |
void scrollText(const char *p) | |
{ | |
uint8_t charWidth; | |
uint8_t cBuf[8]; // this should be ok for all built-in fonts | |
mx.clear(); | |
while (*p != '\0') | |
{ | |
charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); | |
for (uint8_t i = 0; i <= charWidth; i++) // allow space between characters | |
{ | |
mx.transform(MD_MAX72XX::TSL); | |
if (i < charWidth) | |
mx.setColumn(0, cBuf[i]); | |
delay(50); | |
} | |
} | |
} | |
// Herz wird dargestellt | |
void hearts() | |
{ | |
mx.clear(); | |
mx.setRow(0, 0, 0b00000000); | |
mx.setRow(0, 1, 0b01100000); | |
mx.setRow(0, 2, 0b11110000); | |
mx.setRow(0, 3, 0b11110000); | |
mx.setRow(0, 4, 0b11101010); | |
mx.setRow(0, 5, 0b11011111); | |
mx.setRow(0, 6, 0b10001110); | |
mx.setRow(0, 7, 0b00000100); | |
mx.setRow(1, 0, 0b00000000); | |
mx.setRow(1, 1, 0b00000110); | |
mx.setRow(1, 2, 0b00001111); | |
mx.setRow(1, 3, 0b00001111); | |
mx.setRow(1, 4, 0b01010111); | |
mx.setRow(1, 5, 0b11111011); | |
mx.setRow(1, 6, 0b01110001); | |
mx.setRow(1, 7, 0b00100000); | |
mx.setRow(2, 0, 0b00000000); | |
mx.setRow(2, 1, 0b01100000); | |
mx.setRow(2, 2, 0b11110000); | |
mx.setRow(2, 3, 0b11110000); | |
mx.setRow(2, 4, 0b11101010); | |
mx.setRow(2, 5, 0b11011111); | |
mx.setRow(2, 6, 0b10001110); | |
mx.setRow(2, 7, 0b00000100); | |
mx.setRow(3, 0, 0b00000000); | |
mx.setRow(3, 1, 0b00000110); | |
mx.setRow(3, 2, 0b00001111); | |
mx.setRow(3, 3, 0b00001111); | |
mx.setRow(3, 4, 0b01010111); | |
mx.setRow(3, 5, 0b11111011); | |
mx.setRow(3, 6, 0b01110001); | |
mx.setRow(3, 7, 0b00100000); | |
} | |
// Die Helligkeit wird regegelt - Puls effekt | |
void intensity() | |
{ | |
mx.clear(); | |
// Grow and get brighter | |
for (int8_t i = 1; i <= MAX_INTENSITY; i++) | |
{ | |
mx.control(MD_MAX72XX::INTENSITY, i); | |
hearts(); | |
delay(10); | |
} | |
for (int8_t i = MAX_INTENSITY; i >= 1; i--) | |
{ | |
mx.control(MD_MAX72XX::INTENSITY, i); | |
hearts(); | |
delay(10); | |
} | |
mx.control(MD_MAX72XX::INTENSITY, 1); | |
} | |
void setup() | |
{ | |
pinMode(BUTTON_PIN, INPUT_PULLUP); | |
mx.begin(); | |
} | |
void loop() | |
{ | |
if (button()) // wenn Taster gedrückt wurde | |
{ | |
delay(200); | |
intensity(); | |
delay(100); | |
intensity(); | |
delay(500); | |
mx.control(MD_MAX72XX::INTENSITY, MAX_INTENSITY); | |
scrollText(results[random(ARRAYSIZE)]); | |
delay(500); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment