From 185cad9fad94ce47fc5e7cebe5e39711c3e169bf Mon Sep 17 00:00:00 2001 From: foamyguy Date: Tue, 20 May 2025 16:39:09 -0500 Subject: [PATCH] sparkle motion stick arduino i2s mic example --- .../.feather_esp32_v2.test.only | 0 .../Arduino_I2S_SparkleMotionStick.ino | 44 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/.feather_esp32_v2.test.only create mode 100644 Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/Arduino_I2S_SparkleMotionStick.ino diff --git a/Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/.feather_esp32_v2.test.only b/Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/.feather_esp32_v2.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/Arduino_I2S_SparkleMotionStick.ino b/Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/Arduino_I2S_SparkleMotionStick.ino new file mode 100644 index 000000000..0deb97c72 --- /dev/null +++ b/Sparkle_Motion_Stick_Examples/Arduino_I2S_SparkleMotionStick/Arduino_I2S_SparkleMotionStick.ino @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2025 Limor Fried for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +#include +#include "ESP_I2S.h" + +// I2S pin definitions for Sparklemotion +const uint8_t I2S_SCK = 14; // BCLK +const uint8_t I2S_WS = 12; // LRCLK +const uint8_t I2S_DIN = 13; // DATA_IN + +// Create I2S instance +I2SClass i2s; + +void setup() { + // Fast serial for plotting + Serial.begin(500000); + + // Initialize I2S + i2s.setPins(I2S_SCK, I2S_WS, -1, I2S_DIN); + if (!i2s.begin(I2S_MODE_STD, 44100, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO, I2S_STD_SLOT_LEFT)) { + Serial.println("Failed to initialize I2S bus!"); + return; + } + + Serial.println("I2S Mic Plotter Ready"); +} + +void loop() { + static uint32_t lastPlot = 0; + + // Get a sample + int32_t sample = i2s.read(); + + // Only plot every 1ms (1000 samples/sec is plenty for visualization) + if (millis() - lastPlot >= 1) { + if (sample >= 0) { // Valid sample + // Plot both raw and absolute values + Serial.printf("%d,%d\n", (int16_t)sample, abs((int16_t)sample)); + } + lastPlot = millis(); + } +}