//propane pid controller 12/28/2023
//#include <Servo.h>
#include <Stepper.h>
#define light_burner 50 //set gas to 25%
#define burner_off 0 //set gas to 25%
#define OFF_SW 3
#define LIGHT_SW 4
#define PID_SW 5
#define ALL_OFF 0
#define RED 2
#define YLW 1
#define GRN 3
#define RED_LED 5
#define YLW_LED 6
#define GRN_LED 7
#define PID_IN A0
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int val; // variable to read the value from the analog pin
// functions
void LED(int color) {
//Serial.println(color);
switch (color) {
case 0: {
digitalWrite(RED_LED, HIGH);
digitalWrite(YLW_LED, HIGH);
digitalWrite(GRN_LED, HIGH);
break;
}
case 1: {
digitalWrite(RED_LED, LOW);
digitalWrite(YLW_LED, HIGH);
digitalWrite(GRN_LED, HIGH);
break;
}
case 2: {
digitalWrite(RED_LED, HIGH );
digitalWrite(YLW_LED, LOW);
digitalWrite(GRN_LED, HIGH);
break;
}
case 3: {
digitalWrite(RED_LED, HIGH);
digitalWrite(YLW_LED, HIGH);
digitalWrite(GRN_LED, LOW);
break;
}
}
}
void setup() {
Serial.begin(9600);
myStepper.setSpeed(30);
myStepper.step(burner_off);
int previous=0;
pinMode(RED_LED, OUTPUT);
pinMode(YLW_LED, OUTPUT);
pinMode(GRN_LED, OUTPUT);
pinMode(OFF_SW, INPUT_PULLUP);
pinMode(LIGHT_SW, INPUT_PULLUP);
pinMode(PID_SW, INPUT_PULLUP);
LED(ALL_OFF);
delay(2000);
LED(RED);
delay(2000);
LED(YLW);
delay(2000);
LED(GRN);
delay(2000);
LED(ALL_OFF);
}
void loop() {
bool state0;
bool state1;
bool state2;
bool state3;
int gas_OFF;
int state;
if (!digitalRead(OFF_SW)) {
state = 1;
}
else if (!digitalRead(LIGHT_SW)) {
state = 2;
}
else if (!digitalRead(PID_SW)) {
state = 3;
}
switch (state) {
case 1: {
LED (RED);
Serial.println("gas OFF");
myStepper.step(burner_off);
break ;
}
case 2: {
LED(YLW);
Serial.println("light me");
myStepper.step(light_burner);
break;
}
case 3: {
int previous;
val = 70;
do {
LED(GRN);
val = analogRead(PID_IN);
val = map(val, 0, 1023, 0, 200);
// move a number of steps equal to the change in the
// sensor reading
myStepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
Serial.print("PID");
// int val = constrain(val, 250, 1023); // reads the value of the potentiometer (value between 0 and 1023)
//val = map(val, 250, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
int pwr = map(val, 0, 180, 0, 100);
// myservo.write(val); // sets the servo position according to the scaled value
Serial.print("%power = ");
Serial.println(pwr);
default:
Serial.println(" default");
x = digitalRead(3);
} while (x);
break;
}
}
}