Stap 3: Code
Uit bildr artikel: http://bildr.org/2012/08/rotary-encoder-arduino/
en van Adafruit van Larson Scanner https://learn.adafruit.com/larson-scanner-shades
U moet ook de Adafruit NeoPixel bibliotheek geïnstalleerd https://github.com/adafruit/Adafruit_NeoPixel
#include
#define N_LEDS 60
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel (N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
Deze pinnen kunnen niet meer worden gewijzigd 2/3 zijn speciale pinnen
int encoderPin1 = 2;
int encoderPin2 = 3;
vluchtige int lastEncoded = 0;
vluchtige int encoderValue = 0;
lange lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
VOID Setup {}
strip.begin();
int pos = 1, dir = 1; Positie, richting van "oog"
Serial.begin (9600); voor het testen van encoder
pinMode (encoderPin1, INPUT);
pinMode (encoderPin2, INPUT);
digitalWrite (encoderPin1, hoge); pullup weerstand inschakelen
digitalWrite (encoderPin2, hoge); pullup weerstand inschakelen
Bel updateEncoder() wanneer een hoog/laag gewijzigd gezien
op onderbreken (pin 2) 0 of 1 (pin 3) onderbreken
attachInterrupt (0, updateEncoder, verandering);
attachInterrupt (1, updateEncoder, verandering);
}
int pos = 1, dir = 1; Positie, richting van "oog"
void loop {}
int count = 0;
Graaf = (encoderValue / 4);
Serial.println(encoderValue); testen / debuggen van de encoder
Serial.println(Count); testen / debuggen van de encoder
int j;
lange colorb = 0;
lange colorg = 0;
lange colorr = 0;
int count;
colorb = colorb + abs(encoderValue); blauw
colorg = colorb + 2*abs(encoderValue); groen
colorr = colorb + 4*abs(encoderValue); rood
opzoektabel voor kleurwaarden 13 sets van 3 kleuren
int rood [13] = {255,255,255,255,128,0,0,0,0,0,127,255,255};
int red1 [13] = {128,128,204,204,102,0,0,0,0,0,102,204,204};
int red2 [13] = {32,16,153,153,76,0,0,0,0,0,76,153,153};
int groene [13] = {255,0,0,0,0,0,127,255,255,255,255,255,127};
int green1 [13] = {128,0,0,0,0,0,102,64,204,128,204,204,102};
int green2 [13] = {32,0,0,0,0,0,76,32,153,16,153,153,76};
int blauw [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};
int blue2 [13] = {32,0,76,153,153,16,153,32,76,0,0,0,0};
Als (colorb > 255) colorg colorg = ++;
Als (colorg > 255) colorr = colorr ++;
Draw 5 pixels gecentreerd op pos. setPixelColor() zal een clip
pixels weg van de uiteinden van de strook, we hoeven niet om op te letten voor.
strip.setPixelColor(0,(red[count]),(green[count]),(blue[count])); encoder LED (aparte WS2811 spaander)
strip.setPixelColor (pos - 2,(red2[count]),(green2[count]),(blue2[count])); red2 green2 blue2 uit opzoektabel
strip.setPixelColor (pos - 1, (red1[count]),(green1[count]),(blue1[count])); red1 green1 blue1
strip.setPixelColor (pos, (red[count]),(green[count]),(blue[count])); Middelste pixel is helderste
strip.setPixelColor (pos + 1, (red1[count]),(green1[count]),(blue1[count])); red1 green1 blue1
strip.setPixelColor (pos + 2,(red2[count]),(green2[count]),(blue2[count])); red2 green2 blue2
strip.show();
delay(30);
In plaats van stiekeme wordt en enkel de staart pixel, wissen
het is makkelijker om te wissen alles en tekent een nieuwe een volgende keer.
voor (j =-2; j < = 2; j ++) strip.setPixelColor (pos + j, 0);
Uiteinden van strip stuiteren
POS += dir;
Als (pos < 2) {}
POS = 3;
dir = - dir;
} else if (pos > = {strip.numPixels())}
POS = strip.numPixels() - 2;
dir = - dir;
}
}
ongeldig updateEncoder() {}
int MSB = digitalRead(encoderPin1); MSB = meest significante bit
int LSB = digitalRead(encoderPin2); LSB = minste significante beetje
int gecodeerd = (MSB << 1) | LSB; de waarde 2 pin omzetten in één getal
int som = (lastEncoded << 2) | gecodeerd; naar de vorige gecodeerde waarde toe te voegen
Als (som 0b1101 == || som 0b0100 == || som 0b0010 == || som 0b1011 ==) encoderValue ++;
Als (som 0b1110 == || som 0b0111 == || som 0b0001 == || som 0b1000 ==) encoderValue--;
Als (encoderValue > 55) encoderValue = 0; Gewijzigd op 10-26-14
Als (encoderValue < 0) encoderValue = 55;
lastEncoded = gecodeerd; Deze waarde opslaan voor de volgende keer
}