Rotary Controlled LED Row
A circuit that controls the amount of LED's turned on via the value of a rotary encoder.
Components and supplies
1
Rotary Encoder with Push-Button
1
LED (generic)
1
Arduino UNO
1
USB-A to B Cable
1
Breadboard (generic)
Apps and platforms
1
Arduino IDE
Project description
Code
Control code
arduino
1// Define Pins 2#define CLK 2 3#define DT 3 4#define SW 4 5 6#define LED1 9 7#define LED2 10 8#define LED3 11 9#define LED4 12 10#define LED5 13 11#define LED6 14//Analog 0/A0 12#define LED7 15//Analog 1/A1 13#define LED8 16//Analog 2/A2 14#define LED9 17//Analog 3/A3 15#define LED10 18//Analog 4/A4 16 17const int interrupt0 = 0;// Interrupt 0 在 pin 2 上 18int count = 0;//Define the count 19int lastCLK = 0;//CLK initial value 20 21void setup() 22{ 23 pinMode(SW, INPUT); 24 digitalWrite(SW, HIGH); 25 pinMode(CLK, INPUT); 26 pinMode(DT, INPUT); 27 attachInterrupt(interrupt0, ClockChanged, CHANGE);//Set the interrupt 0 handler, trigger level change 28 29 pinMode(LED1, OUTPUT); 30 pinMode(LED2, OUTPUT); 31 pinMode(LED3, OUTPUT); 32 pinMode(LED4, OUTPUT); 33 pinMode(LED5, OUTPUT); 34 pinMode(LED6, OUTPUT); 35 pinMode(LED7, OUTPUT); 36 pinMode(LED8, OUTPUT); 37 pinMode(LED9, OUTPUT); 38 pinMode(LED10, OUTPUT); 39 40 Serial.begin(9600); 41} 42 43void loop() 44{ 45 if (!digitalRead(SW) && count != 0) //Read the button press and the count value to 0 when the counter reset 46 { 47 count = 0; 48 Serial.print("count:"); 49 Serial.println(count); 50 } 51} 52 53void LedOutput(int value) 54{ 55 // Turn off all LEDs 56 digitalWrite(LED1, LOW); 57 digitalWrite(LED2, LOW); 58 digitalWrite(LED3, LOW); 59 digitalWrite(LED4, LOW); 60 digitalWrite(LED5, LOW); 61 digitalWrite(LED6, LOW); 62 digitalWrite(LED7, LOW); 63 digitalWrite(LED8, LOW); 64 digitalWrite(LED9, LOW); 65 digitalWrite(LED10, LOW); 66 67 // If encoder value is between 1-10, light up appropriate 68 // number of LEDs 69 if (value >= 1 || value <= 10) { 70 switch(value) { 71 case 1: 72 digitalWrite(LED1, HIGH); 73 break; 74 case 2: 75 digitalWrite(LED1, HIGH); 76 digitalWrite(LED2, HIGH); 77 break; 78 case 3: 79 digitalWrite(LED1, HIGH); 80 digitalWrite(LED2, HIGH); 81 digitalWrite(LED3, HIGH); 82 break; 83 case 4: 84 digitalWrite(LED1, HIGH); 85 digitalWrite(LED2, HIGH); 86 digitalWrite(LED3, HIGH); 87 digitalWrite(LED4, HIGH); 88 break; 89 case 5: 90 digitalWrite(LED1, HIGH); 91 digitalWrite(LED2, HIGH); 92 digitalWrite(LED3, HIGH); 93 digitalWrite(LED4, HIGH); 94 digitalWrite(LED5, HIGH); 95 break; 96 case 6: 97 digitalWrite(LED1, HIGH); 98 digitalWrite(LED2, HIGH); 99 digitalWrite(LED3, HIGH); 100 digitalWrite(LED4, HIGH); 101 digitalWrite(LED5, HIGH); 102 digitalWrite(LED6, HIGH); 103 break; 104 case 7: 105 digitalWrite(LED1, HIGH); 106 digitalWrite(LED2, HIGH); 107 digitalWrite(LED3, HIGH); 108 digitalWrite(LED4, HIGH); 109 digitalWrite(LED5, HIGH); 110 digitalWrite(LED6, HIGH); 111 digitalWrite(LED7, HIGH); 112 break; 113 case 8: 114 digitalWrite(LED1, HIGH); 115 digitalWrite(LED2, HIGH); 116 digitalWrite(LED3, HIGH); 117 digitalWrite(LED4, HIGH); 118 digitalWrite(LED5, HIGH); 119 digitalWrite(LED6, HIGH); 120 digitalWrite(LED7, HIGH); 121 digitalWrite(LED8, HIGH); 122 break; 123 case 9: 124 digitalWrite(LED1, HIGH); 125 digitalWrite(LED2, HIGH); 126 digitalWrite(LED3, HIGH); 127 digitalWrite(LED4, HIGH); 128 digitalWrite(LED5, HIGH); 129 digitalWrite(LED6, HIGH); 130 digitalWrite(LED7, HIGH); 131 digitalWrite(LED8, HIGH); 132 digitalWrite(LED9, HIGH); 133 break; 134 case 10: 135 digitalWrite(LED1, HIGH); 136 digitalWrite(LED2, HIGH); 137 digitalWrite(LED3, HIGH); 138 digitalWrite(LED4, HIGH); 139 digitalWrite(LED5, HIGH); 140 digitalWrite(LED6, HIGH); 141 digitalWrite(LED7, HIGH); 142 digitalWrite(LED8, HIGH); 143 digitalWrite(LED9, HIGH); 144 digitalWrite(LED10, HIGH); 145 break; 146 } 147 } 148} 149 150//The interrupt handlers 151void ClockChanged() 152{ 153 int clkValue = digitalRead(CLK);//Read the CLK pin level 154 int dtValue = digitalRead(DT);//Read the DT pin level 155 if (lastCLK != clkValue) 156 { 157 lastCLK = clkValue; 158 count += (clkValue != dtValue ? 1 : -1);//CLK and inconsistent DT + 1, otherwise - 1 159 160 Serial.print("count:"); 161 Serial.println(count); 162 LedOutput(count); 163 } 164}
Downloadable files
Schematic
Schematic

Schematic
Schematic

Comments
Only logged in users can leave comments