181 lines
3.8 KiB
C++
181 lines
3.8 KiB
C++
#include <TM1637Display.h>
|
|
#include <SPI.h>
|
|
#include <Ethernet.h>
|
|
#include <Servo.h>
|
|
|
|
#define relay_pin 2
|
|
#define servo_pin 6
|
|
#define clock_pin 7
|
|
#define data_pin 8
|
|
#define button_pin 3
|
|
|
|
/**
|
|
* pin | text
|
|
* 2 | light
|
|
* 3 | button
|
|
* 4 | ethernet?
|
|
* 6 | servo audio
|
|
* 7 | clock screen
|
|
* 8 | data screen
|
|
* 10 | ethernet shield
|
|
* 11 | ethernet
|
|
* 12 | ethernet
|
|
* 13 | ethernet
|
|
*/
|
|
|
|
|
|
// Enter a MAC address and IP address for your controller below.
|
|
// The IP address will be dependent on your local network:
|
|
byte mac[] = {
|
|
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
|
|
};
|
|
// the router's gateway address:
|
|
byte gateway[] = { 10, 0, 0, 1 };
|
|
// the subnet:
|
|
byte subnet[] = { 255, 255, 0, 0 };
|
|
|
|
IPAddress ip(10, 3, 1, 1);
|
|
EthernetServer server(7979);//protocoll: [a/l][n/f/t/v] -> audio / light , on / off / toggle / toggle var
|
|
Servo servo;
|
|
TM1637Display display(clock_pin, data_pin);
|
|
|
|
boolean audio_ = false;//stadi
|
|
boolean light_ = false;
|
|
|
|
int pos = 0;//leer klein
|
|
int pos_ = 17;//triggered klein
|
|
|
|
unsigned long dispon = 0;
|
|
boolean isdispon = false;
|
|
|
|
void setup() {
|
|
disabledisp();
|
|
|
|
pinMode(relay_pin, OUTPUT);//relay
|
|
|
|
servo.attach(servo_pin);//servo
|
|
servo.write(pos);//reset servo
|
|
delay(200);
|
|
|
|
// start the Ethernet connection and the server:
|
|
Ethernet.begin(mac, ip, gateway, subnet);
|
|
server.begin();
|
|
}
|
|
|
|
|
|
void loop() {
|
|
handle_screen();
|
|
|
|
// listen for incoming clients
|
|
EthernetClient client = server.available();
|
|
boolean audio = false;
|
|
boolean light = false;
|
|
if (client) {
|
|
// an http request ends with a blank line
|
|
boolean currentLineIsBlank = true;
|
|
while (client.connected()) {
|
|
if (client.available()) {
|
|
char c = client.read();
|
|
|
|
if(c == 'a')//select audio
|
|
audio = true;
|
|
else if(c =='l') //select light
|
|
light = true;
|
|
else if(c == 'n') {//on
|
|
if(audio && !audio_) {//turn audio on
|
|
toggle_audio();
|
|
}
|
|
if(light && !light_) {//turn light on
|
|
toggle_light();
|
|
}
|
|
//reset
|
|
audio = false;
|
|
light = false;
|
|
}else if(c == 'f') {//off
|
|
if(audio && audio_) {//turn audio off
|
|
toggle_audio();
|
|
}
|
|
if(light && light_) {//turn light off
|
|
toggle_light();
|
|
}
|
|
audio = false;
|
|
light = false;
|
|
}else if( c == 't') {//toggle
|
|
if(audio) {//togle audio
|
|
toggle_audio();
|
|
}
|
|
if(light) {//toggle light
|
|
toggle_light();
|
|
}
|
|
audio = false;
|
|
light = false;
|
|
}else if(c == 'v') {//toggle var
|
|
if(audio)
|
|
audio_ = !audio_;
|
|
if(light)
|
|
light_ = !light_;
|
|
audio = false;
|
|
light = false;
|
|
} else {
|
|
//client.print("FAILED");
|
|
}
|
|
//client.print("OK");
|
|
//client.flush();
|
|
}
|
|
}
|
|
// give the client time to receive the data
|
|
delay(15);
|
|
// close the connection:
|
|
client.stop();
|
|
//Ethernet.maintain();
|
|
}
|
|
}
|
|
|
|
|
|
void handle_screen() {
|
|
if(digitalRead(button_pin)) {
|
|
dispon = millis();
|
|
}
|
|
|
|
|
|
if((millis() - dispon)/1000 < 5) {
|
|
//diplay on
|
|
if(!isdispon)//falls es noch nicht on ist
|
|
enabledisp();
|
|
|
|
|
|
} else {
|
|
//display off
|
|
if(isdispon)//falls es noch nicht off ist
|
|
disabledisp();
|
|
}
|
|
}
|
|
|
|
void enabledisp() {
|
|
//set light
|
|
display.setBrightness(0x0f);
|
|
dispon = true;
|
|
}
|
|
void disabledisp() {
|
|
//set dark
|
|
display.setBrightness(0x00);
|
|
dispon = false;
|
|
}
|
|
|
|
void toggle_audio() {
|
|
servo.write(pos_);//kleiner (stereo anlage)
|
|
delay(200);
|
|
servo.write(pos);//reset kleine
|
|
audio_ = !audio_;
|
|
}
|
|
|
|
void toggle_light() {
|
|
light_ = !light_;
|
|
if(light_)
|
|
digitalWrite(relay_pin, HIGH);
|
|
else
|
|
digitalWrite(relay_pin, LOW);
|
|
}
|
|
|
|
|