Push "start button" - Get one frosted cupcake in 4 seconds. But darn kids can't wait that long. I need the start button to go dead until the cupcake is frosted and machine returns to base. The machine's timing is controlled by internal button switches (as sensors) so they cannot be dead. My multiple "if/else" are not working. Please help. Do it for the kids
- Mark
// Cupcake Froster – 2016
// Waits for start button to be pushed
// When button pushed, MyServo moves nozzle over
// cupcake and relay1 (motor) opens butterfly valve to
// dispense pressurized frosting
// When full open, sensor1 (button switch) stops relay1
// After 200ms delay - relay2 turns on to close valve
// When closed, sensor2 (button switch) stops relay2
// MyServo moves nozzle back to start position
#include <Servo.h> // this sketch requires Servo Library be loaded
Servo MyServo; // create servo object to control servo
int pos = 0; // variable to store the servo position
// set pin numbers
#define relay1 2
#define relay2 3
const int StartButton = 4; // Start Button
const int OpenSensor = 5; // internal Button to stop open relay
const int CloseSensor = 6; // internal Button to stop close relay
void setup()
{
// attaches the servo on pin 9 to the servo object
MyServo.attach(9);
// initialize relay Pins as output
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
// initialize the pushbutton pins as input
pinMode(StartButton, INPUT);
pinMode(OpenSensor, INPUT);
pinMode(CloseSensor, INPUT);
}
void loop()
{
// hold pushbutton states
int StartButtonState, OpenSensorState, CloseSensorState;
StartButtonState = digitalRead(StartButton);
OpenSensorState = digitalRead(OpenSensor);
CloseSensorState = digitalRead(CloseSensor);
// checks that int relay states are off
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
// What follows is the start button action
if (StartButtonState == LOW) { // start button is pressed
digitalWrite(relay1, LOW); // turn motor on with relay1
MyServo.write(45); // move nozzle over cupcake
// when relay1 full open OpenSensorState goes LOW
if (OpenSensorState == LOW) {
digitalWrite(relay1, HIGH); // stop motor
delay(200); // delay to not hurt motor and tune frosting
digitalWrite(relay2, LOW); // reverse motor to start closing
} else;{
// wait and listen for OpenSendorState to go LOW
}
// motor has been turned around and is closing
if (CloseSensorState == LOW) {
digitalWrite(relay2, HIGH); // stop motor
MyServo.write(0); // move servo to start position
} else;{
// wait and listen for CloseSensorState to go LOW
}
} else {
// do nothing:
}
}