I have a code that works. My only problem is if someone presses and holds the button it will keep dispensing sodas until they let go. I want the button to only dispense 1 soda at a time.
I have looked at the code that counts the number of buttons pushed, but was wondering if there was something easier.
Is there an easy solution?
Look at the entry for button 1, the other buttons are the same.
Thanks
/*
Relay control for Coke machine
When Button_1 is pushed it will engage relay_1
Relay_1 will stay engaged a minimum of 1000 mSec (to make sure motor turns enough to disengage Motor position switch)
Relay_1 will stay engaged until Motor_1 Position switch is closed
There is a total of 6 buttons
Code will only allow one relay to be engaged at a time.
Motor position switch is closed when can is dispensed, and open when motor is turning.
Motor runs at 115VAC and 2.5 Amps
*/
#define RELAY_ON 0
#define RELAY_OFF 1
// Relay Digital output pin numbers
#define Relay_1 1
#define Relay_2 2
#define Relay_3 3
#define Relay_4 4
#define Relay_5 5
#define Relay_6 6
// Button ( Digital input pin numbers
#define Button_1 7
#define Button_2 8
#define Button_3 9
#define Button_4 10
#define Button_5 11
#define Button_6 12
#define Motor_1 A0
#define Motor_2 A1
#define Motor_3 A2
#define Motor_4 A3
#define Motor_5 A4
#define Motor_6 A5
void setup() /****** SETUP: RUNS ONCE ******/
{
//-------( Initialize Pins so relays are inactive at reset)----
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);
digitalWrite(Relay_4, RELAY_OFF);
digitalWrite(Relay_5, RELAY_OFF);
digitalWrite(Relay_6, RELAY_OFF);
//---(set pins as outputs )----
pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);
pinMode(Relay_5, OUTPUT);
pinMode(Relay_6, OUTPUT);
//---(set pins as Inputs with pull up resistor)----
pinMode(Button_1, INPUT_PULLUP);
pinMode(Button_2, INPUT_PULLUP);
pinMode(Button_3, INPUT_PULLUP);
pinMode(Button_4, INPUT_PULLUP);
pinMode(Button_5, INPUT_PULLUP);
pinMode(Button_6, INPUT_PULLUP);
pinMode(Motor_1, INPUT_PULLUP);
pinMode(Motor_2, INPUT_PULLUP);
pinMode(Motor_3, INPUT_PULLUP);
pinMode(Motor_4, INPUT_PULLUP);
pinMode(Motor_5, INPUT_PULLUP);
pinMode(Motor_6, INPUT_PULLUP);
delay(4000); //Check that all relays are inactive at Reset
}//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
int buttonVal_1 = digitalRead(7);
int buttonVal_2 = digitalRead(8);
int buttonVal_3 = digitalRead(9);
int buttonVal_4 = digitalRead(10);
int buttonVal_5 = digitalRead(11);
int buttonVal_6 = digitalRead(12);
int motorVal_1 = digitalRead(A0);
int motorVal_2 = digitalRead(A1);
int motorVal_3 = digitalRead(A2);
int motorVal_4 = digitalRead(A3);
int motorVal_5 = digitalRead(A4);
int motorVal_6 = digitalRead(A5);
//--- (Button 1) ---
if (buttonVal_1 == LOW) // Button 1 pushed
{digitalWrite(Relay_1, RELAY_ON); // Relay engaged
delay(1000); // let motor turn enough to disengage motor switch
while(digitalRead(Motor_1) == HIGH) // As long as motor switch is disengaged keep relay engaged
digitalWrite(Relay_1, RELAY_ON);}
else {
digitalWrite(Relay_1, RELAY_OFF);} // turn relay off
//--- (Button 2) ---
if (buttonVal_2 == LOW)
{digitalWrite(Relay_2, RELAY_ON);
delay(1000);
while(digitalRead(Motor_2) == HIGH)
digitalWrite(Relay_2, RELAY_ON);}
else {
digitalWrite(Relay_2, RELAY_OFF);}
//--- (Button 3) ---
if (buttonVal_3 == LOW)
{digitalWrite(Relay_3, RELAY_ON);
delay(1000);
while(digitalRead(Motor_3) == HIGH)
digitalWrite(Relay_3, RELAY_ON);}
else {
digitalWrite(Relay_3, RELAY_OFF);}
//--- (Button 4) ---
if (buttonVal_4 == LOW)
{digitalWrite(Relay_4, RELAY_ON);
delay(1000);
while(digitalRead(Motor_4) == HIGH)
digitalWrite(Relay_4, RELAY_ON);}
else {
digitalWrite(Relay_4, RELAY_OFF);}
//--- (Button 5) ---
if (buttonVal_5 == LOW)
{digitalWrite(Relay_5, RELAY_ON);
delay(1000);
while(digitalRead(Motor_5) == HIGH)
digitalWrite(Relay_5, RELAY_ON);}
else {
digitalWrite(Relay_5, RELAY_OFF);}
//--- (Button 6) ---
if (buttonVal_6 == LOW)
{digitalWrite(Relay_6, RELAY_ON);
delay(1000);
while(digitalRead(Motor_6) == HIGH)
digitalWrite(Relay_6, RELAY_ON);}
else {
digitalWrite(Relay_6, RELAY_OFF);}
}//--(end main loop )---