#include <Adafruit_NeoPixel.h>
#define PIN 4
#define NUMPIXELS 7 * 6
#define BRIGHTNESS 255 // Reduce brightness if you have issues with PSU
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#include "OPTIGATrustM.h"
#define RND_LENGTH 8
bool displayNumber(uint8_t number, uint32_t color);
bool valid_number = true;
// Define colours
uint32_t colors[] = {
pixels.Color(200, 200, 200), // Engineering
pixels.Color(0, 255, 255), // Ocean
pixels.Color(0, 255, 0), // Lawn
pixels.Color(255, 0, 200), // Berry
pixels.Color(255, 110, 0), // Sun
pixels.Color(255, 255, 0) // Sand
};
void setup() {
/* Prepare status LED on XMC 2Go */
pinMode(LED1, OUTPUT);
digitalWrite(LED1, LOW);
/* Initialise an OPTIGA™ Trust X Board */
uint8_t ret = trustM.begin();
while (ret) {
delay(5);
ret = trustM.begin();
}
/* Speedup the board (from 6 mA to 15 mA) */
trustM.setCurrentLimit(8);
/* Initialise the Display LEDs */
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pixels.setBrightness(BRIGHTNESS);
pixels.clear(); // Set all pixel colors to 'off'
}
void loop() {
/* Toggle status LED to show number generation is ongoing */
digitalWrite(LED1, HIGH);
uint32_t ret = 0;
uint8_t cntr = 10;
uint8_t *rnd = new uint8_t[RND_LENGTH];
uint32_t ts = 0;
/* Initialise Memmory Area */
memset(rnd, 0, RND_LENGTH);
/*Generate Random value */
ret = trustM.getRandom(8, rnd);
uint8_t rnum = rnd[0] / 34;
// Roll the dice
if (valid_number) {
uint32_t delay_ms = 50;
for (uint8_t n = 0; n < 3; n++) {
for (uint8_t i = 0; i < 6; i++) {
/* Display each number in different color */
displayNumber(i + 1, colors[i]);
delay(delay_ms);
delay_ms += 6;
}
}
}
/* Display number if between 1-6, else return false */
valid_number = displayNumber(rnum, colors[rnum - 1]);
/* Remove dynamically allocated data */
delete rnd;
if (valid_number) {
digitalWrite(LED1, LOW); // Run was successfull, turn of status LED.
while (1) delay(1000);
} //don't run again in case a number is displayed
}
bool displayNumber(uint8_t number, uint32_t color) {
switch (number) {
case 1:
pixels.clear();
for (int i = 0; i < 6; i++) {
pixels.setPixelColor(3 + i * 7, color);
}
pixels.show();
break;
case 2:
pixels.clear();
for (int i = 0; i < 6; i++) {
if (i == 1) {
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
} else if (i == 2) {
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
} else {
pixels.setPixelColor(2 + i * 7, color);
pixels.setPixelColor(4 + i * 7, color);
}
}
pixels.show();
break;
case 3:
pixels.clear();
for (int i = 0; i < 6; i++) {
if (i == 1) {
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
} else if (i == 2) {
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
} else {
pixels.setPixelColor(2 + i * 7, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7, color);
}
}
pixels.show();
break;
case 4:
pixels.clear();
for (int i = 0; i < 6; i++) {
if (i == 1) {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
pixels.setPixelColor(6 + i * 7, color);
} else if (i == 2) {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
pixels.setPixelColor(6 + i * 7, color);
} else {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7, color);
pixels.setPixelColor(4 + i * 7, color);
pixels.setPixelColor(6 + i * 7, color);
}
}
pixels.show();
break;
case 5:
pixels.clear();
for (int i = 0; i < 6; i++) {
if (i == 1) {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
pixels.setPixelColor(6 + i * 7, color);
} else if (i == 2) {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7 - 1, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7 + 1, color);
pixels.setPixelColor(6 + i * 7, color);
} else {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(2 + i * 7, color);
pixels.setPixelColor(3 + i * 7, color);
pixels.setPixelColor(4 + i * 7, color);
pixels.setPixelColor(6 + i * 7, color);
}
}
pixels.show();
break;
case 6:
pixels.clear();
for (int i = 0; i < 6; i++) {
pixels.setPixelColor(0 + i * 7, color);
pixels.setPixelColor(1 + i * 7, color);
pixels.setPixelColor(2 + i * 7, color);
pixels.setPixelColor(4 + i * 7, color);
pixels.setPixelColor(5 + i * 7, color);
pixels.setPixelColor(6 + i * 7, color);
}
pixels.show();
break;
default:
/* No valid number entered. Return fail, try again */
return false;
break;
}
/* Valid number entered and displayed */
return true;
}
Comments
Please log in or sign up to comment.