Nesso N1 Dice with button


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;
  }
}

It’s not that bad..

ported and simmed on the Q..

you know, you didn’t prime that random generator..

fun stuff.. ~q

I do not know the seed command for Nesso or even ESP32. Assuming "not analogRead(A0)"

how do you spell assume.. :slight_smile:

copied from mazes..

//initialize random..
  randomSeed(analogRead(0));

had to replace that code as it’s and Arduino function..

used the below taken from cppreference.com :slight_smile:

Dice1 = 1 + rand()/((RAND_MAX + 1u)/6);

and I added the seed to setup..

~q

R-O-L-A-I-D-S

Could it be the button was pressed less than 500ms after the previous button press (there is a delay(500))?

I got lost in the cppreference...

[edit] I get a "different" roll every start-up.

I wouldn’t lose any sleep over it..

it’s not like random got allot to pick from, 1-6..

only reason why i even noticed is the random function is not part of c, so a i get an error porting to sim and have to replace with the rand() function which of course works different..

~q

Oh...

Is there a floating analog pin (the user port or qiic port) or clock LSB register on Nesso/ESP32-C6?

i did an anologRead(0) on mine, didn’t seem to complain..

figured that was the first analog pin??

~q