// 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 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; } } }