Components and supplies
Rotary Encoder with Push-Button
OLED Expansion
Arduino UNO
Breadboard (generic)
Jumper wires (generic)
Project description
Code
Arduino IDE Codes
arduino
This code requires some additional libraries
1#include <Wire.h> 2#include <Adafruit_SSD1306.h> 3#include <Adafruit_GFX.h> 4#define OLED_ADDR 0x3C 5Adafruit_SSD1306 display(-1); 6 7#if (SSD1306_LCDHEIGHT != 64) 8#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 9#endif 10 11#if (SSD1306_LCDHEIGHT != 64) 12#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 13#endif 14 15#define encoder0PinA 2 16#define encoder0PinB 3 17volatile unsigned int encoder0Pos = 0; 18 19int valA; 20int valB; 21int valC; 22 23byte clk; 24byte menuCount = 1; 25byte dir = 0; 26bool runState = false; 27 28void setup() { 29 pinMode(6, OUTPUT); 30 pinMode(9, OUTPUT); 31 pinMode(10, OUTPUT); 32 33 Serial.begin(9600); 34 display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); 35 display.display(); 36 display.clearDisplay(); 37 attachInterrupt(0, doEncoder, CHANGE); // encoder pin on interrupt 0 - pin 2 38} 39 40void loop() { 41 clk = digitalRead(4); 42 ledControl(); 43 menuCheck(); 44 staticMenu(); 45 display.clearDisplay(); 46 delay(50); 47} 48 49void staticMenu() { 50 display.setTextSize(2); 51 display.setTextColor(WHITE); 52 53 display.setCursor(10, 0); 54 display.println("yyRobotic"); 55 //--------------------------------- 56 display.setTextSize(1); 57 display.setCursor(10, 20); 58 display.println("Value A:"); 59 display.setCursor(60, 20); 60 display.println(valA); 61 62 display.setCursor(10, 30); 63 display.println("Value B:"); 64 display.setCursor(60, 30); 65 display.println(valB); 66 67 display.setCursor(10, 40); 68 display.println("Value C:"); 69 display.setCursor(60, 40); 70 display.println(valC); 71 72 display.setCursor(10, 50); 73 display.println("Start:"); 74 display.setCursor(45, 50); 75 if (encoder0Pos > 5 && menuCount == 4) { 76 display.println("Run!"); 77 runState = true; 78 } else { 79 display.println("Idle"); 80 runState = false; 81 } 82 display.setCursor(2, (menuCount * 10) + 10); 83 display.println(">"); 84 85 display.display(); 86} 87 88void ledControl() { 89 if (runState == true) { 90 analogWrite(6, valA); 91 analogWrite(9, valB); 92 analogWrite(10, valC); 93 } 94} 95void menuCheck() { 96 if (clk == LOW && menuCount < 5) { 97 menuCount++; 98 encoder0Pos = 0; 99 } 100 if (clk == LOW && menuCount >= 5) { 101 menuCount = 1; 102 } 103 104 if (menuCount == 1) { 105 valA = encoder0Pos; 106 } 107 if (menuCount == 2) { 108 valB = encoder0Pos; 109 } 110 if (menuCount == 3) { 111 valC = encoder0Pos; 112 } 113} 114 115void doEncoder() { 116 if (digitalRead(encoder0PinA) == HIGH) { 117 if (digitalRead(encoder0PinB) == LOW && encoder0Pos > 0) { 118 encoder0Pos = encoder0Pos - 1; 119 dir = 0; 120 } 121 else { 122 encoder0Pos = encoder0Pos + 1; 123 dir = 1; 124 } 125 } 126 else 127 { 128 if (digitalRead(encoder0PinB) == LOW ) { 129 encoder0Pos = encoder0Pos + 1; 130 dir = 1; 131 } 132 else { 133 if (encoder0Pos > 0) { 134 encoder0Pos = encoder0Pos - 1; 135 dir = 0; 136 } 137 } 138 } 139}
Comments
Only logged in users can leave comments