Arduino UNO - Rotary Encoder
Exemple 1: Fa una sortida per el port serial
/* Read Quadrature Encoder
* Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V.
*
* Sketch by max wolf / www.meso.net
* v. 0.1 - very basic functions - mw 20061220
*
*/
int val;
int encoder0PinA = 11;
int encoder0PinB = 12;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
void setup() {
pinMode (encoder0PinA,INPUT);
pinMode (encoder0PinB,INPUT);
Serial.begin (9600);
}
void loop() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
} else {
encoder0Pos++;
}
Serial.print (encoder0Pos);
Serial.println ("/");
}
encoder0PinALast = n;
}
|
Exemple 2: Variació de la brillantor de un led (PWM)
/*
** Rotary Encoder Example
** Use the Sparkfun Rotary Encoder to
vary brightness of LED
**
** Sample the encoder at 200Hz using the
millis() function
*/
int brightness = 120;
// how bright the LED is, start at half
brightness
int fadeAmount = 10;
// how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12; // pin 12
const int pin_B = 11; // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime
= millis();
loopTime
= currentTime;
}
void loop() {
// get the current elapsed time
currentTime
= millis();
if(currentTime >= (loopTime + 5)){
// 5ms since last check of encoder =
200Hz
encoder_A = digitalRead(pin_A); // Read encoder pins
encoder_B = digitalRead(pin_B);
if((!encoder_A) && (encoder_A_prev)){
// A has gone from high to low
if(encoder_B) {
// B is high so clockwise
// increase the brightness, dont go over
255
if(brightness + fadeAmount <= 255) brightness += fadeAmount;
}
else {
// B is low so counter-clockwise
// decrease the brightness, dont go
below 0
if(brightness - fadeAmount >= 0) brightness -= fadeAmount;
}
}
encoder_A_prev = encoder_A;
// Store value of A for next time
// set the brightness of pin 9:
analogWrite(9, brightness);
loopTime = currentTime; // Updates loopTime
}
// Other processing can be done here
}
|