#include <Servo.h>
Servo servo1;
int servoPosition;
int currentValue;
int lastValue=1;
int encoderPosition;
unsigned long now;
unsigned long past;
int buttonState;
int degreesToHome;
int j;
int xxx;
void setup() {
// set PIN and range in us. Standard servo range is 500 - 2500 us
servo1.attach(6, 500, 2500);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT_PULLUP); //Button
pinMode(5, OUTPUT); //Yellow LED
pinMode(7, OUTPUT); //Red LED
servo1.write(90);
encoderPosition=90;
Serial.begin(9600);
Serial.println("BEGIN");
Serial.println();
}
void loop() {
currentValue = digitalRead(2);
if (currentValue != lastValue){
//Clockwise
if (digitalRead(3) != currentValue){
encoderPosition ++;
if (encoderPosition>180) {
encoderPosition=180;
digitalWrite(7, HIGH);
past=millis();
}
servo1.write(encoderPosition);
lastValue = currentValue;
Serial.println ("Clockwise");
Serial.println(encoderPosition);
}
//Counterclockwise
else {
encoderPosition--;
if (encoderPosition<0) {
encoderPosition=0;
digitalWrite(7, HIGH);
past=millis();
}
servo1.write(encoderPosition);
lastValue = currentValue;
Serial.println("Counterclockwise");
Serial.println(encoderPosition);
}
}
//Limit LED, delayed
now=millis();
if (now-past>5000) {
digitalWrite(7, LOW);
past=now;
}
//Homing
buttonState = digitalRead(4);
if (buttonState==LOW) {
degreesToHome = encoderPosition - 90;
digitalWrite(5, HIGH);
Serial.println("degreesToHome");
Serial.println(degreesToHome);
if (degreesToHome<90) {
for (j=1;j<=degreesToHome;j=j+1){
servo1.write(encoderPosition --);
delay(50);
}
}
if (degreesToHome<0) {
for (j=1;j>=degreesToHome;j=j-1){
servo1.write(encoderPosition ++);
delay(50);
}
}
digitalWrite(5, LOW);
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
servo1:GND
servo1:V+
servo1:PWM
encoder1:CLK
encoder1:DT
encoder1:SW
encoder1:VCC
encoder1:GND
led1:A
led1:C
led2:A
led2:C