
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Ziel des Programms ist, 15 Leitungen zu überwachen. Wenn auf einer Leitung Spannung anliegt, soll er einen IR Code senden. Allerdings nur 1x mal! Beispiel : Auf Leitung 1 liegt ein Signal an, dann sende per IR Signal XY. Liegt auf Leitung 2 ein Signal, dann sende ZXY, usw. ! > > Jetzt das besondere : Wenn jetzt z.B. auf Leitung 1 und 2 und 3 Spannung anliegt und 3 wieder abgeschalten wird, soll er den Code von 1 erneut senden. Auch wieder nur einmal! Das soll bei allen 15 Leitungen funktioniern! Es soll immer überprüft werden welche die erste Leitung ist und der Code dieser Leitung erneut gesendet werden. Noch ein Beispiel : Leitung 4,8 und 10 haben ein Signal. Leitung 8 wird abgeschaltet => Leitung 4 Code erneut senden. Was ist, wenn Leitung 4, 8 und 10 ein Signal haben, und Leitung 4 abgeschaltet wird? Dann Code 8 erneut senden? Deiner Beschreibung nach würde ich sagen: ja. Was ist, wenn Leitung 4, 8 und 10 ein Signal habe, 8 abgeschaltet wird, Code 4 nochmal gesendet wurde, und dann Leitung 10 abgeschaltet wird? Code 4 nochmal senden oder nicht? Deiner Beschreibung würde ich sagen: ja. Dann könnte ein Code skizziert so aussehen: define Sig0bis7 byteport[1] define Sig8bis15 byteport[2] define status0bis7 byte define status8bis15 byte define i byte define bitmaske int define bitmaske_inv int status = 0 #loop 'byteport 1 auf Signalwechsel testen for i=0 to 7 bitmaske = 1 shl i bitmaske_inv = 255 - bitmaske ' oder per xor ' steigende Flanke? if NOT (((sig0bis7 AND bitmaske) <> 0) AND ((status0bis7 AND bitmaske) = 0)) then goto weiter gosub Sende_IR_i ' IR-Signal für Leitung i senden status0bis7 = status0bis7 OR bitmaske ' aktuellen Signalzustand merken #weiter ' fallende Flanke if NOT (((sig0bis7 AND bitmaske) = 0) AND ((status0bis7 AND bitmaske) <> 0)) then goto weiter1 gosub Sende_min_IR status0bis7 = status0bis7 AND bitmaske_inv ' aktuellen Signalzustand merken #weiter1 next ' das gleiche nochmal für sig8bis15 goto loop #sende_min_ir 'finde kleinste aktive Leitung for i=0 to 7 bitmaske = 1 shl i if NOT ((status0bis7 AND bitmaske) <> 0) then goto weiter2 gosub Sende_IR_i goto end_for ' Abbruch Schleife #weiter2 next ' das gleiche nochmal für sig8bis15 #end_for return HTH Bye Achim |
| Antwort schreiben |