Hallo,
ich habe mir mit einem Arduino Uno eine Türklingel gebaut, die dann bei mir im Haus bestimmte Telefone klingeln lässt.
An der Haustüre sind ganz normale Klingeltaster, die mir dann das Signal auf einen Digitalen Port geben.
Grundsätzlich funktioniert das ganze auch - allerdings hab ich zwei "kleine" Probleme mit meinem Code.
-
Nachdem die Klingel einmal gedrückt wurde, passiert nichts mehr wenn sie danach ein zweites Mal drücken lässt.
Hier habe ich allerdings Abhilfe geschafft, indem ich den Arduino Softwaremäßig nachdem er seine Aktionen ausgeführt hat, neu starten lasse.
(Vielleicht ist das auch der Grund für Problem #2, aber ich fand das war in dem Moment die einfachste Quick&Dirty-Lösung um die Klingel erst einmal zum laufen zu bekommen.) -
Anscheinend geht der Arduino in eine Art Standby-Modus, da mir folgendes aufgefallen ist:
Ich habe Abends die Klingel getestet => hat problemlos funktioniert.
Dann habe ich frühs die Klingel wieder gedrückt => nichts ist passiert.
Daraufhin habe ich ein zweites Mal gedrückt und das Telefon hat geklingelt.
=> Es scheint also, wie wenn der Arduino nach irgendeiner bestimmten Zeit in eine Art Standbymodus geht, durch den 1. Druck auf die Taste aufwacht und beim zweiten Druck erst seine Aktionen auslöst.
Das ist natürlich nicht so ganz Sinn der Sache, da das ja der User nicht weiß.
#include <Ethernet.h>
#include <SPI.h>
#include <avr/wdt.h>
byte server[] = { 192,168,2,230 };
String getURL = "/tuerklingel/arduino_call.php HTTP/1.0";
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
void setup() {
Ethernet.begin(mac);
client.connect(server, 80);
pinMode(1, OUTPUT);
}
void loop() {
if(digitalRead(1) == HIGH) {
client.print("GET ");
client.println(getURL);
client.println();
delay(1000);
// Hier wird der Arduino neu gestartet
cli();
wdt_enable(WDTO_15MS);
while(1);
}
}