Skip to content

Instantly share code, notes, and snippets.

@andi34
Last active October 6, 2020 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andi34/ffca2b2017946d672d4301d94a89d8a2 to your computer and use it in GitHub Desktop.
Save andi34/ffca2b2017946d672d4301d94a89d8a2 to your computer and use it in GitHub Desktop.
// 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