79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			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;
 | |
|     }
 | |
|   }
 | |
| }
 |