Re: Relaiserweiterung über I/O Port Kategorie: Programmierung (von Rene Schulz - 5.01.2012 13:26) | |
Als Antwort auf Re: Relaiserweiterung über I/O Port von André H. - 5.01.2012 13:11
| |
> Hallo Rene, > > zuerst solltest Du Dir ein einheitliches und logisches Einrücken angewöhnen: > Als Bsp.: > > thread xy > { > tuedies(); > loop > { > if irgendetwas > { > tuedies(); > unddas(); > } > else > { > oderdas(); > undjenes(); > } > > if dies and das and solches and > wasanderes and jenes > { > //... > } > } > } > > > Man sollte beim Einrücken immer gleich erkennen, in welcher "Ebene" man ist. > Ansonsten ist es für einem der Helfen will, umso schwerer den Code zu lesen. > > Nun die Anmerkungen zu Deinem Quellcode selbst: > > > > > { > > byte month, day, hour, min, sec; // Variablen definieren und zuweisen > > byte LED; > > int time; > > int number; > > > > lcdext.init(); > > //stports.setLED(1,-1); <- das sollte eigentlich das LED > > Schalten, wenn die Heizung läuft. > > /*******************************************/ > > /***********Zeitschaltuhr Heizlampe*********/ > > /*******************************************/ > > > > loop > > > > { > > wait min!=system.minute(); // Warten auf neue Minute > > min = system.minute(); // Wenn neue Minute, dann gleichsetzen und abarbeiten > > day = system.dow(); // täglich abarbeiten > > system.dow() ist der Day Of Week, also Wochentag Sonntag bis Samstag (0 bis 6) > > > > > /**************************************/ > > /********* Zeitdefinition *************/ > > /**************************************/ > > > > if time >= 1700 and time <= 0800 // zwischen 17:00 und 08:00 > > and day >= 1 and day <= 31 // und vom 01. bis zum 31. > > and month >= 10 and month <= 3 // und von Monat 10 bis Monat 3 > > Gleich zwei Dinge: > 1. Der Wert eines Tages im Monat kann nicht au�erhalb vom 1. bis 3. liegen. > Daher ist diese Abfrage ziemlich nutzlos. > 2. Oben hast Du den Wochentag(dow) der Variable day zugewiesen. > Diese hat nur einen Bereich von 0 bis 6. > Die Parameter für die Monatsabfrage können so auch nicht funktionieren. > Ein Monat, oder allgemeiner, eine Varibale kann nie gleichzeitig einen Wert > grö�ergleich 10 und kleinergleich 3 haben. > Wenn Du nur die Monate 4 bis 9 ausnehmen willst, mu�t Du das so machen: > ... > and (month >= 10 or month <= 3) // und von Monat 10 bis Monat 3 > > Alternativ mit "nand": > ... > and (month < 10 nand month > 3) // und von Monat 10 bis Monat 3 > > > > > ports.set(0,1); // (Pin 41) Einschalten > > else // sonst > > ports.set(0,0); // (Pin 41) Ausschalten > > > > }; > > Ein Semikolon nach geschweiften Klammern ist unnötig. > Ein Semikolon schlie�t eine Anweisung, einen Aufruf bzw. eine Definition ab. > > > release; > > }; > Warum schreibst Du ein "release" hier herein??? > Release gehört zum Capture. (Semaphor) > Dies dient bei der CC2 zur Synchronisieren von Threads bzw. zum (temporören) > Schutz von Ressourcen vor anderen Threads. (Siehe Handbuch Kapitel "Synchronisation") > > MfG André H. Hallo André, vielen Dank für Deine Hilfe, das mit dem Code einrücken werde ich mir merken. Wird der gesamte Code denn eigentlich täglich abgearbeitet wenn man nichts zum Abschlu� schreibt, wie zum Bsp. continue? Ich werde Deine Ratschläge jetzt erst mal Umsetzen, Danke nochmal. Gru� Rene | |
Antwort schreiben Antworten: Re: Relaiserweiterung über I/O Port (von André H. - 5.01.2012 13:51) Re: Relaiserweiterung über I/O Port (von Rene Schulz - 5.01.2012 14:39) |