//#####RECOGNISING POSITION AND DIRECTION OF THE ROTARY ENCODER AND DISPLAYING IT IN SERIAL MONITOR ######
/*
int counter =0;
String dir="";
unsigned long last_run=0;
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(3), shaft_moved, FALLING);
pinMode(4, INPUT);
}
void loop() {
Serial.print("counter :");
Serial.print(counter);
Serial.print(" direction :");
Serial.println(dir);
}
void shaft_moved(){
if (millis()-last_run>5){
if (digitalRead(4)==1){
counter++;
dir="CW";
}
if(digitalRead(4)==0){
counter--;
dir="CCW";
}
last_run=millis();
}
}
//#### ROTARY ENCODER LIMITING THE COUNTER RANGE 5 TO 10 ####
int counter =0;
String dir="";
unsigned long last_run=0;
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(3), shaft_moved, FALLING);
pinMode(4, INPUT);
}
void loop() {
Serial.print("counter :");
Serial.print(counter);
Serial.print(" direction :");
Serial.println(dir);
}
void shaft_moved(){
if (millis()-last_run>5){
if (digitalRead(4)==1){
if(counter<10)
counter++;
dir="CW";
}
if(digitalRead(4)==0){
if(counter>5)
counter--;
dir="CCW";
}
last_run=millis();
}
}
//#### CONTROLLING CUSTOM 7 SEGMENT DISPLAY (SHIFT REGISTER DRIVEN) WITH ROTARY ENCODER ####
*/
int datapin =8;
int latchpin = 9;
int clockpin = 10;
int counter=0;
String dir="";
unsigned long last_run =0;
int digits [10] [8] {
{0,1,1,1,1,1,1,0}, //0
{0,0,1,1,0,0,0,0}, //1
{0,1,1,0,1,1,0,1}, //2
{0,1,1,1,1,0,0,1}, //3
{0,0,1,1,0,0,1,1}, //4
{0,1,0,1,1,0,1,1}, //5
{0,1,0,1,1,1,1,1}, //6
{0,1,1,1,0,0,0,0}, //7
{0,1,1,1,1,1,1,1}, //8
{0,1,1,1,1,0,1,1}, //9
};
void setup(){
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(3), shaft_moved, LOW);
attachInterrupt(digitalPinToInterrupt(2), reset_to_0, FALLING);
pinMode(4, INPUT);
pinMode(datapin, OUTPUT);
pinMode(latchpin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(2, INPUT_PULLUP);
}
void loop() {
displaydigit(counter);
Serial.print("counter :");
Serial.print(counter);
Serial.print(" direction :");
Serial.println(dir);
}
void shaft_moved(){
if (millis()-last_run>5){
if (digitalRead(4)==1){
if(counter<10)
counter++;
dir="CW";
}
if(digitalRead(4)==0){
if(counter>5)
counter--;
dir="CCW";
}
last_run=millis();
}
}
void reset_to_0(){
counter=0;
}
void displaydigit (int Digit){
digitalWrite(latchpin, LOW);
for(int i = 7; i>=0; i--){
digitalWrite(clockpin, LOW);
if(digits[Digit] [i] ==1)
digitalWrite(datapin, LOW);
if(digits [Digit] [i] ==0)
digitalWrite(datapin, HIGH);
digitalWrite(clockpin, HIGH);
}
digitalWrite(latchpin, HIGH);
}