/*
Source code for LCD: https://docs.arduino.cc/learn/electronics/lcd-displays
Source code for Rotary encoder: https://www.instructables.com/Improved-Arduino-Rotary-Encoder-Reading/
https://create.arduino.cc/projecthub/MisterBotBreak/how-to-use-a-rotary-encoder-16e079
Source code for servo: https://docs.arduino.cc/learn/electronics/servo-motors
*/
#include <LiquidCrystal.h>
#include <Servo.h>
const int rs = 9, en = 8, d4 = 7, d5 = 6, d6 = 5, d7 = 4;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int val;
int PinCLK = 11;
int PinDT = 12;
int PinSW = 13;
static long encoderPos = 0;
int PinCLKLast = LOW;
int nbPas = 180;
int n = LOW;
Servo myservo;
int BuzzPin = 10;
void setup() {
lcd.begin(16, 2);
lcd.print("Testing code-V0!");
lcd.setCursor(0, 1);
lcd.print("Angle= ");
pinMode (PinCLK,INPUT);
pinMode (PinDT,INPUT);
pinMode (PinSW,INPUT);
myservo.attach(3);
myservo.write(0);
pinMode (BuzzPin,OUTPUT);
}
void loop() {
n = digitalRead(PinCLK);
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) {
encoderPos--;
if ( encoderPos < 0 ) {
encoderPos = nbPas;
digitalWrite(BuzzPin, HIGH);
delay(50);
digitalWrite(BuzzPin, LOW);
delay(50);
digitalWrite(BuzzPin, HIGH);
delay(50);
digitalWrite(BuzzPin, LOW);
}
lcd.setCursor(7, 1);
lcd.print(" ");
lcd.setCursor(7, 1);
lcd.print(encoderPos);
myservo.write(encoderPos);
} else {
encoderPos++;
if ( encoderPos == (nbPas+1)) {
encoderPos = 0;
digitalWrite(BuzzPin, HIGH);
delay(50);
digitalWrite(BuzzPin, LOW);
delay(50);
digitalWrite(BuzzPin, HIGH);
delay(50);
digitalWrite(BuzzPin, LOW);
}
lcd.setCursor(7, 1);
lcd.print(" ");
lcd.setCursor(7, 1);
lcd.print(encoderPos);
myservo.write(encoderPos);
}
}
PinCLKLast = n;
}