hallo stefan,

ich hänge hier noch ein beispiel code-stück (visual-basic) an,
mit dem ich nochmal zeigen will, wie ich das mit dem einen IF und dem einen byte RAM meine.

jede extended class (SERIAL, LCD, IR, etc.) kann damit den ausgabekanal für sich reservieren.

gruss martin


Code:
'Global Namespace
'----------------
Const ObjSERIAL = 0 'Jede Klasse bekommt eine eigene ID
Const ObjLCD = 1
Const ObjIR = 2
Const ObjRD = 3
Const ObjIIC = 4

Public ActiveObjID As Integer '<-- dieses eine Byte RAM wird zur Status-Verwaltung gebraucht und hält
                                  'fest, weiche ID gerade den PRINT-Kanal für sich reserviert hat

'LCD.cls
'-------
Function Clear()
    'Die Umleitung auf das LCD wird mit PRINT"#ON_LCD#"; aktiviert.
    'Danach können Sie mit PRINT oder PUT auf das LCD schreiben bzw. Kommandos zur
    'Formatierung übermitteln.
    If Not ActiveObjID = ObjLCD Then
        'Schalte Umleitung für LCD-Objekt aktiv
        PRINT"#OFF#";
        PRINT"#ON_LCD#";
        ActiveObjID = ObjLCD 'Reservierung jetzt für mich
    End If
    Print "#CLR"; '-> LCD Löschen
End Function

Function PRINT(Var)
    If Not ActiveObjID = ObjLCD Then
        'Schalte Umleitung für LCD-Objekt aktiv
        PRINT"#OFF#";
        PRINT"#ON_LCD#";
        ActiveObjID = ObjLCD 'Reservierung jetzt für mich
    End If
    Print Var; '-> Schreibt den Wert ins LCD
End Function

'IR.cls
'------
Function Send(Address As Long, Command As Long)
    'Ist die Umleitung auf das IR MODULE mit
    'PRINT"#ON_IR#";
    'aktiviert, so können sie mit PUT u. GET Daten senden bzw. empfangen.
    If Not ActiveObjID = ObjIR Then
        'Schalte Umleitung für IR-Objekt aktiv
        PRINT"#OFF#";
        PRINT"#ON_IR#";
        ActiveObjID = ObjIR 'Reservierung jetzt für mich
    End If
    PUT Address
    PUT Command
End Function

Function Get(Address As Long, Command As Long)
    '... genauso
End Function