#include <SPI.h>
#include <Adafruit_NeoPixel.h>
#define Neon 10
#define NUMPIXELS 16
#define CS 8
boolean badgeDetected = false;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, Neon, NEO_GRB + NEO_KHZ800);
int delayval = 100;
void setup() {
Serial.begin(115200);
SPI.begin();
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
pixels.begin();
xTaskCreate(CheckBadge, "CheckBadge", 2048, NULL, 1, NULL);
xTaskCreate(NeoDriver, "NeoDriver", 2048, NULL, 1, NULL);
}
void loop() {
}
void CheckBadge(void *pvParameters) {
while (true) {
digitalWrite(CS, LOW);
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
byte b = SPI.transfer(0);
SPI.endTransaction();
digitalWrite(CS, HIGH);
if (b != 0) {
Serial.printf("Received: %c (%d)\n", b, b);
badgeDetected = true;
} else {
badgeDetected = false;
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
void NeoDriver(void *pvParameters) {
while (true) {
if (badgeDetected){
ScanDetected();
} else {
xTaskCreate(Animation, "Animation", 2048, NULL, 1, NULL);
}
vTaskDelay(1 / portTICK_PERIOD_MS);
}
}
void Animation(void *pvParameters)
{
pixels.clear();
pixels.show();
for (int i = NUMPIXELS - 1; i >= 0; i--) {
pixels.setPixelColor(i, Adafruit_NeoPixel::Color(255, 0, 0));
pixels.show();
delay(100);
pixels.setPixelColor(i, 0);
pixels.show();
}
}
void ScanDetected()
{
for (int i = NUMPIXELS - 1; i >= 0; i--) {
pixels.setPixelColor(i, Adafruit_NeoPixel::Color(0, 255, 0));
pixels.show();
}
}
Loading
aitewinrobot-esp32c3-supermini
aitewinrobot-esp32c3-supermini