Wechselschalter und Uhr via Webserver

hallo liebes forum :slight_smile:

ich bin schon seit tagen (nächten) am überlegen wie ich mein programm hinbekomme und schaffe es einfach nicht

schön langsam sinkt die motivation und meine letze hoffung beruht auf euch :slight_smile:

Aufgabe meines Arduinos:

steuerung meiner Zimmerbeleuchtung über webserver inkl. Loginseite (schon erledigt)

anzeigen von uhrzeit um ev. das licht an bestimmter zeit einschalten zu lassen (noch in arbeit)

in meinem zimmer ist eine Deckenlampe die über 2 Analogschalter (normale Kippschalter) und ein von mir (statt einem 3. Schalter) eingebautes relais aus und eingeschlatet werden soll

ein zweites relais schaltet einfach noch eine andere lampe (diesen punkt habe ich schon selbst geschafft - war ja nicht so schwer)

Zu meinem Problem:

ich bin jetzt schon so weit, dass alles ein wenig funktioniert aber halt noch nicht perfekt

  1. die Uhrzeit wird schon angezeigt aber logischerweise nur aktualisiert, wenn ich entweder einen button klicke oder die gesamte seite neu lade
    Ist es möglich nur die Uhrzeit akualisieren zu lassen ohne dass der rest auch mitgeladen wird??

  2. wenn ich über das arduino mein hauplticht einschalte ( im code Schreibtischlampe) funktioniert das auch
    wenn ich dann über einen analogschlater das licht wieder anschalte funktioniert es auch noch
    wenn ich aber danach meine seite neu lade, damit der sensorwert aktualisiert wird (natürlich ohne einen button zu klicken) schaltet sich mein licht auf einmal wieder ab
    wenn ich danach wieder über meinen webserver schalte funktioniert es wieder einwandfrei
    dasselbe natürlich wenn ich das licht über einen schalter im zimmer ausschalte und seite neu lade--schaltet es sich wieder ein

habe keinen plan mehr was falsch ist

anbei ist noch mein aktueller code
(ist noch etwas schlampig programmiert da ich noch in der testphase bin ) :stuck_out_tongue:

danke im voraus

Hasiflo

Code_11_7_11.txt (7.64 KB)

Eine Seite des Webservers wird prinzipbedingt vom Browser des Computers angefragt und vom Server geliefert und vom Browser angezeigt. Eine Seite einmal vom Server ausgeliefert schickt der Server nichts mehr.
Die einzige Technik damit die Seite upgedatet wird ist AJAX. Mit Javascript wird ein Teil der Seite (in diesem Fall die Uhrzeit) zyclisch neu geladen.
Alternative ist es die System-Zeit des PCs anzeigen zu lassen, nicht die des Servers.
Grüße Uwe

  1. die Uhrzeit wird schon angezeigt aber logischerweise nur aktualisiert, wenn ich entweder einen button klicke oder die gesamte seite neu lade
    Ist es möglich nur die Uhrzeit akualisieren zu lassen ohne dass der rest auch mitgeladen wird??

Die kleinen Arduinos haben 2 Interrupts eingebaut, die grösseren mehre ( bis 4 ? )

attachInterrupt(interrupt, function, mode)

Description
Specifies a function to call when an external interrupt occurs. Replaces any previous function that was attached to the interrupt. Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3). The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18).
Parameters
interrupt: the number of the interrupt (int)
function: the function to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine.
mode defines when the interrupt should be triggered. Four contstants are predefined as valid values:
LOW to trigger the interrupt whenever the pin is low,
CHANGE to trigger the interrupt whenever the pin changes value
RISING to trigger when the pin goes from low to high,
FALLING for when the pin goes from high to low.
Returns
none
Note
Inside the attached function, delay() won't work and the value returned by millis() will not increment. Serial data received while in the function may be lost. You should declare as volatile any variables that you modify within the attached function.
Using Interrupts
Interrupts are useful for making things happen automatically in microcontroller programs, and can help solve timing problems. A good task for using an interrupt might be reading a rotary encoder, monitoring user input.
If you wanted to insure that a program always caught the pulses from a rotary encoder, never missing a pulse, it would make it very tricky to write a program to do anything else, because the program would need to constantly poll the sensor lines for the encoder, in order to catch pulses when they occurred. Other sensors have a similar interface dynamic too, such as trying to read a sound sensor that is trying to catch a click, or an infrared slot sensor (photo-interrupter) trying to catch a coin drop. In all of these situations, using an interrupt can free the microcontroller to get some other work done while not missing the doorbell.
Example
int pin = 13;
volatile int state = LOW;

void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}

void loop()
{
digitalWrite(pin, state);
}

void blink()
{
state = !state;
}

See also
detachInterrupt

Nimmt dir ein externen server der php-fähig ist(sind eig alle heute). Dann kannst du dir nen php-programm schreiben, welches deinen arduino abfragt. Die uhrzeit packste dann in ein extra php-skipt, damit sich nur die zeit aktualisiert. Übersichtshalber würd ich die einzelnen Skrikpe dann in verschiedene iframes packen. such doch einfach ma "arduino+php" wirst sicher was finden. Gibt auch auf youtube einige videos.

hallo

danke einmal für die antworten

für den server wo ich die uhrzeit herbekomme habe ich schon etwas gefunden:

kann ich das verwenden?

außerdem habe ich jz schon einige tutorials über ajax und php gelesen, verstehe aber immer noch nicht richtig wie ich das in den arduino code verpacken muss

könnte mir jemand ein beispiel geben, wie ich den code im oberen link über mein arduino anzeigen lassen kann (sofern der obere link brauchbar ist)

lg
Hasiflo

Ajax ist eine Technik bei der Teile einer Internetseite nachgeladen werden, ohne daß die ganze Seite neu geladen wird. Praktisch ist es Javaskript der irgendwie getriggert wird. Dukannst auch über die Zeit trigger.
Ich verstehe aber noch nicht warum Du nicht die Systemzeit des PCs anzeigen kannst.
zB: http://www.rener.de/node/1020
Grüße Uwe