Standby und Ethernetprobleme


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.

1. 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.)

2. 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 ganz sinn der sache, da das ja der user nicht weiß.



code: [select]
#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);
  }
}


1. nachdem die klingel einmal gedrückt wurde, passiert nichts mehr wenn sie danach ein zweites mal drücken lässt.


mit für einem server verbindest du dich mit der zeile:
  client.connect(server, 80);
sieht aus wie ein http-server?

kein http-server hält eine verbindungen "ewig".
Üblicherweise wird eine aufgebaute verbindung für genau eine anfrage offen gehalten und dann geschlossen.

dein code ist daher vollkommen ungeeignet. du kannst die verbindung nicht nur im setup aufbauen und dann auf ewig damit arbeiten wollen.

richtig ist: verbindung bei bedarf aufbauen, anfrage senden, bearbeiten und verbindung auch auf der clientseite schließen.

das mit dem neustarten des arduino in der loop-funktion ist natürlich nur eines: a-ben-teu-er-lich!

code: [select]

void loop() {
  if(digitalread(1) == high) {
    client.connect(server, 80);
    client.print("get ");
    client.println(geturl);
    client.println();
    delay(1000);
    client.stop();
  }
}



Arduino Forum > International > Deutsch (Moderator: uwefed) > Standby und Ethernetprobleme


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62