179 lines
4.4 KiB
C++
179 lines
4.4 KiB
C++
/*
|
|
Blink
|
|
|
|
Turns an LED on for one second, then off for one second, repeatedly.
|
|
|
|
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
|
|
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
|
|
the correct LED pin independent of which board is used.
|
|
If you want to know what pin the on-board LED is connected to on your Arduino
|
|
model, check the Technical Specs of your board at:
|
|
https://www.arduino.cc/en/Main/Products
|
|
|
|
modified 8 May 2014
|
|
by Scott Fitzgerald
|
|
modified 2 Sep 2016
|
|
by Arturo Guadalupi
|
|
modified 8 Sep 2016
|
|
by Colby Newman
|
|
|
|
This example code is in the public domain.
|
|
|
|
http://www.arduino.cc/en/Tutorial/Blink
|
|
*/
|
|
|
|
#define RELAY1 2
|
|
#define RELAY2 3
|
|
#define RELAY3 4
|
|
#define RELAY4 5
|
|
unsigned int relay[4] = { RELAY1, RELAY2, RELAY3, RELAY4 };
|
|
|
|
#define BUTTON1 6
|
|
#define BUTTON2 7
|
|
#define BUTTON3 8
|
|
#define BUTTON4 9
|
|
unsigned int button[4] = { BUTTON1, BUTTON2, BUTTON3, BUTTON4 };
|
|
|
|
#define OPTO1 10
|
|
|
|
|
|
boolean relayState[4];
|
|
boolean buttonState[4];
|
|
boolean buttonLastState[4];
|
|
boolean buttonPressed[4];
|
|
boolean optoState;
|
|
|
|
|
|
|
|
String inString;
|
|
|
|
// the setup function runs once when you press reset or power the board
|
|
void setup() {
|
|
// initialize digital pin LED_BUILTIN as an output.
|
|
pinMode(LED_BUILTIN, OUTPUT);
|
|
|
|
pinMode(RELAY1, OUTPUT);
|
|
pinMode(RELAY2, OUTPUT);
|
|
pinMode(RELAY3, OUTPUT);
|
|
pinMode(RELAY4, OUTPUT);
|
|
|
|
pinMode(OPTO1, OUTPUT);
|
|
|
|
pinMode(BUTTON1, INPUT_PULLUP);
|
|
pinMode(BUTTON2, INPUT_PULLUP);
|
|
pinMode(BUTTON3, INPUT_PULLUP);
|
|
pinMode(BUTTON4, INPUT_PULLUP);
|
|
|
|
digitalWrite(RELAY1, HIGH);
|
|
digitalWrite(RELAY2, HIGH);
|
|
digitalWrite(RELAY3, HIGH);
|
|
digitalWrite(RELAY4, HIGH);
|
|
|
|
digitalWrite(OPTO1, LOW);
|
|
|
|
Serial.begin(9600);
|
|
while (!Serial) {
|
|
; // wait for serial port to connect. Needed for native USB port only
|
|
}
|
|
|
|
|
|
optoState = false;
|
|
for (int i=0;i<4;i++){
|
|
buttonState[i] = digitalRead(button[i]);
|
|
buttonLastState[i] = buttonState[i];
|
|
|
|
relayState[i] = false;
|
|
}
|
|
}
|
|
|
|
// the loop function runs over and over again forever
|
|
void loop() {
|
|
|
|
|
|
for (int i=0;i<4;i++){
|
|
|
|
//generate the button states...
|
|
//Button i press
|
|
buttonState[i] = digitalRead(button[i]);
|
|
if ((buttonState[i] != buttonLastState[i]) && (buttonState[i] == LOW)){
|
|
buttonPressed[i] = true;
|
|
} else {
|
|
buttonPressed[i] = false;
|
|
}
|
|
buttonLastState[i] = buttonState[i];
|
|
|
|
//invert relay if button i is pressed:
|
|
|
|
if (buttonPressed[i]){
|
|
if (relayState[i] == false){
|
|
Serial.print("Command executed: RELAY");Serial.print(i+1);Serial.println("=ON");
|
|
digitalWrite(relay[i], LOW);
|
|
relayState[i] = true;
|
|
} else {
|
|
Serial.print("Command executed: RELAY");Serial.print(i+1);Serial.println("=OFF");
|
|
digitalWrite(relay[i], HIGH);
|
|
relayState[i] = false;
|
|
}
|
|
delay(250);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//check for new command...
|
|
if (Serial.available() > 0) {
|
|
// get incoming byte:
|
|
inString = Serial.readString();
|
|
Serial.print("Command executed: ");
|
|
Serial.print(inString);
|
|
|
|
if (inString.indexOf("LED=ON") >= 0){
|
|
digitalWrite(LED_BUILTIN, HIGH);
|
|
} else
|
|
if (inString.indexOf("LED=OFF") >= 0){
|
|
digitalWrite(LED_BUILTIN, LOW);
|
|
} else
|
|
if (inString.indexOf("RELAY1=ON") >= 0){
|
|
digitalWrite(RELAY1, LOW);
|
|
relayState[0] = true;
|
|
} else
|
|
if (inString.indexOf("RELAY1=OFF") >= 0){
|
|
digitalWrite(RELAY1, HIGH);
|
|
relayState[0] = false;
|
|
} else
|
|
if (inString.indexOf("RELAY2=ON") >= 0){
|
|
digitalWrite(RELAY2, LOW);
|
|
relayState[1] = true;
|
|
} else
|
|
if (inString.indexOf("RELAY2=OFF") >= 0){
|
|
digitalWrite(RELAY2, HIGH);
|
|
relayState[1] = false;
|
|
} else
|
|
if (inString.indexOf("RELAY3=ON") >= 0){
|
|
digitalWrite(RELAY3, LOW);
|
|
relayState[2] = true;
|
|
} else
|
|
if (inString.indexOf("RELAY3=OFF") >= 0){
|
|
digitalWrite(RELAY3, HIGH);
|
|
relayState[2] = false;
|
|
} else
|
|
if (inString.indexOf("RELAY4=ON") >= 0){
|
|
digitalWrite(RELAY4, LOW);
|
|
relayState[3] = true;
|
|
} else
|
|
if (inString.indexOf("RELAY4=OFF") >= 0){
|
|
digitalWrite(RELAY4, HIGH);
|
|
relayState[3] = false;
|
|
} else
|
|
if (inString.indexOf("OPTO1=ON") >= 0){
|
|
digitalWrite(OPTO1, HIGH);
|
|
optoState = true;
|
|
} else
|
|
if (inString.indexOf("OPTO1=OFF") >= 0){
|
|
digitalWrite(OPTO1, LOW);
|
|
optoState = false;
|
|
}
|
|
}
|
|
}
|