das Problem, wenn ich den Taster 1 oder 2 drücke sollen die Servos auf eine bestimmte position fahren, das machen sie zwar auch.
Wenn ich die taster jedoch längere Zeit drücke fahren die Servos wieder auf die ursprüngliche Position zurück.
Taster 1 an + und PORTB.0 angeschlossen
Taster 2 an + und PORTB.1 angeschlossen
Will damit irgenwann mal ein Freiflugmodell steuern, bin aber erst am Anfang meiner Programmierkarierre. Hab mal im Anhang noch eine Ausführliche funktiosbeschreibung falls es jemanden interessiert
Code:$regfile = "m168def.dat" $crystal = 16000000 'Quarzfrequenz $baud = 9600 $hwstack = 32 $framesize = 32 $swstack = 32 Dim Center11 As Byte Dim Center21 As Byte Dim Pos11 As Byte Dim Pos21 As Byte Center11 = 105 Pos11 = 30 Center21 = 125 Pos21 = 70 Servo config Config Servos = 2 , Servo1 = Portd.2 , Servo2 = Portc.1 , Reload = 10 Config Portd = Output Config Portc = Output Config Portb = Input Portb = &H04 'finally we must turn on the global interrupt Enable Interrupts 'ende Servo config Do If Pinb.0 = 1 Then Goto Glide If Pinb.1 = 1 Then Goto Glide If Pinb.0 = 0 Then Goto Bunt If Pinb.1 = 0 Then Goto Bunt End Loop Glide: Servo(1) = Center11 Servo(2) = Center21 Waitms 1000 Bunt: Servo(1) = Pos11 Servo(2) = Pos21 Waitms 1000 'Loop End 'end program
Hallo sreuss,
Zum Anfang deiner Programierkarriere solltest du dir befehle wie Goto garnicht erst angewöhnen. Das springen von einem Punkt zum anderen verringert die Übersichtlichkeit eines Programms ungemein. Des weiteren gehören der "Do" und der "Loop" befehl auf eine höhe und nur was sich in der Schleife befindet wird eingerückt. So kann man auf einen Blick sehen welcher Teil des Codes wiederhohlt wird.
Dann ist mir aufgefallen das du einen "End" befehl in deiner Schleife hast was bedeutet dass die Schleife genau EINMAL durchlaufen werden würde was ja nicht Sinn einer Schleife ist
Abgesehen davon wird dieser Befehl aber sowieso nie erreicht da du vorher mittels Goto die Schleife verlässt die Servos zu einer bestimmten position fährst und dann eine Sekunde wartest bevor das Programm Beendet wird. Es wird also nur ein einziges mal geprüft ob ein Taster gedrückt ist und zwar beim starten des Controllers. Danach nie wieder.
Wenn ich das richtig verstehe ist dein Taster mit einer Seite an +5V angeschlossen und mit der anderen am PortB0. Das funktioniert so nicht, da wenn der Taster offen ist kein bestimmtes potential an Port B0 anliegt. Das heißt das dieser alles mögliche empfängt und ständig ein und ausschaltet. Um den Pin auf ein bestimmtes Potential zu legen wenn der Taster offen ist benötigst du einen Pullup oder Pulldown widerstand. Mehr dazu hier: http://www.rn-wissen.de/index.php/Pu...own_WiderstandTaster 1 an + und PORTB.0 angeschlossen
zu guter letzt: Wofür steht Portb = &H04 ?
Mfg
Jens
Lesezeichen