#include <Adafruit_NeoPixel.h> // Para la pantalla
#define PIN 6
#define NUMPIXELS 56
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Cadenas (sin cambios)
const char cadena0[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnnbrbnnnnnnnnnrnnnnnnngnn";
const char cadena1[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnnbrbnnnnnnnnrgnnnnnnrnnn";
const char cadena2[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbbnnnnnnnnnbrbnnnnnnnnrgnnnnnrgnnn";
const char cadena3[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnrrbnnnnnnnrgnnnnnrgnnnn";
const char cadena4[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnnbbnnnnnnnnrrbnnnnnnrrgnnnnngnnnnn";
const char cadena5[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnnbbnnnnnnngrrbnnnnnrrrgnnnnnnnnnnn";
const char cadena6[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnrrrbbnnnnrrgnbnnnnnnnnnn";
const char cadena7[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnrrrrrrbbnnnnnnnnbnnnnnnnnnn";
const char cadena8[] PROGMEM = "nnnnnnnnnnnnnnnnnnrrrnbnnnnnnnnngrrbbnnnnnnnnnbnnnnnnnnn";
const char cadena9[] PROGMEM = "nnnnnnnnnnnnnnnnnnrrrrnnnnnnnnnnngrbnnnnnnnnnnbbnnnnnnnn";
const char cadena10[] PROGMEM = "nnnnnnnnrnnnnnnnnnngrrnnnnnnnnnnngrbnnnnnnnnnnbbnnnnnnnn";
const char cadena11[] PROGMEM = "nnnnnnnnrrnnnnnnnnnngrnnnnnnnnnnngrbnnnnnnnnnnbnnnnnnnnn";
const char cadena12[] PROGMEM = "nnnnnnnnnrrnnnnnnnnnnrrnnnnnnnnnnbrbnnnnnnnnnbbnnnnnnnnn";
const char cadena13[] PROGMEM = "nnnnnnnnnnrnnnnnnnnnnrrnnnnnnnnnnbrbnnnnnnnnnbnnnnnnnnnn";
const char cadena14[] PROGMEM = "nnnnnnnnnnnrnnnnnnnnnnrnnnnnnnnnnbrbnnnnnnnnnbnnnnnnnnnn";
const char cadena15[] PROGMEM = "nnnnnnnnnnnnrnnnnnnnnnrrnnnnnnnnnbrbnnnnnnnnnbnnnnnnnnnn";
const char cadena16[] PROGMEM = "nnnnnnnnnnnnrrnnnnnnnnrrnnnnnnnnnbrbnnnnnnnnnbnnnnnnnnnn";
const char cadena17[] PROGMEM = "nnnnnnnnnnnnnrrnnnnnnnnrgnnnnnnnnbrgnnnnnnnnbnnnnnnnnnnn";
const char cadena18[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnnrrgnnnnnnnbrgnnnnnnnbbnnnnnnnnnnn";
const char cadena19[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnnrrrgnnnnnnbrgnnnnnnnbbnnnnnnnnnnn";
const char cadena20[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnrrrnnnnnbbrrgnnnnnnnnbnnnnnnnnnn";
const char cadena21[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnbbrrrrrnnnnnnbnnnnnnnnnn";
const char cadena22[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnbbrrrnnnnnnnnbngrnnnnnnn";
const char cadena23[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnbbnnnnnnnnnnnbrrnnnnnnnnnngrrnnnnnnn";
const char cadena24[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnnnbrrnnnnnnnnnngrnnnnnnng";
const char cadena25[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnbbnnnnnnnnnnbrbnnnnnnnnngrnnnnnnngr";
const char cadena26[] PROGMEM = "nnnnnnnnnnnnnnnnnnnnnnbnnnnnnnnnnbrbnnnnnnnnngrnnnnnnnrn";
const char* const cadenas[] PROGMEM = {
cadena0,cadena1,cadena2,cadena3,cadena4,cadena5,cadena6,cadena7,cadena8,cadena9,cadena10,cadena11,cadena12,cadena13,cadena14,cadena15,cadena16,cadena17,cadena18,cadena19,cadena20,cadena21,cadena22,cadena23,cadena24,cadena25,cadena26
};
float smoothAngle = 0;
float previousAngle = 0;
float smoothingFactor = 0.2; // Puedes ajustar este valor para más o menos suavizado
void setup() {
pixels.begin(); // Pantalla
pixels.setBrightness(255);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop() {
int rawAngle = map(analogRead(0), 0, 1023, 0, 359); // Ángulo crudo del potenciómetro o sensor
// Suavizado circular
float delta = rawAngle - previousAngle;
if (delta > 180) delta -= 360;
if (delta < -180) delta += 360;
smoothAngle = previousAngle + delta * smoothingFactor;
smoothAngle = fmod(smoothAngle + 360.0, 360.0); // Asegura que esté entre 0 y 359
previousAngle = smoothAngle; // Actualizamos para la próxima vuelta
int index = round(smoothAngle / (360.0 / 27));
index = constrain(index, 0, 26); // Evita desbordamientos
asignarColoresDesdeFlash(index);
delay(50);
}
bool letraValida(char letra) {
return letra == 'n' || letra == 'b' || letra == 'r' || letra == 'g';
}
uint32_t letraAColor(char letra) {
switch (letra) {
case 'n': return pixels.Color(47, 47, 47); break;
case 'b': return pixels.Color(100, 100, 100); break;
case 'r': return pixels.Color(255, 20, 20); break;
case 'g': return pixels.Color(190, 21, 21); break;
default: return pixels.Color(0, 0, 0); // Por si acaso
}
}
void asignarColoresDesdeFlash(uint8_t index) {
const char* cadenaPtr = (const char*)pgm_read_word(&(cadenas[index]));
for (uint8_t i = 0; i < NUMPIXELS; i++) {
char letra = pgm_read_byte(&(cadenaPtr[i]));
pixels.setPixelColor(i, letraAColor(letra));
}
pixels.show();
}