From cbef1cc2ff3d9cfd17ebaad5098096aa0bdb4414 Mon Sep 17 00:00:00 2001 From: Tilman Date: Sun, 10 May 2020 15:56:45 +0200 Subject: [PATCH] =?UTF-8?q?Garage=20-=20speicheroptimiert=20f=C3=BCr=20ATM?= =?UTF-8?q?EGA328P?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Garage_-_Nano_Micro_-_Lichtschranke.ino | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 garage/Garage_-_Nano_Micro_-_Lichtschranke/Garage_-_Nano_Micro_-_Lichtschranke.ino diff --git a/garage/Garage_-_Nano_Micro_-_Lichtschranke/Garage_-_Nano_Micro_-_Lichtschranke.ino b/garage/Garage_-_Nano_Micro_-_Lichtschranke/Garage_-_Nano_Micro_-_Lichtschranke.ino new file mode 100644 index 0000000..79ddfa4 --- /dev/null +++ b/garage/Garage_-_Nano_Micro_-_Lichtschranke/Garage_-_Nano_Micro_-_Lichtschranke.ino @@ -0,0 +1,213 @@ +#include +#include + +// Enter a MAC address and IP address for your controller below. +byte mac[] = {0xA4, 0xDA, 0x49, 0xB8, 0x19, 0xA5}; +IPAddress ip(192, 168, 178, 52); +EthernetServer server(80); + +const int remotePin = 2; +const int motorPin = 3; + +const int ledPin = 5; + +const int remoteButton = 6; +const int motorButton = 7; + +const int sensorPin = A0; + +const int clickDelay = 500; + +void setup() { + Serial.begin(9600); + +/* // Check PINs + Serial.print("MISO: "); + Serial.println(PIN_SPI_MISO); + Serial.print("MOSI: "); + Serial.println(PIN_SPI_MOSI); + Serial.print("SCK: "); + Serial.println(PIN_SPI_SCK); + Serial.print("SS: "); + Serial.println(PIN_SPI_SS);*/ + + pinMode(remotePin, OUTPUT); + pinMode(motorPin, OUTPUT); + pinMode(ledPin, OUTPUT); + pinMode(remoteButton, INPUT); + pinMode(motorButton, INPUT); + + // disable SD card if one in the slot + pinMode(4, OUTPUT); + digitalWrite(4, HIGH); + +// Serial.println("Starting ethernet"); + Ethernet.begin(mac, ip); + +// Serial.println(Ethernet.localIP()); + +// Serial.println("init complete"); +} + +void loop() { + if (digitalRead(remoteButton) == HIGH) { +// Serial.println("Remote button pressed"); + triggerRemote(); + } + + if (digitalRead(motorButton) == HIGH) { +// Serial.println("Motor button pressed"); + triggerMotor(); + } + + // listen for incoming clients + EthernetClient client = server.available(); + if (client) { +// Serial.println("new client"); + // an http request ends with a blank line + bool currentLineIsBlank = true; + + byte trigger = 0; + int sensorValue = 0; + char uri[64]; + byte idx = 0; + boolean uriLine = false; + + while (client.connected()) { + if (client.available()) { + char c = client.read(); + + if (currentLineIsBlank && c == 'G') { + uriLine = true; + uri[idx] = c; + idx++; + } + else if (uriLine) { + if (c == '\n') { + uriLine = false; + uri[idx] = '\0'; + } + else { + uri[idx] = c; + idx++; + } + } + +// Serial.write(c); + // if you've gotten to the end of the line (received a newline + // character) and the line is blank, the http request has ended, + // so you can send a reply + if (c == '\n' && currentLineIsBlank) { + // send a standard http response header + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: text/plain"); + client.println("Connection: close"); // the connection will be closed after completion of the response + client.println(); + if (uri[4] == '/' && uri[5] == 'r' && uri[6] == ' ') { + client.println("trigger remote"); + trigger = 1; + } + else if (uri[4] == '/' && uri[5] == 'm' && uri[6] == ' ') { + client.println("trigger motor"); + trigger = 2; + } + else if (uri[4] == '/' && uri[5] == 'a' && uri[6] == ' ') { + client.println("trigger all"); + trigger = 3; + } + else if (uri[4] == '/' && uri[5] == 'o' && uri[6] == ' ') { + // check if open + if (sensorValue > 512) { + client.println("closed, opening now"); + trigger = 2; + } + else { + client.println("already open"); + } + } + else if (uri[4] == '/' && uri[5] == 'c' && uri[6] == ' ') { + // check if open + if (sensorValue > 512) { + client.println("already closed"); + } + else { + client.println("open, closing now"); + trigger = 2; + } + } + else if (uri[4] == '/' && uri[5] == 's' && uri[6] == ' ') { + sensorValue = analogRead(sensorPin); + + if (sensorValue > 512) { + client.println("true"); + } + else { + client.println("false"); + } + } + else if (uri[4] == '/' && uri[5] == 'p' && uri[6] == ' ') { + client.println("ping"); + } + else { + client.println("not found"); + } + break; + } + if (c == '\n') { + // you're starting a new line + currentLineIsBlank = true; + } else if (c != '\r') { + // you've gotten a character on the current line + currentLineIsBlank = false; + } + } + } + // give the web browser time to receive the data + delay(1); + // close the connection: + client.stop(); +// Serial.println("client disconnected"); + + if (trigger == 1) { + triggerRemote(); + } + else if (trigger == 2) { + triggerMotor(); + } + else if (trigger == 3) { + triggerAll(); + } + + trigger = 0; + } + +} + +void triggerRemote() { +// Serial.println("triggerRemote"); + digitalWrite(remotePin, HIGH); + digitalWrite(ledPin, HIGH); + delay(clickDelay); + digitalWrite(remotePin, LOW); + digitalWrite(ledPin, LOW); +} + +void triggerMotor() { +// Serial.println("triggerMotor"); + digitalWrite(motorPin, HIGH); + digitalWrite(ledPin, HIGH); + delay(clickDelay); + digitalWrite(motorPin, LOW); + digitalWrite(ledPin, LOW); +} + +void triggerAll() { +// Serial.println("triggerAll"); + digitalWrite(remotePin, HIGH); + digitalWrite(motorPin, HIGH); + digitalWrite(ledPin, HIGH); + delay(clickDelay); + digitalWrite(remotePin, LOW); + digitalWrite(motorPin, LOW); + digitalWrite(ledPin, LOW); +}