uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« on: April 22, 2012, 08:17:29 am » |
hi im really stuck im trying to make a mute button to so when alarm sounds i can mute it with a button, i just cant make it work, any help greatly appreciated thanks // input and alatm circuit, if any inputs are on for more > 30 seconds alarm sounds, mute button to turn off alarm. int inputA = 2; // input a int inputB = 3; // input b int mute = 4; // mute low input int led = 5; // LED on pin 3 int alarm = 6; // alarm sounds int abgood = 7; // healthy a and b inputs made. int abfail = 8; // FAIL a or b failed. int inputaval; // val for reading input a int inputbval; // val for reading input b
boolean running = false;
void setup() { pinMode(inputA, INPUT); //input digitalWrite(inputB, HIGH); //turn on pullup r pinMode(inputB, INPUT); //input digitalWrite(inputB, HIGH); //turn on pullup r pinMode(mute, INPUT); //mute push switch input digitalWrite(mute, HIGH); //turn on pull up r pinMode(led, OUTPUT); //led to show pinMode(alarm, OUTPUT); //alarm circuit. pinMode(abgood, OUTPUT); //lights up green led for healthy status. pinMode(abfail, OUTPUT); //lights up red led for a fail. }
void loop(){ inputaval = digitalRead(inputA); // read input value and store it in val1 inputbval = digitalRead(inputB); // read input value and store it in val2 if ((inputaval == LOW) && (inputbval == LOW)) { delay(1000); digitalWrite(abgood, HIGH); // a and B inputs are healthy. digitalWrite(alarm, LOW); // no alarm digitalWrite(abfail, LOW); // no fail led lit } else{ delay (1000); digitalWrite(alarm, HIGH); // Alarm sounds ****want to MUTE/toggle this output**** digitalWrite(abfail, HIGH); // fail led lit. if (digitalRead(mute) == LOW) // switch is pressed - pullup keeps pin high normally delay(100); // delay to debounce switch running = !running; // toggle running variable digitalWrite(alarm, running); // indicate via LED }}
|
|
|
|
« Last Edit: April 22, 2012, 09:01:00 am by jonisonvespa »
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 311
Posts: 35470
Seattle, WA USA
|
 |
« Reply #1 on: April 22, 2012, 08:54:09 am » |
inputaval = digitalRead(inputa); // read input value and store it in fan1 inputbval = digitalRead(inputb); // read input value and store it in fan2 The code does not do what the comments say. If you are not going to maintain the comments, get rid of them. Incorrect comments are worse than no comments. You'll notice that there are functions like digitalRead, analogWrite(), etc., rather than digitalread and analogwrite. Ever wonder why? It's simple, really. The mixed case makes it much easier to see the words, and to see that you are using the correct function. You should really consider adopting a similar scheme for naming your variables. inputA and inputB are much easier to distinguish than inputa and inputb. But, really, you don't have something connected to the Arduino called an input, do you. Use names that reflect what it attached. Use names for the state of what it attached that reflect what is attached. inputaval is way too vague. When I see code with multiple } on one line, I give up trying to read it. if(thisOrThat) { if(someOtherCondition) { } else { } } is much easier to see the logic of than if(thisOrThat){ if(someOtherCondition){ }else{ }} If you had some names that allowed me to see which pin the mute button was connected to, and some visible logic in the structure of the code, it would be much easier to see where you are going wrong, and to explain what you need to change.
|
|
|
|
|
Logged
|
|
|
|
|
New Jersey
Offline
Edison Member
Karma: 24
Posts: 2345
|
 |
« Reply #2 on: April 22, 2012, 09:04:51 am » |
What is the mute button supposed to do? Mute the alarm while pressed or mute it forever or mute it until the error condition goes away & allow a subsequent alarm to be sounded?
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #3 on: April 22, 2012, 09:06:50 am » |
ok points taken paul will re post using your advice thanks
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #4 on: April 22, 2012, 09:56:07 am » |
hi bill, sorry i wasnt very clear im trying to make it mute until the error goes away, and to allow subsequent alarms to be sounded if the conditions occur thank you
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #5 on: April 22, 2012, 10:06:55 am » |
// input and alatm circuit, if any inputs are on for more > 30 seconds alarm sounds, mute button to turn off alarm. int InputA = 2; // input a int InputB = 3; // input b int Mute = 4; // mute button, low input int Led = 5; // LED on pin 3 int Alarm = 6; // alarm sounds int ABgood = 7; // healthy a and b inputs made. int ABfail = 8; // FAIL a or b failed. int InputAval; // val for reading input a int InputBval; // val for reading input b
boolean running = false;
void setup(){ pinMode(InputA, INPUT); //input a input digitalWrite(InputA, HIGH); //turn on pullup r pinMode(InputB, INPUT); //input b input digitalWrite(InputB, HIGH); //turn on pullup r pinMode(Mute, INPUT); //mute push switch input digitalWrite(Mute, HIGH); //turn on pull up r pinMode(Led, OUTPUT); //led to show pinMode(Alarm, OUTPUT); //alarm circuit. pinMode(ABgood, OUTPUT); //lights up green led for healthy status. pinMode(ABfail, OUTPUT); } //lights up red led for a fail. void loop(){ InputAval = digitalRead(InputA); // read input value and store it in fan1 InputBval = digitalRead(InputB); // read input value and store it in fan2 if ((InputAval == LOW) && (InputBval == LOW)) {delay(1000); digitalWrite(ABgood, HIGH); // a and b inputs are healthy. digitalWrite(Alarm, LOW); // no alarm digitalWrite(ABfail, LOW); // no fail led lit }else{ delay (1000); digitalWrite(Alarm, HIGH); // Alarm sounds ****want to MUTE/toggle this output**** digitalWrite(ABfail, HIGH);} // fail led lit. if (digitalRead(Mute) == LOW) // switch is pressed - pullup keeps pin high normally delay(100); // delay to debounce switch running = !running; // toggle running variable digitalWrite(Alarm, running); } // indicate via LED
yes paul i see what you mean, looks more logical will take on board your advice thank you
|
|
|
|
« Last Edit: April 22, 2012, 10:09:40 am by jonisonvespa »
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 311
Posts: 35470
Seattle, WA USA
|
 |
« Reply #6 on: April 22, 2012, 10:12:16 am » |
looks more logical Really? What does this } match? digitalWrite(Alarm, running); } // indicate via LED Why are you delay()ing only if the switch is pressed? if (digitalRead(Mute) == LOW) // switch is pressed - pullup keeps pin high normally delay(100); // delay to debounce switch
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #7 on: April 24, 2012, 05:08:57 am » |
* * 2 switches monitoring two fans, healthly if both fan1 and fan2 switches are low output switches a relay, if any input high an alarm sounds no output to relay. */ //int muteoutput = 2; // mute buzzer (removes the low in the buz circuit to mute) XXXXX
int Buz = 10; // buzzer sounds if fault int Mute = A2; // mut switch input
int Service = 9; // service switch int Supfanled = 4; // supply fan led int Extfanled = 5; // ext fan led. int Esled = 8; // emergency stop switch led int Relay = 3; // green led lights if fan1 and fan2 are low connected to pin 9. healthey fan1 and fan2 int Gasled = 12; // led to indicate gas is on. int Fanfault = 6; // red led lights if fan 1 or fan2 are high connected to pin 8. (sounds an alarm) int Es = A3; // emergency stop switch input. int Fan2 = A5; // fan switch is connected to pin 3 int Fan1 = A4; // fan switch is connected to pin 2 int Fan1val; // var for reading the pin status int Fan2val; // var for reading the pin status int Esval; // val for reading emergency stop status int Srviceval; // val for service status.
boolean running = false; // *****
void setup(){ Serial.begin(9600); pinMode(Service, INPUT); // service switch on just gas operates nothing else digitalWrite(Service, HIGH); //turn on pulup r pinMode(Supfanled, OUTPUT); // supply fan led o/p pinMode(Extfanled, OUTPUT); // extfan led o/p pinMode(Gasled, OUTPUT); // Greenlled as op. pinMode(Fanfault, OUTPUT); // redled as op. pinMode(Fan1, INPUT); // Set the switch pin as ip. digitalWrite(Fan1, HIGH); // turn on internal r pinMode(Fan2, INPUT); // Set the switch pin as ip. digitalWrite(Fan2, HIGH); // turn on internal r pinMode(Relay, OUTPUT); // Set the switch pin as op. pinMode(Buz, OUTPUT); // Set the switch pin as op. pinMode(Mute, OUTPUT); // Set the switch pin as 1p. pinMode(Es, INPUT); // Set the switch pin as 1p. ***** digitalWrite(Es, HIGH); // turn on pullup r pinMode(Esled, OUTPUT); // Set the switch pin as 1p pinMode(Mute, INPUT); // set the switch pin as ip digitalWrite(Mute, HIGH); // turn on pullup resistor } void loop(){ Fan1val = digitalRead(Fan1); // read input value and store it in fan1 Fan2val = digitalRead(Fan2); // read input value and store it in fan2 Esval = digitalRead(Es); // read estop value and store value if ((Fan1val == LOW) && (Fan2val == LOW) && (Esval == LOW)) { delay (1000); // check if both inputs show fan OK (Switch is pressed) digitalWrite(Gasled, HIGH); // turn green led on. digitalWrite(Relay, HIGH); // turn on gas relay. digitalWrite(Buz,LOW); // buzzer off, no error digitalWrite(Fanfault,LOW); // red led off no fault } else{ delay (1000); digitalWrite(Gasled, LOW); // turn green OFF digitalWrite(Relay, LOW); // turn off relay **** Turn off Relay if fault has been greater than 30 seconds***** digitalWrite(Fanfault, HIGH); // red led on digitalWrite(Buz, HIGH); // Alarm on ****want to toggle this on/off only when fault, with the mute button ******* digitalWrite(Supfanled, Fan1val); //fan1 status led digitalWrite(Extfanled, Fan2val); //fan2 status led digitalWrite(Esled, Esval); //estop status }}
hi, im really struggling with my program and im stuck, all i need to finish my project is to add a mute to my alarm, and a 30 sec delay to my relay. finding it really difficuly to understand mills() to add a delay and boolean to make a mute button, hope someone could help me maby if i see the code it will help understand how these work and help me go faward thank you
|
|
|
|
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 311
Posts: 35470
Seattle, WA USA
|
 |
« Reply #8 on: April 24, 2012, 05:14:20 am » |
Why was it necessary to start a new thread on the same topic? Intelligent use of white space is good. digitalWrite(Mute, HIGH); // turn on pullup resistor } void loop(){ Fan1val = digitalRead(Fan1); // read input value and store it in fan1 Fan2val = digitalRead(Fan2); // read input value and store it in fan2 Esval = digitalRead(Es); // read estop value and store value if ((Fan1val == LOW) && (Fan2val == LOW) && (Esval == LOW)) { delay (1000); // check if both inputs show fan OK (Switch is pressed)
isn't it. Where are you triggering an alarm? Where are you reading the mute switch? Where are you acting on that switch?
|
|
|
|
|
Logged
|
|
|
|
|
Global Moderator
UK
Offline
Brattain Member
Karma: 137
Posts: 19015
I don't think you connected the grounds, Dave.
|
 |
« Reply #9 on: April 24, 2012, 05:17:10 am » |
I thought I was (am?) having a deja vu. They looked to be on the same topic, so I merged them. pinMode(Mute, OUTPUT); // Set the switch pin as 1p. What is a "1p"? (apart from 1/100 th of a pound sterling)
|
|
|
|
« Last Edit: April 24, 2012, 05:19:52 am by AWOL »
|
Logged
|
Pete, it's a fool looks for logic in the chambers of the human heart.
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #10 on: April 24, 2012, 05:22:39 am » |
hi
my alarm is here, is a high output that switches on a buzzer circuit.
digitalWrite(Buz, HIGH); // Alarm on
my mute switch is here, a low in to mute the alarm.
int Mute = A2; // mute switch input
to be honest i really dont know how to act upon the input (mute)
(pinMode(Mute, OUTPUT); // Set the switch pin as 1p.) sorry corrected should be INPUT
|
|
|
|
« Last Edit: April 24, 2012, 05:28:03 am by jonisonvespa »
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 311
Posts: 35470
Seattle, WA USA
|
 |
« Reply #11 on: April 24, 2012, 05:28:57 am » |
my mute switch is here, a low in to mute the alarm. That defines a pin name. There is a lot more to reading the state of the switch than that. You have not defined what the mute switch is to do, when it is to be read, or when the mute effect starts and ends. For instance, on the rare occasions when I watch TV, I mute it when the commercials come on. I unmute it when the commercials end. What do you want to mute? When do you want to mute it? When do you want to stop muting it?
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #12 on: April 24, 2012, 05:34:56 am » |
hi paul
the mute needs to mute (Buz, HIGH); alarm, and finish when, if ((Fan1val == LOW) && (Fan2val == LOW) && (Esval == LOW))
|
|
|
|
« Last Edit: April 24, 2012, 05:42:31 am by jonisonvespa »
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 311
Posts: 35470
Seattle, WA USA
|
 |
« Reply #13 on: April 24, 2012, 05:39:14 am » |
You need a flag (boolean muted = false;). You need to set the value of the flag in appropriate places. Set it to false when the need for muting ends. Set it to true when the mute switch reads LOW.
Then, use the muted flag to decide whether to make the annoying noise, or not.
|
|
|
|
|
Logged
|
|
|
|
|
uk
Offline
Sr. Member
Karma: 0
Posts: 310
|
 |
« Reply #14 on: April 24, 2012, 05:59:10 am » |
hi paul, how do you set the value of the flag in appropriate places?
|
|
|
|
|
Logged
|
|
|
|
|
|