first commit
This commit is contained in:
commit
cf24866498
5 changed files with 255 additions and 0 deletions
37
README.md
Normal file
37
README.md
Normal file
|
@ -0,0 +1,37 @@
|
|||
# LED Annunciator
|
||||
A quick and dirty little device to inform people you are on the phone or in an
|
||||
appointment with a traffic light. The state information are generated by a
|
||||
groupware or messaging application that writes a single letter code into a file.
|
||||
|
||||
| Command | Meaning |
|
||||
|---------|---------------------------|
|
||||
| a | Turn on all leds |
|
||||
| 0 | Turn off all leds |
|
||||
| r | Switch to the red line |
|
||||
| g | Switch to the green line |
|
||||
| y | Switch to the yellow line |
|
||||
|
||||
AnnunciatorServer takes the code and sends it via serial port to the device.
|
||||
Alternatively, similar commands can be send by an infrared remote control.
|
||||
|
||||
## Hardware
|
||||
An Arduino Nano with nine leds on pins D02 - D10. The leds are arranged in three
|
||||
rows (red, yellow, green) of three leds each.
|
||||
A YS1838B infrared receiver is connected to D11 and sits on top facing
|
||||
backwards.
|
||||
|
||||
## Software
|
||||
### led-annunciator
|
||||
The Arduino code.
|
||||
|
||||
### checkLedPins
|
||||
A program to check the led/pin mapping by turning them on one by one.
|
||||
|
||||
### annunciatorServer
|
||||
The shell script that checks a commandfile and sends single-character
|
||||
commands to the serial port.
|
||||
This is useful when the commandfile needs to sit on a network share.
|
||||
|
||||
## Room for improvements
|
||||
- Sometimes the ir receiver starts to send random codes
|
||||
- As all leds are connected individually, many more commands can be defined.
|
23
annunciatorServer/annunciatorServer.sh
Executable file
23
annunciatorServer/annunciatorServer.sh
Executable file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
|
||||
port=/dev/ttyUSB0
|
||||
cmdfile=~/annunciatorServer.txt
|
||||
|
||||
## Setup serial port
|
||||
stty -F $port ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -hupcl
|
||||
|
||||
## Setup files
|
||||
touch $cmdfile
|
||||
|
||||
## Monitor file for new commands
|
||||
while true
|
||||
do
|
||||
incmd=$(head -c 1 $cmdfile)
|
||||
if [ _$incmd != _ ]
|
||||
then
|
||||
echo $incmd > $port
|
||||
> $cmdfile
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
47
checkLedPins/checkLedPins.ino
Normal file
47
checkLedPins/checkLedPins.ino
Normal file
|
@ -0,0 +1,47 @@
|
|||
// Pins
|
||||
int r1 = 5; // Rot 1 an Pin 5
|
||||
int r2 = 6; // Rot 2 an Pin 6
|
||||
int r3 = 4; // Rot 3 an Pin 4
|
||||
int y1 = 7; // Gelb 1 an Pin 7
|
||||
int y2 = 9; // Gelb 2 an Pin 9
|
||||
int y3 = 8; // Gelb 3 an Pin 8
|
||||
int g1 = 2; // Grün 1 an Pin 2
|
||||
int g2 = 10; // Grün 2 an Pin 10
|
||||
int g3 = 3; // Grün 3 an Pin 3
|
||||
int ir = 11; // IR Empfänger an Pin 11
|
||||
|
||||
void setup() {
|
||||
pinMode(r1, OUTPUT);
|
||||
pinMode(r2, OUTPUT);
|
||||
pinMode(r3, OUTPUT);
|
||||
pinMode(y1, OUTPUT);
|
||||
pinMode(y2, OUTPUT);
|
||||
pinMode(y3, OUTPUT);
|
||||
pinMode(g1, OUTPUT);
|
||||
pinMode(g2, OUTPUT);
|
||||
pinMode(g3, OUTPUT);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
for (int i = 2; i <= 10; i++) {
|
||||
digitalWrite(i, LOW);
|
||||
}
|
||||
digitalWrite(r1, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(r2, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(r3, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(y1, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(y2, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(y3, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(g1, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(g2, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(g3, HIGH);
|
||||
delay(5000);
|
||||
}
|
119
led-annunciator/led-annunciator.ino
Normal file
119
led-annunciator/led-annunciator.ino
Normal file
|
@ -0,0 +1,119 @@
|
|||
|
||||
|
||||
// Pins
|
||||
int r1 = 5; // Rot 1 an Pin 5
|
||||
int r2 = 6; // Rot 2 an Pin 6
|
||||
int r3 = 4; // Rot 3 an Pin 4
|
||||
int y1 = 7; // Gelb 1 an Pin 7
|
||||
int y2 = 9; // Gelb 2 an Pin 9
|
||||
int y3 = 8; // Gelb 3 an Pin 8
|
||||
int g1 = 2; // Grün 1 an Pin 2
|
||||
int g2 = 10; // Grün 2 an Pin 10
|
||||
int g3 = 3; // Grün 3 an Pin 3
|
||||
int ir = 11; // IR receiver an Pin 11
|
||||
|
||||
// Prepare ir device
|
||||
#include <IRremote.h>
|
||||
IRrecv irrecv(ir);
|
||||
decode_results results;
|
||||
|
||||
void setup() {
|
||||
// LED Pins
|
||||
pinMode(r1, OUTPUT);
|
||||
pinMode(r2, OUTPUT);
|
||||
pinMode(r3, OUTPUT);
|
||||
pinMode(y1, OUTPUT);
|
||||
pinMode(y2, OUTPUT);
|
||||
pinMode(y3, OUTPUT);
|
||||
pinMode(g1, OUTPUT);
|
||||
pinMode(g2, OUTPUT);
|
||||
pinMode(g3, OUTPUT);
|
||||
pinMode(ir, INPUT);
|
||||
|
||||
// IR Receiver
|
||||
irrecv.enableIRIn(); // Activate IR Pin
|
||||
|
||||
// Serielle Schnittstelle
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
|
||||
void loop() {
|
||||
|
||||
// SERIAL
|
||||
while (Serial.available()) {
|
||||
String rcv_sr = Serial.readString();
|
||||
|
||||
// Send data to serial port
|
||||
Serial.println("RX serial: " + rcv_sr);
|
||||
|
||||
// Switch LEDs
|
||||
switch (rcv_sr[0]) {
|
||||
case 'g' :
|
||||
led_allOff();
|
||||
led_greenLine();
|
||||
break;
|
||||
|
||||
case 'a' :
|
||||
led_greenLine();
|
||||
led_redLine();
|
||||
led_yllwLine();
|
||||
break;
|
||||
|
||||
case 'y' :
|
||||
led_allOff();
|
||||
led_yllwLine();
|
||||
break;
|
||||
|
||||
case 'r' :
|
||||
led_allOff();
|
||||
led_redLine();
|
||||
break;
|
||||
|
||||
case '0' :
|
||||
led_allOff();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// IR
|
||||
if (irrecv.decode(&results)) {
|
||||
int rcv_ir = results.value;
|
||||
|
||||
// Send data to serial port
|
||||
Serial.println("RX ir: " + String(rcv_ir));
|
||||
|
||||
// Switch LEDs
|
||||
switch (rcv_ir) {
|
||||
case -23971 : //Taste 1
|
||||
led_allOff();
|
||||
led_greenLine();
|
||||
break;
|
||||
|
||||
case 25245 : //Taste 2
|
||||
led_allOff();
|
||||
led_yllwLine();
|
||||
break;
|
||||
|
||||
case -7651 : //Taste 2
|
||||
led_allOff();
|
||||
led_redLine();
|
||||
break;
|
||||
|
||||
case 26775 : //Taste 0
|
||||
led_allOff();
|
||||
break;
|
||||
|
||||
case -26521 : //Taste +100
|
||||
led_greenLine();
|
||||
led_redLine();
|
||||
led_yllwLine();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// ReArm IR
|
||||
irrecv.resume();
|
||||
}
|
||||
}
|
29
led-annunciator/led_commands.ino
Normal file
29
led-annunciator/led_commands.ino
Normal file
|
@ -0,0 +1,29 @@
|
|||
void led_allOff() {
|
||||
digitalWrite (r1, LOW);
|
||||
digitalWrite (r2, LOW);
|
||||
digitalWrite (r3, LOW);
|
||||
digitalWrite (g1, LOW);
|
||||
digitalWrite (g2, LOW);
|
||||
digitalWrite (g3, LOW);
|
||||
digitalWrite (y1, LOW);
|
||||
digitalWrite (y2, LOW);
|
||||
digitalWrite (y3, LOW);
|
||||
}
|
||||
|
||||
void led_redLine() {
|
||||
digitalWrite (r1, HIGH);
|
||||
digitalWrite (r2, HIGH);
|
||||
digitalWrite (r3, HIGH);
|
||||
}
|
||||
|
||||
void led_yllwLine() {
|
||||
digitalWrite (y1, HIGH);
|
||||
digitalWrite (y2, HIGH);
|
||||
digitalWrite (y3, HIGH);
|
||||
}
|
||||
|
||||
void led_greenLine() {
|
||||
digitalWrite (g1, HIGH);
|
||||
digitalWrite (g2, HIGH);
|
||||
digitalWrite (g3, HIGH);
|
||||
}
|
Loading…
Reference in a new issue