From e6bde50bf6407bd24af3ea56637acf1c04d2737c Mon Sep 17 00:00:00 2001 From: Benjamin Koch <bbbsnowball@gmail.com> Date: Sat, 6 May 2023 03:53:01 +0200 Subject: [PATCH] test WS2812 --- firmware/test1/heizung-test1/platformio.ini | 1 + firmware/test1/heizung-test1/src/main.cpp | 76 +++++++++++++++++++-- 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/firmware/test1/heizung-test1/platformio.ini b/firmware/test1/heizung-test1/platformio.ini index 9c6f98e..b630091 100644 --- a/firmware/test1/heizung-test1/platformio.ini +++ b/firmware/test1/heizung-test1/platformio.ini @@ -17,3 +17,4 @@ lib_deps = adafruit/Adafruit SSD1306@^2.5.7 sparkfun/SparkFun TMP102 Breakout@^1.1.2 adafruit/Adafruit MPR121@^1.1.1 + adafruit/Adafruit NeoPixel@^1.11.0 diff --git a/firmware/test1/heizung-test1/src/main.cpp b/firmware/test1/heizung-test1/src/main.cpp index 126e7a9..f4ccf30 100644 --- a/firmware/test1/heizung-test1/src/main.cpp +++ b/firmware/test1/heizung-test1/src/main.cpp @@ -4,11 +4,13 @@ #include <Adafruit_SSD1306.h> #include <SparkFunTMP102.h> #include <Adafruit_MPR121.h> +#include <Adafruit_NeoPixel.h> enum Pinout { DRIVE1 = 0, DRIVE2 = 1, LED_W = 2, + WS2812_DISPLAY = 2, LED_Y = 3, EN_MEASURE_CURRENT = 3, LED_B = 4, @@ -50,12 +52,15 @@ TMP102 sensor0, sensor1; Adafruit_MPR121 cap0, cap1; bool capAvailable[2]; +Adafruit_NeoPixel pixelsDisplay(60, WS2812_DISPLAY, NEO_GRB + NEO_KHZ800); +Adafruit_NeoPixel pixelsDigout1(2, DIGOUT1, NEO_GRB + NEO_KHZ800); + void setup() { rp2040.enableDoubleResetBootloader(); pinMode(DRIVE1, OUTPUT); digitalWrite(DRIVE1, LOW); pinMode(DRIVE2, OUTPUT); digitalWrite(DRIVE2, LOW); - pinMode(2, OUTPUT); + pinMode(WS2812_DISPLAY, OUTPUT); pinMode(3, OUTPUT); digitalWrite(EN_MEASURE_CURRENT, LOW); pinMode(4, OUTPUT); pinMode(5, OUTPUT); @@ -123,8 +128,15 @@ void setup() { // enable X electrodes and start MPR121 // enable virtual proximity electrode, as well cap.writeRegister(MPR121_ECR, 0x8c | 0x30); - } + + pixelsDisplay.begin(); + pixelsDisplay.clear(); + pixelsDisplay.show(); + + pixelsDigout1.begin(); + pixelsDigout1.clear(); + pixelsDigout1.show(); } void i2c_scan() { @@ -177,9 +189,9 @@ void loop() { led_state++; if (led_state == 8) led_state = 2; - if (led_state > 2 && led_state-1 != EN_MEASURE_CURRENT) + if (led_state > 2 && led_state-1 != EN_MEASURE_CURRENT && led_state-1 != WS2812_DISPLAY) digitalWrite(led_state-1, 0); - if (led_state <= 6 && led_state != EN_MEASURE_CURRENT) + if (led_state <= 6 && led_state != EN_MEASURE_CURRENT && led_state != WS2812_DISPLAY) digitalWrite(led_state, 1); } @@ -246,7 +258,7 @@ void loop() { int displayModePrev = displayMode; static bool prevButton4 = 0; if (!prevButton4 && buttons[3]) { - displayMode = (displayMode + 1) % 6; + displayMode = (displayMode + 1) % 7; } prevButton4 = buttons[3]; @@ -261,7 +273,9 @@ void loop() { display.setTextColor(SSD1306_WHITE); display.setCursor(0, 1); display.print(F("ADDR: ")); - display.println(!digitalRead(BOOT2) ? 'X' : '_'); + display.print(!digitalRead(BOOT2) ? 'X' : '_'); + display.print(" "); + display.println(digitalRead(WS2811) ? "WS^" : "ws "); display.print(F("SW: ")); for (auto pressed : buttons) @@ -424,6 +438,56 @@ void loop() { display.println(v5); display.display(); + } else if (displayMode == 6) { + if (displayModePrev != 6) { + display.fillRect(0, 0, 128, 64, SSD1306_BLACK); + display.drawBitmap(0, 0, logo_data, logo_width, logo_height, SSD1306_WHITE); + display.display(); + } + } + + static int digout1_timer = 0; + static int digout1_state = 2; + if (digout1_timer < 300 || !pixelsDigout1.canShow()) + digout1_timer++; + else { + digout1_timer = 0; + digout1_state++; + + for (int i=0; i<pixelsDigout1.numPixels(); i++) { + switch ((digout1_state-3*i)%8) { + case 0: + pixelsDigout1.setPixelColor(i, pixelsDigout1.Color(255, 0, 0)); + break; + case 1: + pixelsDigout1.setPixelColor(i, pixelsDigout1.Color(0, 255, 0)); + break; + case 2: + pixelsDigout1.setPixelColor(i, pixelsDigout1.Color(0, 0, 255)); + break; + default: + pixelsDigout1.setPixelColor(i, pixelsDigout1.Color(0, 0, 0)); + break; + } + } + pixelsDigout1.show(); + } + + static int ledring_timer = 0; + static int ledring_state = 0; + if ((ledring_timer < 10 || !pixelsDisplay.canShow()) && 0) { + ledring_timer++; + } else { + ledring_timer = 0; + ledring_state += 1; + + for (int i=0; i<pixelsDisplay.numPixels(); i++) { + int h = ((ledring_state + 4*i)%(256*4)) * (256/4); + int y = ((uint32_t)(i-ledring_state/3))%64 - (int32_t)32; + int v = y >= -10 && y <=10 ? 50 : y >= -20 && y < -10 ? (y+20)*5 : y <= 20 && y > 10 ? (20-y)*5 : 0; + pixelsDisplay.setPixelColor(i, pixelsDisplay.ColorHSV(h, 255, y <= 1 && y >= -1 && 0 ? 255 : v/16)); + } + pixelsDisplay.show(); } delay(1); -- GitLab