Sunfounder Rotery Encoder: Difference between revisions
From James's Wiki
(Created page with "File:Fgvr.jpg") |
No edit summary |
||
Line 1: | Line 1: | ||
[[File:Fgvr.jpg]] | [[File:Fgvr.jpg]] | ||
//Rotary Encoder | |||
/*You will see the angular displacement of the rotary encoder printed on Serial Monitor. | |||
When you turn the rotary encoder clockwise, the angular displacement is increased; | |||
when turn it counterclockwise, the displacement is decreased. | |||
If you press the switch on the rotary encoder, the readings will return to zero.*/ | |||
//Email: support@sunfounder.com | |||
//Website: www.sunfounder.com | |||
//2015.5.7 | |||
const int clkPin= 2; //the clk attach to pin 2 | |||
const int dtPin= 3; //the dt pin attach to pin 3 | |||
const int swPin= 4 ;//the sw pin attach to pin 4 | |||
int encoderVal = 0; | |||
void setup() | |||
{ | |||
//set clkPin,dePin,swPin as INPUT | |||
pinMode(clkPin, INPUT); | |||
pinMode(dtPin, INPUT); | |||
pinMode(swPin, INPUT); | |||
digitalWrite(swPin, HIGH); | |||
Serial.begin(9600); // initialize serial communications at 9600 bps | |||
} | |||
void loop() | |||
{ | |||
int change = getEncoderTurn();// | |||
encoderVal = encoderVal + change; | |||
if(digitalRead(swPin) == LOW)//if button pull down | |||
{ | |||
encoderVal = 0; | |||
} | |||
Serial.println(encoderVal); | |||
} | |||
int getEncoderTurn(void) | |||
{ | |||
static int oldA = HIGH; //set the oldA as HIGH | |||
static int oldB = HIGH; //set the oldB as HIGH | |||
int result = 0; | |||
int newA = digitalRead(clkPin);//read the value of clkPin to newA | |||
int newB = digitalRead(dtPin);//read the value of dtPin to newB | |||
if (newA != oldA || newB != oldB) //if the value of clkPin or the dtPin has changed | |||
{ | |||
// something has changed | |||
if (oldA == HIGH && newA == LOW) | |||
{ | |||
result = (oldB * 2 - 1); | |||
} | |||
} | |||
oldA = newA; | |||
oldB = newB; | |||
return result; | |||
} |
Latest revision as of 15:04, 7 October 2018
//Rotary Encoder /*You will see the angular displacement of the rotary encoder printed on Serial Monitor. When you turn the rotary encoder clockwise, the angular displacement is increased; when turn it counterclockwise, the displacement is decreased. If you press the switch on the rotary encoder, the readings will return to zero.*/ //Email: support@sunfounder.com //Website: www.sunfounder.com //2015.5.7 const int clkPin= 2; //the clk attach to pin 2 const int dtPin= 3; //the dt pin attach to pin 3 const int swPin= 4 ;//the sw pin attach to pin 4 int encoderVal = 0; void setup() { //set clkPin,dePin,swPin as INPUT pinMode(clkPin, INPUT); pinMode(dtPin, INPUT); pinMode(swPin, INPUT); digitalWrite(swPin, HIGH); Serial.begin(9600); // initialize serial communications at 9600 bps } void loop() { int change = getEncoderTurn();// encoderVal = encoderVal + change; if(digitalRead(swPin) == LOW)//if button pull down { encoderVal = 0; } Serial.println(encoderVal); } int getEncoderTurn(void) { static int oldA = HIGH; //set the oldA as HIGH static int oldB = HIGH; //set the oldB as HIGH int result = 0; int newA = digitalRead(clkPin);//read the value of clkPin to newA int newB = digitalRead(dtPin);//read the value of dtPin to newB if (newA != oldA || newB != oldB) //if the value of clkPin or the dtPin has changed { // something has changed if (oldA == HIGH && newA == LOW) { result = (oldB * 2 - 1); } } oldA = newA; oldB = newB; return result; }