123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include <SPI.h>
- #include <Ethernet.h>
- #include <RCSwitch.h>
- byte mac[] = {0xDE, 0xAD, 0xBE, 0xAA, 0xDE, 0x01};
- IPAddress ip(192,168,2,114);
- const int serverPort = 2313;
- const int senderPin = 6;
- const int requestBufferLength = 16;
- const int attemptsCount = 3;
- EthernetServer server(serverPort);
- RCSwitch sender = RCSwitch();
- char requestBuffer[requestBufferLength];
- void setup()
- {
- Serial.begin(9600);
-
- sender.enableTransmit(senderPin);
- Serial.println("transmission enabled");
-
- Ethernet.begin(mac, ip);
- server.begin();
-
- Serial.print("started ardvindo server at ");
- Serial.print(Ethernet.localIP());
- Serial.print(":");
- Serial.println(serverPort);
- }
- void errorResponse(EthernetClient& client, const char* cmd, const char* msg)
- {
- Serial.print("error: ");
- Serial.println(msg);
-
- client.print("cmd: ");
- client.println(cmd);
- client.print("error: ");
- client.println(msg);
- }
- void processCmd(EthernetClient& client, const char* cmd)
- {
- if(cmd[0] == 'e' || cmd[0] == 'd') {
- char family = requestBuffer[2];
- int group = requestBuffer[4] - '0';
- int device = requestBuffer[6] - '0';
-
- if(family < 'a' || family > 'f') {
- errorResponse(client, cmd, "error: family < 'a' || family > 'f'");
- } else if(group < 0) {
- errorResponse(client, cmd, "group < 0");
- } else if(device < 0) {
- errorResponse(client, cmd, "device < 0");
- } else {
- bool on = (requestBuffer[0] == 'e');
-
- for(int i = 0; i < attemptsCount; i++) {
- if(on) {
- sender.switchOn(family, group, device);
- } else {
- sender.switchOff(family, group, device);
- }
- delay(1);
- }
-
- client.print(family);
- client.print(" ");
- client.print(group);
- client.print(" ");
- client.print(device);
- client.print(" ");
- if(on) {
- client.println("switched on");
- Serial.println("switched on");
- } else {
- client.println("switched off");
- Serial.println("switched off");
- }
-
- //sender.switchOn('b', 3, 2);
- //delay(1500);
- //sender.switchOff('b', 3, 2);
- }
- } else {
- errorResponse(client, cmd, "unknown command");
- }
- }
- void loop()
- {
- EthernetClient client = server.available();
- if (client) {
- Serial.println("client connected");
-
- client.println("ardvindo");
-
- while(client.connected()) {
- if(client.available()) {
- for(int i=0; i<requestBufferLength && client.available(); i++) {
- char c = client.read();
- if(c == '\n') {
- break;
- }
- requestBuffer[i] = c;
- requestBuffer[i+1] = '\0';
- }
- Serial.print("> ");
- Serial.println(requestBuffer);
- processCmd(client, requestBuffer);
- }
- }
-
- delay(1);
- client.stop();
-
- Serial.println("client disonnected");
- }
- }
|