Étape 3: Code
Tirée de l’article de bildr : http://bildr.org/2012/08/rotary-encoder-arduino/
et à partir Larson Scanner https://learn.adafruit.com/larson-scanner-shades de Adafruit
Vous aurez également besoin NeoPixel bibliothèque installé https://github.com/adafruit/Adafruit_NeoPixel de Adafruit
#include
#define N_LEDS 60
#define PIN 6
Bande de Adafruit_NeoPixel = Adafruit_NeoPixel (N_LEDS, PIN, NEO_GRB + NEO_KHZ800) ;
Ces broches ne peuvent pas être changés 2/3 sont des goupilles spéciales
int encoderPin1 = 2 ;
int encoderPin2 = 3 ;
volatile int lastEncoded = 0 ;
encoderValue volatile int = 0 ;
long lastencoderValue = 0 ;
int lastMSB = 0 ;
int lastLSB = 0 ;
void setup() {}
Strip.Begin() ;
int pos = 1, dir = 1 ; Position, la direction de « l’oeil »
Serial.Begin (9600) ; pour tester l’encodeur
pinMode (encoderPin1, entrée) ;
pinMode (encoderPin2, entrée) ;
digitalWrite (encoderPin1, HIGH) ; Allumez la résistance pullup
digitalWrite (encoderPin2, HIGH) ; Allumez la résistance pullup
appelez le updateEncoder() lors de la toute haute/basse changé vu
d’interruption 0 (axe 2), ou interrompre 1 (axe 3)
attachInterrupt (0, updateEncoder, changement) ;
attachInterrupt (1, updateEncoder, changement) ;
}
int pos = 1, dir = 1 ; Position, la direction de « l’oeil »
void loop() {}
int count = 0 ;
Count = (encoderValue / 4) ;
Serial.println(encoderValue) ; test / débogage encodeur
Serial.println(Count) ; test / débogage encodeur
int j ;
long colorb = 0 ;
long colorg = 0 ;
long colorr = 0 ;
int count ;
colorb = colorb + abs(encoderValue) ; bleu
colorg = colorb + 2*abs(encoderValue) ; vert
colorr = colorb + 4*abs(encoderValue) ; rouge
table de correspondance pour les valeurs de couleur 13 ensembles de 3 couleurs
int rouge [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 vert [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 verte2 [13] = {32,0,0,0,0,0,76,32,153,16,153,153,76} ;
int bleu [13] = {255,0,127,255,255,255,255,255,0,0,0,0,0} ;
blue1 int [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} ;
Si (colorb > 255) colorg = colorg ++ ;
Si (colorg > 255) colorr = colorr ++ ;
Tirage au sort 5 pixels centrés sur setPixelColor() pos. écrêtera tout
pixels les extrémités de la bande, nous n’avez pas besoin de regarder pour cela.
strip.setPixelColor(0,(red[count]),(green[count]),(blue[count])) ; encodeur LED (puce séparée de WS2811)
strip.setPixelColor (pos - 2,(red2[count]),(green2[count]),(blue2[count])) ; Red2 verte2 blue2 de table de correspondance
strip.setPixelColor (pos - 1, (red1[count]),(green1[count]),(blue1[count])) ; red1 green1 blue1
strip.setPixelColor (pos, (red[count]),(green[count]),(blue[count])) ; Centre pixel est plus brillante
strip.setPixelColor (pos + 1, (red1[count]),(green1[count]),(blue1[count])) ; red1 green1 blue1
strip.setPixelColor (pos + 2,(red2[count]),(green2[count]),(blue2[count])) ; Red2 verte2 blue2
Strip.Show() ;
Delay(30) ;
Plutôt que d’être sournois et effacer juste le pixel de la queue,
Il est plus facile pour tout effacer et dessiner un nouveau une prochaine fois.
pour (j =-2; j < = 2; j ++) strip.setPixelColor (pos + j, 0) ;
Rebondissent sur les extrémités de la bande
POS = dir ;
Si (pos < 2) {}
Pos = 3 ;
dir = - dir ;
} ElseIf (pos > = {strip.numPixels())}
POS = strip.numPixels() - 2 ;
dir = - dir ;
}
}
void updateEncoder() {}
int MSB = digitalRead(encoderPin1) ; MSB = bit de poids fort
int LSB = digitalRead(encoderPin2) ; LSB = bit le moins significatif
int encodé = (MSB << 1) | LSB ; conversion de la valeur de 2 broches à numéro unique
int somme = (lastEncoded << 2) | codage ; ajoutant à la précédente valeur codée
Si (somme == 0b1101 || somme == 0b0100 || somme == 0b0010 || somme == 0b1011) encoderValue ++ ;
Si (somme == 0b1110 || somme == 0b0111 || somme == 0b0001 || somme == 0b1000) encoderValue--;
Si (encoderValue > 55) encoderValue = 0 ; Modifié le 26/10/14
Si (encoderValue < 0) encoderValue = 55 ;
lastEncoded = codé ; stocker cette valeur pour la prochaine fois
}