Paso 3: código
De bildr artículo: http://bildr.org/2012/08/rotary-encoder-arduino/
y a partir Larson Scanner https://learn.adafruit.com/larson-scanner-shades de Adafruit
Usted también necesitará NeoPixel biblioteca instalada https://github.com/adafruit/Adafruit_NeoPixel de Adafruit
#include
#define N_LEDS 60
#define PIN 6
Tira de Adafruit_NeoPixel = Adafruit_NeoPixel (N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
estos pernos no pueden ser cambiados 2/3 son pernos especiales
int encoderPin1 = 2;
int encoderPin2 = 3;
volátiles int lastEncoded = 0;
encoderValue volátiles int = 0;
lastencoderValue largo = 0;
int lastMSB = 0;
int lastLSB = 0;
void setup() {}
Strip.Begin();
int pos = 1, dir = 1; Posición, dirección de "ojo"
Serial.Begin (9600); para probar el codificador
pinMode (encoderPin1, entrada);
pinMode (encoderPin2, entrada);
digitalWrite (encoderPin1, HIGH); encender la resistencia de pullup
digitalWrite (encoderPin2, HIGH); encender la resistencia de pullup
llamar al updateEncoder() cuando cualquier alto-bajo cambia visto
interrupción 0 (pin 2), o interrumpir 1 (pin 3)
attachInterrupt (0, updateEncoder, cambio);
attachInterrupt (1, updateEncoder, cambio);
}
int pos = 1, dir = 1; Posición, dirección de "ojo"
void loop() {}
int cuenta = 0;
count = (encoderValue / 4);
Serial.println(encoderValue); prueba / depuración de codificador
Serial.println(Count); prueba / depuración de codificador
int j;
colorb largo = 0;
colorg largo = 0;
colorr largo = 0;
int cuenta;
colorb colorb = abs(encoderValue); azul
colorg colorb = 2*abs(encoderValue); verde
colorr colorb = 4*abs(encoderValue); rojo
tabla de búsqueda para los valores de color 13 conjuntos de 3 colores
int rojo [13] = {255,255,255,255,128,0,0,0,0,0,127,255,255};
red1 int [13] = {128,128,204,204,102,0,0,0,0,0,102,204,204};
red2 int [13] = {32,16,153,153,76,0,0,0,0,0,76,153,153};
int verde [13] = {255,0,0,0,0,0,127,255,255,255,255,255,127};
verde1 int [13] = {128,0,0,0,0,0,102,64,204,128,204,204,102};
green2 de int [13] = {32,0,0,0,0,0,76,32,153,16,153,153,76};
int azul [13] = {255,0,127,255,255,255,255,255,0,0,0,0,0};
int blue1 [13] = {128,0,102,204,204,128,204,32,102,0,0,0,0};
azul2 int [13] = {32,0,76,153,153,16,153,32,76,0,0,0,0};
Si colorg (colorb > 255) = colorg ++;
Si (colorg > 255) colorr = colorr ++;
Sorteo 5 píxeles centrados en pos setPixelColor() recortará cualquier
pixeles de los extremos de la tira, no necesitamos ver para eso.
strip.setPixelColor(0,(red[count]),(green[count]),(blue[count])); codificador de LED (viruta de WS2811 independiente)
strip.setPixelColor (pos - 2,(red2[count]),(green2[count]),(blue2[count])); red2 green2 azul2 de tabla de búsqueda
strip.setPixelColor (pos - 1, (red1[count]),(green1[count]),(blue1[count])); red1 verde1 blue1
strip.setPixelColor (pos, (red[count]),(green[count]),(blue[count])); Centro pixel es más brillante
strip.setPixelColor (pos + 1, (red1[count]),(green1[count]),(blue1[count])); red1 verde1 blue1
strip.setPixelColor (pos + 2,(red2[count]),(green2[count]),(blue2[count])); red2 green2 azul2
Strip.Show();
Delay(30);
En lugar de ser astuto y borrar sólo los píxeles de cola,
es más fácil borrar todo y dibujar una nueva una próxima vez.
para (j =-2; j < = 2; j ++) strip.setPixelColor (pos + j, 0);
Rebotan en los extremos de la tira
pos += dir;
Si (pos < 2) {}
pos = 3;
DIR = - dir;
} else if (pos > = {strip.numPixels())}
pos = strip.numPixels() - 2;
DIR = - dir;
}
}
void updateEncoder() {}
int MSB = digitalRead(encoderPin1); MSB = bit más significativo
int LSB = digitalRead(encoderPin2); LSB = bit menos significativo
int codificado = (MSB << 1) | LSB; convertir el valor del 2 pin al número
int suma = (lastEncoded << 2) | codificadas, agregar al anterior valor codificado
Si (suma == 0b1101 || suma == 0b0100 || suma == 0b0010 || suma == 0b1011) encoderValue ++;
Si (suma == 0b1110 || suma == 0b0111 || suma == 0b0001 || suma == 0b1000) encoderValue--;
Si (encoderValue > 55) encoderValue = 0; Modificado el 26/10/14
Si (encoderValue < 0) encoderValue = 55;
lastEncoded = codificado; almacenar este valor para la próxima vez
}