Any advice on how to NOT take crappy pics of an illuminated screen? Tnx.
// dice - press a button, get two random dice
#include <Arduino_Nesso_N1.h> // all graphics https://github.com/m5stack/M5GFX/blob/master/src/lgfx/v1/LGFXBase.hpp
NessoDisplay display;
int dice1 = 0;
int dice2 = 0;
int startFaceX[] = { 10, 130 }, startFaceY[] = { 30, 30 };
int faceWidth = 100, faceHeight = 100, corner = 10;
void setup() {
pinMode(KEY1, INPUT_PULLUP);
display.begin();
display.fillScreen(TFT_DARKGREEN);
display.setRotation(3); // KEY1 left
drawDiceFaces();
rollDice();
displayResults();
pressKey1ToRoll();
}
void loop() {
if (digitalRead(KEY1) == LOW) {
rollDice();
displayResults();
delay(1000);
}
}
void pressKey1ToRoll() {
display.setTextSize(2);
display.setTextColor(TFT_LIGHTGRAY);
display.setCursor(15, 5);
display.print("Press");
display.setTextColor(TFT_GREENYELLOW);
display.print(" KEY1 ");
display.setTextSize(2);
display.setTextColor(TFT_LIGHTGRAY);
display.print("to Roll");
}
void drawDiceFaces() { // dice blanks
display.fillRoundRect(startFaceX[0], startFaceY[0], faceWidth, faceHeight, corner, 0xE71C);
display.fillRoundRect(startFaceX[1], startFaceY[1], faceWidth, faceHeight, corner, 0xE71C);
display.drawRoundRect(startFaceX[0], startFaceY[0], faceWidth, faceHeight, corner, 0x7BEF);
display.drawRoundRect(startFaceX[1], startFaceY[1], faceWidth, faceHeight, corner, 0x7BEF);
}
void rollDice() {
dice1 = random(1, 7); // from 1 to 6, inclusive
dice2 = random(1, 7);
}
void displayResults() {
drawDiceFaces();
displayPips(dice1, 0);
displayPips(dice2, 1);
}
void displayPips(int diceRoll, int die) {
// rgb656 color https://rgbcolorpicker.com/565
// enumerations https://github.com/m5stack/M5GFX/blob/master/src/lgfx/v1/misc/enum.hpp
switch (diceRoll) {
case 1:
display.fillCircle(startFaceX[die] + 50, startFaceY[die] + 50, corner, TFT_BLACK);
break;
case 2:
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 80, corner, TFT_RED);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 20, corner, TFT_RED);
break;
case 3:
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 80, corner, TFT_BROWN);
display.fillCircle(startFaceX[die] + 50, startFaceY[die] + 50, corner, TFT_BROWN);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 20, corner, TFT_BROWN);
break;
case 4:
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 20, corner, TFT_DARKGREEN);
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 80, corner, TFT_DARKGREEN);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 20, corner, TFT_DARKGREEN);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 80, corner, TFT_DARKGREEN);
break;
case 5:
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 20, corner, TFT_BLUE);
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 80, corner, TFT_BLUE);
display.fillCircle(startFaceX[die] + 50, startFaceY[die] + 50, corner, TFT_BLUE);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 20, corner, TFT_BLUE);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 80, corner, TFT_BLUE);
break;
case 6:
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 20, corner, TFT_VIOLET);
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 50, corner, TFT_VIOLET);
display.fillCircle(startFaceX[die] + 20, startFaceY[die] + 80, corner, TFT_VIOLET);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 20, corner, TFT_VIOLET);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 50, corner, TFT_VIOLET);
display.fillCircle(startFaceX[die] + 80, startFaceY[die] + 80, corner, TFT_VIOLET);
break;
}
}


