Ja Array. Wie werden die Daten denn von dem Handy erwartet? Wie überträgst du sie? Über Uart?
Ja Array. Wie werden die Daten denn von dem Handy erwartet? Wie überträgst du sie? Über Uart?
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Ja über UART.
Ich will mehrere Werte in einer Variablen zusammen fassen, und das soll in Bascom geschehen.
Also wenn mir jemand einen Beispiel Code mit Erläuterung geben könnte wäre das schon ein feine Sache.
Und was das Array betrifft, so kann ich damit nix anfangen , will ja keine Variable einfach nur hoch zählen.
mfg Nase
Dann geh doch mal auf die Bascom Website und guck dir in der Hilfe das Kapitel zu Arrays an. Vorher würde ich dir noch ein paar Grundlagen zu Arrays empfehlen -> Wikipedia sollte da erstmal reichen.
Alternativ kannst du's auch so machen: (Achtung pseudo Code)
Das ist jetzt nicht vollständig durchdacht. Die erste Nummer zb. ist ein Sonderfall. Die Lösung ist aber nicht schön finde ich. Mit nem Array geht das besser.Code:int telnr int nr while get nr //Zahl von der IR Schnittstelle einlesen telnr = telnr * 10 + nr end
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Die Variable telnr wird überlaufen.
Wie geschieht denn die IR-Abfrage?
Nimm, wie schon erwähnt, ein Array.
Wenn die IR-Abfrage (Fernbedienungsroutine) per Interrupt z.B. die letzte Ziffer in der Variablen neueziffer ablegt, dann würde ich es so probieren (nicht getestet!):
In der IR-Routine dann einfach die Ziffer direkt in die Variable neueziffer schreiben.Code:$regfile = "m88Adef.dat" $baud = 19200 $crystal = 8000000 $hwstack = 160 $swstack = 100 $framesize = 100 Dim Position As Byte Dim Stelefonnr As String * 15 Dim Btelefonnr(15) As Byte At Stelefonnr Overlay Dim Neueziffer As Byte Gosub Telnrleeren Do Gosub Infrarot Gosub Zifferntest Loop End Zifferntest: Select Case Neueziffer 'Ziffer 0-9 Case Is < 10 Gosub Zifferhinzu Case 13 'Nummer fertig eingegeben also wählen Gosub Nummernwahl Case 12 'letzte Stelle löschen Gosub Zifferweg Case 11 'alle Stellen löschen Gosub Telnrleeren End Select Return Infrarot: 'Wenn nicht per Interrupt Return Telnrleeren: For Position = 1 To 15 Btelefonnr(position) = 0 'Nullbyte signalisiert Ende eines Strings Next Position Neueziffer = 255 Position = 0 Return Zifferhinzu: If Position < 15 Then Incr Position Neueziffer = Neueziffer + 48 'ASCii Codes für Zahlen Btelefonnr(position) = Neueziffer End If Return Zifferweg: If Position => 1 Then Decr Position Btelefonnr(position) = 0 End If Return Nummernwahl: Print "Kommandozumnummerwählen"; Print Stelefonnr Gosub Telnrleeren Return
Wurde OK gedrückt, dann die 13 reinschreiben.
usw.
Geändert von peterfido (12.05.2013 um 11:32 Uhr)
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Code:' $regfile "m8def.dat" 'Definiert den Atmega als Atmega8 $crystal = 1000000 'Gibt die Quarzfrequenz an in Herz $hwstack = 32 'Default use 32 Hardware reservierte Speicher $swstack = 10 'Default Software resvierung Speicher $baud = 2400 '---------------------- Config Display ---------------------------------------- ' Konfiguration fürs Display Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4 '-------------------------Variable deklarieren ------------------------------- Dim Adresse As Byte ' Variable für Infrarot Adresse Dim Commando As Byte Dim Flag As Byte Dim Blink_aus As Byte Dim Blink_an As Byte '------------------------------- I / O ---------------------------------------- Ddrd = &B11100000 ' Portd.5-d6-d7 als Ausgang für Leds setzen Ddrb.2 = 1 ' BG2 als Ausgang für Display Beleuchtung setzen Portb.6 = 1 ' Pull Down setzen für Tastereingang '---------------- Konfiguration für 'IR Eingang ------------------------------- Portb.0 = 1 ' PullUp setzen für Eingangspin IR-Led Config Rc5 = Pinb.0 ' Pin für IR Abfrage setzen '---------------------------------- Interrupts --------------------------------- Enable Interrupts ' Interrups Global freigeben '------------------------------------------------------------------------------ Cls Flag = 1 Do '--------------------Ankommendes IR Signal auswerten -------------------------- Getrc5(adresse , Commando) If Flag = 1 Then Lcd "Warte auf IR Signal" Flag = 0 End If If Adresse <> 255 Then Reset Commando.7 Cls Flag = 1 End If '------------------------ If Commando = 1 Then Gosub 1 If Commando = 2 Then Gosub 2 If Commando = 3 Then Gosub 3 Cls Lcd " Taste=" ; Commando Waitms 200 Loop '---------------------- Sub Routinen fuer gedrückte Taste 1 ------------------- 1: Portd.5 = 1 Waitms 500 Portd.5 = 0 Return '---------------------- Sub Routinen fuer gedrückte Taste 2 ------------------ 2: Print 2 Portd.6 = 1 Waitms 50 Portd.6 = 0 Return '----------------------- Sub Routinen fuer gedrückte Taste 3 ------------------ 3: Print 3 Portd.7 = 1 Waitms 50 Portd.7 = 0 Return
Geändert von radbruch (13.05.2013 um 17:57 Uhr) Grund: CODE-Tag eingefügt (Letze Ändeung von nase um 17:42)
Wo wird "Flag" denn auf 1 gesetzt?Code:Getrc5(adresse , Commando) If Flag = 1 Then Lcd "Warte auf IR Signal" Flag = 0 End If If Adresse <> 255 Then Reset Commando.7 Cls End If
Lesezeichen