Maak een dobbelsteen op een 8×8 dot-matrix display die je met een drukknop laar ‘rollen’.
Alvorens te beginnen, indien dit de eerste maal is dat je met een Arduino (compatibele) microcontroller werkt, volg de volgende instructies voor het installeren van de Arduino werk omgeving.
In dit project gebruiken we een speciaal font om de dobbelsteen nummer 1 t/m 6 op het 8×8 dot-matrix display weer te geven. We laten de dobbelsteen ‘rollen’ door een knop in te drukken en tijdens het indrukken willekeurige nummers weer te geven. Bij het loslaten van de knop blijft dan het laatste willekeurige nummer op het display staan.
Zoals alle voorbeelden die we hier presenteren maakt dit project ook gebruik van de A-Vision ESP8266 Arduino bibliotheek.
Open het
voorbeeld uit de A-Vision ESP8266 bibliotheek.dobbelsteen
Nu ben je klaar om het Dobbelsteen voorbeeld project te compileren en naar de ESP8266 D1 mini te sturen.
Voor de programmering moet de ESP8266 D1 mini module met een micro-USB kabel worden aangesloten op de computer waarop de Arduino IDE software is geïnstalleerd.
Hardware aansluiting
– voor de A-Vision ESP8266 learning board –
Het display sluiten we aan met CS
op D8
, CLK
op D5
en DIN
op D7
. We sluiten BUTTON #1
aan op D6
.
De code
In de definities geven we aan hoeveel 8×8 dot-matrix displays we hebben (aantal kolommen en aantal rijen), en tevens welk type hardware is gebruik voor het display. Voor de A-Vision ESP8266 learning board project is de Parola type hardware gebruikt.
We moeten natuurlijk ook zorgen dat de software voor het aansturen van het display beschikbaar is. Tevens worden voor al onze voorbeeld projecten de debug code geladen.
We laden ook het speciaal gemaakte font voor de dobbelsteen (dies_font.h
);
En als laatste maken we een display object aan die we later gaan gebruiken voor het besturen van het display.// Definities
#define DEBUG_ENABLED false // Output info via de seriële poort
// Aantal rijen displays (Voor de A-Vision ESP8266 learning board is dat 1)
#define DISPLAY_ROWS 1
// Aantal kolommen displays (Voor de A-Vision ESP8266 learning board is dat 1)
#define DISPLAY_COLUMNS 1
// Gebruikte display type (Voor de A-Vision ESP8266 learning board is dat MD_MAX72XX::PAROLA_HW)
#define DISPLAY_HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
// Digitale ingang voor de drukknop (Vrije keuze)
#define BUTTON1 D6
// Includes
#include <avision_debug.h>
#include <avision_display.h>
// https://pjrp.github.io/MDParolaFontEditor -- maak je eigen font
#include "dies_font.h"
// Maak display object
AVision::dotmatrixDisplay display;
Dit is de font definitie voor alle 255 karakters van (van 0x00 t/m 0xFF).
In de online Parola font editor (https://pjrp.github.io/MDParolaFontEditor) kan onderstaande worden geladen, aangepast en weer ge-exporteerd worden.
Op deze manier kun je je eigen dobbelsteen nummer aanpassen (of welke karakters dan ook). Houd daarbij wel rekening dat de eerste regel ( 'F', 1, 0, 255, 8,
) moet worden weggelaten.const uint8_t PROGMEM _font_die_numbers[] =
;
{
'F', 1, 0, 255, 8,
7, 0, 0, 0, 0, 0, 0, 0, // 0
7, 0, 0, 0, 16, 0, 0, 0, // 1
7, 0, 84, 0, 0, 0, 84, 0, // 2
7, 0, 64, 0, 16, 0, 4, 0, // 3
7, 0, 68, 0, 0, 0, 68, 0, // 4
7, 0, 68, 0, 16, 0, 68, 0, // 5
7, 0, 84, 0, 0, 0, 84, 0, // 6
7, 0, 84, 0, 16, 0, 84, 0, // 7
7, 0, 84, 0, 40, 0, 84, 0, // 8
7, 0, 84, 0, 84, 0, 84, 0, // 9
5, 255, 231, 219, 231, 255, // 10
5, 48, 72, 58, 6, 14, // 11
5, 38, 41, 121, 41, 38, // 12
5, 64, 127, 5, 5, 7, // 13
5, 64, 127, 5, 37, 63, // 14
5, 90, 60, 231, 60, 90, // 15
5, 127, 62, 28, 28, 8, // 16
5, 8, 28, 28, 62, 127, // 17
5, 20, 34, 127, 34, 20, // 18
5, 95, 95, 0, 95, 95, // 19
5, 6, 9, 127, 1, 127, // 20
5, 0, 102, 137, 149, 106, // 21
5, 96, 96, 96, 96, 96, // 22
5, 148, 162, 255, 162, 148, // 23
5, 8, 4, 126, 4, 8, // 24
5, 16, 32, 126, 32, 16, // 25
5, 8, 8, 42, 28, 8, // 26
5, 8, 28, 42, 8, 8, // 27
5, 30, 16, 16, 16, 16, // 28
5, 12, 30, 12, 30, 12, // 29
5, 48, 56, 62, 56, 48, // 30
5, 6, 14, 62, 14, 6, // 31
1, 0, // 32
3, 0, 95, 0, // 33
5, 0, 7, 0, 7, 0, // 34
5, 20, 127, 20, 127, 20, // 35
5, 36, 42, 127, 42, 18, // 36
5, 35, 19, 8, 100, 98, // 37
5, 54, 73, 86, 32, 80, // 38
5, 0, 8, 7, 3, 0, // 39
5, 0, 28, 34, 65, 0, // 40
5, 0, 65, 34, 28, 0, // 41
5, 42, 28, 127, 28, 42, // 42
5, 8, 8, 62, 8, 8, // 43
6, 0, 128, 112, 48, 0, 0, // 44
3, 8, 8, 8, // 45
4, 0, 96, 96, 0, // 46
5, 32, 16, 8, 4, 2, // 47
8, 0, 0, 0, 0, 0, 0, 0, 0, // 48 0
8, 0, 0, 0, 24, 24, 0, 0, 0, // 49 1
8, 192, 192, 0, 0, 0, 0, 3, 3, // 50 2
8, 192, 192, 0, 24, 24, 0, 3, 3, // 51 3
8, 195, 195, 0, 0, 0, 0, 195, 195, // 52 4
8, 195, 195, 0, 24, 24, 0, 195, 195, // 53 5
8, 219, 219, 0, 0, 0, 0, 219, 219, // 54 6
8, 219, 219, 0, 24, 24, 0, 219, 219, // 55 7
8, 219, 219, 0, 102, 102, 0, 219, 219, // 56 8
8, 219, 219, 0, 219, 219, 0, 219, 219, // 57 9
3, 0, 20, 0, // 58
5, 0, 128, 104, 0, 0, // 59
5, 0, 8, 20, 34, 65, // 60
5, 20, 20, 20, 20, 20, // 61
5, 0, 65, 34, 20, 8, // 62 - '>'
5, 2, 1, 89, 9, 6, // 63 - '?'
5, 62, 65, 93, 89, 78, // 64 - '@'
5, 124, 18, 17, 18, 124, // 65 - 'A'
5, 127, 73, 73, 73, 54, // 66 - 'B'
5, 62, 65, 65, 65, 34, // 67 - 'C'
5, 127, 65, 65, 65, 62, // 68 - 'D'
5, 127, 73, 73, 73, 65, // 69 - 'E'
5, 127, 9, 9, 9, 1, // 70 - 'F'
5, 62, 65, 65, 81, 115, // 71 - 'G'
5, 127, 8, 8, 8, 127, // 72 - 'H'
5, 0, 65, 127, 65, 0, // 73 - 'I'
5, 32, 64, 65, 63, 1, // 74 - 'J'
5, 127, 8, 20, 34, 65, // 75 - 'K'
5, 127, 64, 64, 64, 64, // 76 - 'L'
5, 127, 2, 28, 2, 127, // 77 - 'M'
5, 127, 4, 8, 16, 127, // 78 - 'N'
5, 62, 65, 65, 65, 62, // 79 - 'O'
5, 127, 9, 9, 9, 6, // 80 - 'P'
5, 62, 65, 81, 33, 94, // 81 - 'Q'
5, 127, 9, 25, 41, 70, // 82 - 'R'
5, 38, 73, 73, 73, 50, // 83 - 'S'
5, 3, 1, 127, 1, 3, // 84 - 'T'
5, 63, 64, 64, 64, 63, // 85 - 'U'
5, 31, 32, 64, 32, 31, // 86 - 'V'
5, 63, 64, 56, 64, 63, // 87 - 'W'
5, 99, 20, 8, 20, 99, // 88 - 'X'
5, 3, 4, 120, 4, 3, // 89 - 'Y'
5, 97, 89, 73, 77, 67, // 90 - 'Z'
5, 0, 127, 65, 65, 0, // 91 - '['
5, 2, 4, 8, 16, 32, // 92 - '\'
5, 0, 65, 65, 127, 0, // 93 - ']'
5, 4, 2, 1, 2, 4, // 94 - '^'
5, 64, 64, 64, 64, 64, // 95 - '_'
5, 0, 3, 7, 8, 0, // 96 - '`'
5, 32, 84, 84, 120, 64, // 97 - 'a'
5, 127, 40, 68, 68, 56, // 98 - 'b'
5, 56, 68, 68, 68, 40, // 99 - 'c'
5, 56, 68, 68, 40, 127, // 100 - 'd'
5, 56, 84, 84, 84, 24, // 101 - 'e'
5, 8, 126, 9, 2, 0, // 102 - 'f'
5, 24, 164, 164, 156, 120, // 103 - 'g'
5, 127, 8, 4, 4, 120, // 104 - 'h'
5, 0, 68, 125, 64, 0, // 105 - 'i'
5, 64, 128, 128, 122, 0, // 106 - 'j'
5, 0, 127, 16, 40, 68, // 107 - 'k'
5, 0, 65, 127, 64, 0, // 108 - 'l'
5, 124, 4, 120, 4, 120, // 109 - 'm'
5, 124, 8, 4, 4, 120, // 110 - 'n'
5, 56, 68, 68, 68, 56, // 111 - 'o'
5, 252, 24, 36, 36, 24, // 112 - 'p'
5, 24, 36, 36, 24, 252, // 113 - 'q'
5, 124, 8, 4, 4, 8, // 114 - 'r'
5, 72, 84, 84, 84, 36, // 115 - 's'
5, 4, 4, 63, 68, 36, // 116 - 't'
5, 60, 64, 64, 32, 124, // 117 - 'u'
5, 28, 32, 64, 32, 28, // 118 - 'v'
5, 60, 64, 48, 64, 60, // 119 - 'w'
5, 68, 40, 16, 40, 68, // 120 - 'x'
5, 76, 144, 144, 144, 124, // 121 - 'y'
5, 68, 100, 84, 76, 68, // 122 - 'z'
5, 0, 8, 54, 65, 0, // 123 - '{'
5, 0, 0, 119, 0, 0, // 124 - '|'
5, 0, 65, 54, 8, 0, // 125 - '}'
5, 2, 1, 2, 4, 2, // 126 - '~'
5, 60, 38, 35, 38, 60, // 127 - 'Hollow Up Arrow'
5, 30, 161, 161, 97, 18, // 128 - 'C sedilla'
5, 58, 64, 64, 32, 122, // 129 - 'u umlaut'
5, 56, 84, 84, 85, 89, // 130 - 'e acute'
5, 33, 85, 85, 121, 65, // 131 - 'a accent'
5, 33, 84, 84, 120, 65, // 132 - 'a umlaut'
5, 33, 85, 84, 120, 64, // 133 - 'a grave'
5, 32, 84, 85, 121, 64, // 134 - 'a acute'
5, 12, 30, 82, 114, 18, // 135 - 'c sedilla'
5, 57, 85, 85, 85, 89, // 136 - 'e accent'
5, 57, 84, 84, 84, 89, // 137 - 'e umlaut'
5, 57, 85, 84, 84, 88, // 138 - 'e grave'
5, 0, 69, 124, 65, 0, // 139 - 'i umlaut'
5, 2, 69, 125, 66, 0, // 140 - 'i hat'
5, 1, 69, 124, 64, 0, // 141 - 'i grave'
3, 32, 24, 32, // 142 - '*'
3, 16, 56, 16, // 143 - '+'
4, 64, 32, 0, 0, // 144'
3, 16, 16, 16, // 145 - '-'
1, 64, // 146 - '.'
3, 64, 56, 4, // 147 - '/'
3, 56, 68, 56, // 148 - '0'
3, 72, 124, 64, // 149 - '1'
3, 72, 100, 88, // 150 - '2'
3, 68, 84, 124, // 151 - '3'
3, 60, 32, 112, // 152 - '4'
3, 92, 84, 36, // 153 - '5'
3, 56, 84, 32, // 154 - '6'
3, 4, 116, 12, // 155 - '7'
3, 108, 84, 108, // 156 - '8'
3, 8, 84, 56, // 157 - '9'
1, 40, // 158 - ':'
2, 64, 40, // 159 - ';'
2, 16, 40, // 160 - '<'
3, 40, 40, 40, // 161 - '='
2, 40, 16, // 162 - '>'
5, 56, 64, 64, 34, 122, // 163 - 'u acute'
5, 122, 10, 10, 114, 0, // 164 - 'n accent'
5, 125, 13, 25, 49, 125, // 165 - 'N accent'
5, 38, 41, 41, 47, 40, // 166
5, 38, 41, 41, 41, 38, // 167
5, 48, 72, 77, 64, 32, // 168 - 'Inverted ?'
5, 56, 8, 8, 8, 8, // 169
5, 8, 8, 8, 8, 56, // 170
5, 47, 16, 200, 172, 186, // 171 - '1/2'
5, 47, 16, 40, 52, 250, // 172 - '1/4'
5, 0, 0, 123, 0, 0, // 173 - '| split'
5, 8, 20, 42, 20, 34, // 174 - '<<'
5, 34, 20, 42, 20, 8, // 175 - '>>'
5, 170, 0, 85, 0, 170, // 176 - '30% shading'
5, 170, 85, 170, 85, 170, // 177 - '50% shading'
5, 0, 0, 0, 0, 255, // 178 - 'Right side'
5, 16, 16, 16, 16, 255, // 179 - 'Right T'
5, 20, 20, 20, 20, 255, // 180 - 'Right T double H'
5, 16, 16, 255, 0, 255, // 181 - 'Right T double V'
5, 16, 16, 240, 16, 240, // 182 - 'Top Right double V'
5, 20, 20, 20, 20, 252, // 183 - 'Top Right double H'
5, 20, 20, 247, 0, 255, // 184 - 'Right T double all'
5, 0, 0, 255, 0, 255, // 185 - 'Right side double'
5, 20, 20, 244, 4, 252, // 186 - 'Top Right double'
5, 20, 20, 23, 16, 31, // 187 - 'Bot Right double'
5, 16, 16, 31, 16, 31, // 188 - 'Bot Right double V'
5, 20, 20, 20, 20, 31, // 189 - 'Bot Right double H'
5, 16, 16, 16, 16, 240, // 190 - 'Top Right'
5, 0, 0, 0, 31, 16, // 191 - 'Bot Left'
5, 16, 16, 16, 31, 16, // 192 - 'Bot T'
5, 16, 16, 16, 240, 16, // 193 - 'Top T'
5, 0, 0, 0, 255, 16, // 194 - 'Left T'
5, 16, 16, 16, 16, 16, // 195 - 'Top side'
5, 16, 16, 16, 255, 16, // 196 - 'Center +'
5, 0, 0, 0, 255, 20, // 197 - 'Left side double H'
5, 0, 0, 255, 0, 255, // 198 - 'Left side double'
5, 0, 0, 31, 16, 23, // 199 - 'Bot Left double V'
5, 0, 0, 252, 4, 244, // 200 - 'Top Left double V'
5, 20, 20, 23, 16, 23, // 201 - 'Bot T double'
5, 20, 20, 244, 4, 244, // 202 - 'Top T double'
5, 0, 0, 255, 0, 247, // 203 - 'Left Side double spl'
5, 20, 20, 20, 20, 20, // 204 - 'Center double'
5, 20, 20, 247, 0, 247, // 205 - 'Center + double'
5, 20, 20, 20, 23, 20, // 206 - 'Bot T double H'
5, 16, 16, 31, 16, 31, // 207 - 'Bot Right double V'
5, 20, 20, 20, 244, 20, // 208 - 'Top T double H'
5, 16, 16, 240, 16, 240, // 209 - 'Top Right double V'
5, 0, 0, 31, 16, 31, // 210 - 'Bot Left double V'
5, 0, 0, 0, 31, 20, // 211 - 'Bot Right double H'
5, 0, 0, 0, 252, 20, // 212 - 'Top Right double H'
5, 0, 0, 240, 16, 240, // 213 - 'Top Right double V'
5, 16, 16, 255, 16, 255, // 214 - 'Center + double V'
5, 20, 20, 20, 255, 20, // 215 - 'Center + double H'
5, 16, 16, 16, 16, 31, // 216 - 'Bot Right'
5, 0, 0, 0, 240, 16, // 217 - 'Top Left'
5, 255, 255, 255, 255, 255, // 218 - 'Full Block'
5, 240, 240, 240, 240, 240, // 219 - 'Half Block Bottom'
5, 255, 255, 255, 0, 0, // 220 - 'Half Block LHS'
5, 0, 0, 0, 255, 255, // 221 - 'Half Block RHS'
5, 15, 15, 15, 15, 15, // 222 - 'Half Block Top'
5, 56, 68, 68, 56, 68, // 223 - 'Alpha'
5, 124, 42, 42, 62, 20, // 224 - 'Beta'
5, 126, 2, 2, 6, 6, // 225 - 'Gamma'
5, 2, 126, 2, 126, 2, // 226 - 'Pi'
5, 99, 85, 73, 65, 99, // 227 - 'Sigma'
5, 56, 68, 68, 60, 4, // 228 - 'Theta'
5, 64, 126, 32, 30, 32, // 229 - 'mu'
5, 6, 2, 126, 2, 2, // 230 - 'Tau'
5, 153, 165, 231, 165, 153, // 231
5, 28, 42, 73, 42, 28, // 232
5, 76, 114, 1, 114, 76, // 233
5, 48, 74, 77, 77, 48, // 234
5, 48, 72, 120, 72, 48, // 235
5, 188, 98, 90, 70, 61, // 236 - 'Zero Slashed'
5, 62, 73, 73, 73, 0, // 237
5, 126, 1, 1, 1, 126, // 238
5, 42, 42, 42, 42, 42, // 239 - '3 Bar Equals'
5, 68, 68, 95, 68, 68, // 240 - '+/-'
5, 64, 81, 74, 68, 64, // 241 - '>='
5, 64, 68, 74, 81, 64, // 242 - '<='
5, 0, 0, 255, 1, 3, // 243 - 'Top of Integral'
5, 0, 224, 128, 255, 0, // 244 - 'Bot of Integral'
5, 8, 8, 107, 107, 8, // 245 - 'Divide'
5, 54, 18, 54, 36, 54, // 246 - 'Wavy ='
5, 6, 15, 9, 15, 6, // 247 - 'Degree'
5, 0, 0, 24, 24, 0, // 248 - 'Math Product'
5, 0, 0, 16, 16, 0, // 249 - 'Short Dash'
5, 48, 64, 255, 1, 1, // 250 - 'Square Root'
5, 0, 31, 1, 1, 30, // 251 - 'Superscript n'
5, 0, 25, 29, 23, 18, // 252 - 'Superscript 2'
5, 0, 60, 60, 60, 60, // 253 - 'Centered Square'
5, 255, 129, 129, 129, 255, // 254 - 'Full Frame'
0, // 255
}
Nu de definities gedaan zijn kunnen we in de standaard setup()
functie van de Arduino IDE het geheel initialiseren.
Hier wordt allereerst de drukknop ingang geïnitialiseerd.
Tevens wordt het eigen gemaakte font geladen via display.setFont(_font_die_numbers);
zodat we de juiste dobbelsteen nummers gebruiken.
Vervolgens als een test laten wel alle dobbelsteen nummers van 1 t/m 6 (via een for
-lus) eens op het display verschijnen waarna het display weer wordt leeg gemaakt.void setup()
{
// https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
pinMode(BUTTON1, INPUT_PULLUP);
initDebug(DEBUG_ENABLED);
display.init(DISPLAY_ROWS, DISPLAY_COLUMNS);
display.setFont(_font_die_numbers);
display.text = "";
for (size_t i = 0; i < 6; i++)
{
display.text = String(i+1);
display.loop();
delay(250);
}
delay(500);
display.text = "0";
display.loop();}
Nu de initialisatie is gedaan kunnen we beginnen met het uitvoeren van het hoofdprogramma met standaard loop()
functie om het alfabet op het display te projecteren.
Door gebruik van de A-Vision Arduino includes is dit erg eenvoudig geworden.
Met display.text
wordt aangegeven welk nummer je wenst te tonen op het display, en daarna met de functie display.loop()
wordt deze ook daadwerkelijk op het display weergegeven.
Er wordt eerst gecontroleerd of de drukknop is ingedrukt (dit geeft een waarde LOW
terug).
Zolang dit wordt gedetecteerd wordt een willekeurig nummer gegenereerd van 1 tot 7 (dus exclusief de 7) en op het display weergegeven.void loop()
{
// https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/
if (digitalRead(BUTTON1) == LOW) {
// https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
display.text = String(random(1,7));
display.loop();
}}
/*******************************************************************************
*
* (c) 2021 Copyright A-Vision Software
*
* File description : Arduino dot-matrix dies
*
* Created by : Arnold Velzel
* Created on : 08-10-2021
*
*******************************************************************************/
// Definities
#define DEBUG_ENABLED false // Output info via de seriële poort
// Aantal rijen displays (Voor de A-Vision ESP8266 learning board is dat 1)
#define DISPLAY_ROWS 1
// Aantal kolommen displays (Voor de A-Vision ESP8266 learning board is dat 1)
#define DISPLAY_COLUMNS 1
// Gebruikte display type (Voor de A-Vision ESP8266 learning board is dat MD_MAX72XX::PAROLA_HW)
#define DISPLAY_HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
// Digitale ingang voor de drukknop (Vrije keuze)
#define BUTTON1 D6
// Includes
#include <avision_debug.h>
#include <avision_display.h>
// https://pjrp.github.io/MDParolaFontEditor -- maak je eigen font
#include "dies_font.h"
// Maak display object
AVision::dotmatrixDisplay display;
void setup()
{
// https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
pinMode(BUTTON1, INPUT_PULLUP);
initDebug(DEBUG_ENABLED);
display.init(DISPLAY_ROWS, DISPLAY_COLUMNS);
display.setFont(_font_die_numbers);
display.text = "";
for (size_t i = 0; i < 6; i++)
{
display.text = String(i+1);
display.loop();
delay(250);
}
delay(500);
display.text = "0";
display.loop();
}
void loop()
{
// https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/
if (digitalRead(BUTTON1) == LOW) {
// https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
display.text = String(random(1,7));
display.loop();
}
}
MD_MAX72XX bibliotheek voor de 8×8 dot-matrix display.
https://github.com/MajicDesigns/MD_MAX72XX
Parola 8×8 dot-matrix display hardware
https://arduinoplusplus.wordpress.com/2017/04/14/parola-a-to-z-adapting-for-different-hardware/
Arduino PIN definities en gebruik
https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
Arduino willekeurige nummers maken
https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
Maak je eigen MAX7219 Parola font
https://pjrp.github.io/MDParolaFontEditor
Breidt dit voorbeeld project uit zodat de ‘dobbelsteen’ nog even (5 seconden) blijft ‘doorrollen’ en langzaam tot stilstand komt.
Voor oplossing zie voorbeeld dobbelsteen-uitbreiding
.