summaryrefslogtreecommitdiff
path: root/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback
diff options
context:
space:
mode:
authorkrolyxon <me@krolyxon.com>2026-06-08 23:10:46 +0530
committerkrolyxon <me@krolyxon.com>2026-06-08 23:10:46 +0530
commit3120783000d0025b183b0397acaa8b769499eb38 (patch)
tree1c4f93be213f1b1d48f59e554562d847b4e7c25e /.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback
Initial gh-pages firmware hosting
Diffstat (limited to '.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback')
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/.none.test.only0
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/StrandtestArduinoBLECallback.ino239
2 files changed, 239 insertions, 0 deletions
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/.none.test.only b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/.none.test.only
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/.none.test.only
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/StrandtestArduinoBLECallback.ino b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/StrandtestArduinoBLECallback.ino
new file mode 100644
index 0000000..b986943
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestArduinoBLECallback/StrandtestArduinoBLECallback.ino
@@ -0,0 +1,239 @@
+/****************************************************************************
+ * This example is based on StrandtestArduinoBLE example to make use of
+ * callbacks features of the ArduinoBLE library.
+ *
+ * https://github.com/arduino-libraries/ArduinoBLE
+ *
+ * Supported boards:
+ * Arduino MKR WiFi 1010, Arduino Uno WiFi Rev2 board, Arduino Nano 33 IoT,
+ Arduino Nano 33 BLE, or Arduino Nano 33 BLE Sense board.
+ *
+ * You can use a generic BLE central app, like LightBlue (iOS and Android) or
+ * nRF Connect (Android), to interact with the services and characteristics
+ * created in this sketch.
+ *
+ * This example code is in the public domain.
+ *
+ */
+#include <Adafruit_NeoPixel.h>
+
+#define PIN 15 // Pin where NeoPixels are connected
+
+// Declare our NeoPixel strip object:
+Adafruit_NeoPixel strip(64, PIN, NEO_GRB + NEO_KHZ800);
+// Argument 1 = Number of pixels in NeoPixel strip
+// Argument 2 = Arduino pin number (most are valid)
+// Argument 3 = Pixel type flags, add together as needed:
+// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
+// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
+// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
+// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
+// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
+
+// NEOPIXEL BEST PRACTICES for most reliable operation:
+// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.
+// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
+// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.
+// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
+// connect GROUND (-) first, then +, then data.
+// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
+// a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.
+// (Skipping these may work OK on your workbench but can fail in the field)
+
+uint8_t rgb_values[3];
+
+#include <ArduinoBLE.h>
+
+BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service
+
+// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
+BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
+
+void setup()
+{
+ Serial.begin(115200);
+ Serial.println("Hello World!");
+
+ // custom services and characteristics can be added as well
+ // begin initialization
+ if (!BLE.begin())
+ {
+ Serial.println("starting BLE failed!");
+
+ while (1)
+ ;
+ }
+
+ Serial.print("Peripheral address: ");
+ Serial.println(BLE.address());
+
+ // set advertised local name and service UUID:
+ BLE.setLocalName("LEDCallback");
+ BLE.setAdvertisedService(ledService);
+
+ // add the characteristic to the service
+ ledService.addCharacteristic(switchCharacteristic);
+
+ // add service
+ BLE.addService(ledService);
+ // assign event handlers for connected, disconnected to peripheral
+ BLE.setEventHandler(BLEConnected, blePeripheralConnectHandler);
+ BLE.setEventHandler(BLEDisconnected, blePeripheralDisconnectHandler);
+
+ // assign event handlers for characteristic
+ switchCharacteristic.setEventHandler(BLEWritten, switchCharacteristicWritten);
+ // set the initial value for the characeristic:
+ switchCharacteristic.writeValue(0);
+
+ // start advertising
+ BLE.advertise();
+
+ strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
+ strip.show(); // Turn OFF all pixels ASAP
+
+ pinMode(PIN, OUTPUT);
+ digitalWrite(PIN, LOW);
+}
+
+void loop()
+{
+ // poll for BLE events
+ BLE.poll();
+}
+
+void blePeripheralConnectHandler(BLEDevice central)
+{
+ // central connected event handler
+ Serial.print("Connected event, central: ");
+ Serial.println(central.address());
+}
+
+void blePeripheralDisconnectHandler(BLEDevice central)
+{
+ // central disconnected event handler
+ Serial.print("Disconnected event, central: ");
+ Serial.println(central.address());
+}
+
+void switchCharacteristicWritten(BLEDevice central, BLECharacteristic characteristic)
+{
+ // central wrote new value to characteristic, update LED
+ Serial.print("Characteristic event, written: ");
+
+ switch (switchCharacteristic.value())
+ {
+ case 'a':
+ colorWipe(strip.Color(255, 0, 0), 20); // Red
+ break;
+ case 'b':
+ colorWipe(strip.Color(0, 255, 0), 20); // Green
+ break;
+ case 'c':
+ colorWipe(strip.Color(0, 0, 255), 20); // Blue
+ break;
+ case 'd':
+ theaterChase(strip.Color(255, 0, 0), 20); // Red
+ break;
+ case 'e':
+ theaterChase(strip.Color(0, 255, 0), 20); // Green
+ break;
+ case 'f':
+ theaterChase(strip.Color(255, 0, 255), 20); // Cyan
+ break;
+ case 'g':
+ rainbow(10);
+ break;
+ case 'h':
+ theaterChaseRainbow(20);
+ break;
+ }
+}
+
+// Fill strip pixels one after another with a color. Strip is NOT cleared
+// first; anything there will be covered pixel by pixel. Pass in color
+// (as a single 'packed' 32-bit value, which you can get by calling
+// strip.Color(red, green, blue) as shown in the loop() function above),
+// and a delay time (in milliseconds) between pixels.
+void colorWipe(uint32_t color, int wait)
+{
+ for (int i = 0; i < strip.numPixels(); i++)
+ { // For each pixel in strip...
+ strip.setPixelColor(i, color); // Set pixel's color (in RAM)
+ strip.show(); // Update strip to match
+ delay(wait); // Pause for a moment
+ }
+}
+
+// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
+// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
+// between frames.
+void theaterChase(uint32_t color, int wait)
+{
+ for (int a = 0; a < 10; a++)
+ { // Repeat 10 times...
+ for (int b = 0; b < 3; b++)
+ { // 'b' counts from 0 to 2...
+ strip.clear(); // Set all pixels in RAM to 0 (off)
+ // 'c' counts up from 'b' to end of strip in steps of 3...
+ for (int c = b; c < strip.numPixels(); c += 3)
+ {
+ strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ }
+ }
+}
+
+// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
+void rainbow(int wait)
+{
+ // Hue of first pixel runs 5 complete loops through the color wheel.
+ // Color wheel has a range of 65536 but it's OK if we roll over, so
+ // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
+ // means we'll make 5*65536/256 = 1280 passes through this outer loop:
+ for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256)
+ {
+ for (int i = 0; i < strip.numPixels(); i++)
+ { // For each pixel in strip...
+ // Offset pixel hue by an amount to make one full revolution of the
+ // color wheel (range of 65536) along the length of the strip
+ // (strip.numPixels() steps):
+ int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
+ // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
+ // optionally add saturation and value (brightness) (each 0 to 255).
+ // Here we're using just the single-argument hue variant. The result
+ // is passed through strip.gamma32() to provide 'truer' colors
+ // before assigning to each pixel:
+ strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ }
+}
+
+// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
+void theaterChaseRainbow(int wait)
+{
+ int firstPixelHue = 0; // First pixel starts at red (hue 0)
+ for (int a = 0; a < 30; a++)
+ { // Repeat 30 times...
+ for (int b = 0; b < 3; b++)
+ { // 'b' counts from 0 to 2...
+ strip.clear(); // Set all pixels in RAM to 0 (off)
+ // 'c' counts up from 'b' to end of strip in increments of 3...
+ for (int c = b; c < strip.numPixels(); c += 3)
+ {
+ // hue of pixel 'c' is offset by an amount to make one full
+ // revolution of the color wheel (range 65536) along the length
+ // of the strip (strip.numPixels() steps):
+ int hue = firstPixelHue + c * 65536L / strip.numPixels();
+ uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
+ strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
+ }
+ }
+}