dave0000011111:
void loop()
{
if (digitalRead(BUTTON)== LOW &&(digitalRead(BRAKE)) == HIGH)
digitalWrite(RELAY1,LOW),delay(1000),digitalWrite(RELAY1,HIGH);
else (digitalWrite(RELAY1,HIGH));
if (digitalRead(BUTTON)== HIGH &&(digitalRead(BRAKE)) == HIGH)
digitalWrite(RELAY2,LOW),delay(1000),digitalWrite(RELAY2,HIGH);
else (digitalWrite(RELAY2,HIGH));
}
Arrgh! Arrgh! Comma operator!
It works, but please don't do this. USe statement blocks.
void loop()
{
if (digitalRead(BUTTON)== LOW &&(digitalRead(BRAKE)) == HIGH) {
digitalWrite(RELAY1,LOW);
delay(1000);
digitalWrite(RELAY1,HIGH);
}
else {
digitalWrite(RELAY1,HIGH);
}
if (digitalRead(BUTTON)== HIGH &&(digitalRead(BRAKE)) == HIGH) {
digitalWrite(RELAY2,LOW);
delay(1000);
digitalWrite(RELAY2,HIGH);
}
else {
digitalWrite(RELAY2,HIGH);
}
}
Now notice that whichever branch of the if executes, you do the same thing when you are done.
That means this can be simplified to
void loop()
{
if (digitalRead(BUTTON) == LOW && digitalRead(BRAKE) == HIGH) {
digitalWrite(RELAY1,LOW);
delay(1000);
}
digitalWrite(RELAY1,HIGH);
if (digitalRead(BUTTON) == HIGH && digitalRead(BRAKE) == HIGH) {
digitalWrite(RELAY2,LOW);
delay(1000);
}
digitalWrite(RELAY2,HIGH);
}
But notice the condition? There's a common thing there:
void loop()
{
if (digitalRead(BRAKE) == HIGH) {
if (digitalRead(BUTTON) == LOW) {
digitalWrite(RELAY1,LOW);
delay(1000);
digitalWrite(RELAY1,HIGH);
}
else {
digitalWrite(RELAY2,LOW);
delay(1000);
digitalWrite(RELAY2,HIGH);
}
}
}
Now, this doesn't do exactly the same thing as the previous code - it doesn't explicitly set your relays to HIGH even if they don't need to be. But by looking at what your code does, it will probably do the same.
In any case, we can get this down event further.
void loop()
{
if (digitalRead(BRAKE) == HIGH) {
byte relay = (digitalRead(BUTTON) == LOW) ? RELAY1 : RELAY2;
digitalWrite(relay,LOW);
delay(1000);
digitalWrite(relay,HIGH);
}
}
The goal isn't to make the code shorter just for the sake of making it shorter. It's to make clearer what you are trying to do. "If the brake is on, brake relay1 or relay2 for one second, depending on how the button is set."
A common convention in arduino sketches is to do all of your reading of inputs in one spot. So the sketch becomes:
void loop()
{
const boolean brake = digitalRead(BRAKE) == HIGH;
const boolean button = digitalRead(BUTTON) == HIGH;
if (brake) {
const byte relay = button ? RELAY2 : RELAY1;
digitalWrite(relay,LOW);
delay(1000);
digitalWrite(relay,HIGH);
}
}