//By:Arkan Asadil Huda
//!!!The stepper have a 1.8 to 1 gear ratio!!!
#include <LiquidCrystal_I2C.h>
#define park 17
#define dir 4
#define step 16
#define rsw 5
#define led 15
#define ENCODER_CLK 18
#define ENCODER_DT 19
LiquidCrystal_I2C lcd(0x27, 16, 2);
int deg = 0;
int trg = 0;
const float BETA = 3950;
void setup() {
lcd.init();
lcd.backlight();
pinMode(step, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(park, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(rsw, INPUT_PULLUP);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
trg++;
}
if (dtValue == LOW) {
trg--;
}
}
void loop() {
int analogValue = analogRead(2);
float celsius = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
if (trg >= 360) {trg -= 360;}
if (trg <= -1) {trg += 360;}
if (celsius > 78) {
lcd.setCursor(0,0);
lcd.print("HIGH TEMPERATURE");
lcd.setCursor(0,1);
lcd.print(celsius);
lcd.print(" Celsius");
lcd.clear();
}
if (digitalRead(rsw) == LOW) {
lcd.clear();
lcd.print("Moving to: ");
lcd.print(trg);
lcd.print(char(223));
digitalWrite(led, HIGH);
while (trg > deg) {
digitalWrite(dir, HIGH);
digitalWrite(step, HIGH);
delay(100);
digitalWrite(step, LOW);
digitalWrite(dir, LOW);
deg++;
}
while (trg < deg) {
digitalWrite(step, HIGH);
delay(100);
digitalWrite(step, LOW);
deg--;
}
lcd.clear();
digitalWrite(led, LOW);
}
if (digitalRead(park) == LOW) {
lcd.clear();
lcd.print("Parking...");
while (0 > deg) {
digitalWrite(dir, HIGH);
digitalWrite(step, HIGH);
delay(100);
digitalWrite(step, LOW);
digitalWrite(dir, LOW);
deg++;
}
while (0 < deg) {
digitalWrite(step, HIGH);
delay(100);
digitalWrite(step, LOW);
deg--;
}
lcd.clear();
}
lcd.setCursor(0,0);
lcd.print("Current: ");
lcd.print(deg);
lcd.println(char(223));
lcd.setCursor(0,1);
lcd.print("Target: ");
lcd.print(trg);
lcd.println(char(223));
delay(100);
}