arduino-8-relay/arduino-8-relay.ino

79 lines
2.2 KiB
C++

// 8-channel relay on arduino serial control with permanent led blinking
// v0.1 under dwtwl 2.55
// ch1 = pin2; ch2 = pin3; ch3 = pin4; ch4 = pin5;
// ch5 = pin6; ch6 = pin7; ch7 = pin8; ch8 = pin9; led = pin13;
// send: switch on = 1X; switch off = 2X; get status = 3X;
// codes: in = init; eX = enabled; dX = disabled; tX = power on; fX = off;
#include <Thread.h>
Thread ledThread = Thread();
int incomingNumber = 0;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
for(int i=2;i<10;i++){
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
Serial.println("in");
ledThread.onRun(ledBlink);
ledThread.setInterval(1000);
}
void ledBlink() {
static bool ledStatus = false;
ledStatus = !ledStatus;
digitalWrite(13, ledStatus);
}
void loop() {
// Thread init:
if (ledThread.shouldRun())
ledThread.run();
if (Serial.available() > 0) {
int incomingByte = Serial.read()-48;
if (incomingByte>=0 && incomingByte<=9) {
incomingNumber=incomingNumber*10+incomingByte;
} else {
if (incomingNumber>=10 && incomingNumber<=19) {
delay(500);
int currentPin = incomingNumber - 9;
char currentChannel[] = "e0";
currentChannel[1] = '0' + (currentPin - 1);
digitalWrite(currentPin, LOW);
Serial.println(currentChannel);
delay(500);
}
if (incomingNumber>=20 && incomingNumber<=29) {
delay(500);
int currentPin = incomingNumber - 19;
char currentChannel[] = "d0";
currentChannel[1] = '0' + (currentPin - 1);
digitalWrite(currentPin, HIGH);
Serial.println(currentChannel);
delay(500);
}
if (incomingNumber>=30 && incomingNumber<=39) {
delay(500);
int currentPin = incomingNumber - 29;
if (digitalRead(currentPin)==HIGH) {
char currentChannel[] = "f0";
currentChannel[1] = '0' + (currentPin - 1);
Serial.println(currentChannel);
} else {
char currentChannel[] = "t0";
currentChannel[1] = '0' + (currentPin - 1);
Serial.println(currentChannel);
}
delay(500);
}
incomingNumber = 0;
}
}
}