//works 2/12
#include <Stepper.h>
//propane pid controller 12/28/2023
// change this to the number of steps on your motor
#define STEPS 200
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);//BLU,PUR,YLW,ORN
// the previous reading from the analog input
int previous = 0;
#define light_burner 40 //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 ALL_ON 4
#define RED_LED 6
#define YLW_LED 7
#define GRN_LED 12
#define PID_IN A0
int val=0; // variable to read the value from the analog pin
int state= 1;
void setup() {
Serial.begin(9600);
// set the speed of the motor to 30 RPMs
stepper.setSpeed(30);
state=1;
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);
LED(RED);
delay(1000);
LED(YLW);
delay(1000);
LED(GRN);
delay(1000);
LED(ALL_ON);
delay(3000);
LED(ALL_OFF);
}
void loop() {
enum class PSTATE : uint8_t {
IDLE, // blink disable
LIGHT, // blink enable
PID, // we want the led to be on for interval
};
static PSTATE currstate = PSTATE :: IDLE;
bool state0;
bool state1;
bool state2;
bool x;
bool y;
bool z;
int gas_OFF =0;
//int state;
//state = (state0 | state1 <<1);
x=digitalRead(OFF_SW);
y=digitalRead(LIGHT_SW);
z=digitalRead(PID_SW);
if(!x){
state=1;}
else if (!y){
state = 2;}
else if (!z){
state = 3;}
switch (state){
case 1:{
LED (RED);
Serial.println("OFF");
val=0;
//stepper.step(0);
stepper.step(val - previous);
previous = val;
break ;
}
case 2:{
LED(YLW);
Serial.println("light me");
val=50;
stepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
Serial.print(val);
break;
}
case 3:{
val=70;
LED(GRN);
do {
// Serial.println("PID");
val = analogRead(PID_IN);
val = map(val, 0, 1023, 0, 200); // scale it to use it with the servo (value between 0 and 180)
int pwr = map(val, 102,1023, 100, 0);
// move a number of steps equal to the change in the
// sensor reading
stepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
// sets the servo position according to the scaled value
Serial.print("PID step pos = ");
Serial.println(previous);
//default:
//Serial.println(" default");
x =digitalRead(3);
}while(x);
break;
}
}
}
// 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;
}
case 4:{
digitalWrite(RED_LED, LOW);
digitalWrite(YLW_LED, LOW);
digitalWrite(GRN_LED, LOW);
break;
}
}
}