Naja, wenn man in der Function den adc nicht startet, ist nix mit Werte auslesen
Zweiter Fehler war, dass ich den kompletten portA auf Output gesetzt habe, jetzt läuft es.
Der Vollständigkeit halber hier der richtige Code.
Habe das Ganze ein wenig umgebaut, jetzt finde ich es eleganter gelöst als oben
Code:Declare Function Readbuttons() As Byte $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 Config Adc = Single , Prescaler = Auto 'für Tastenabfrage Config Pina.7 = Input 'für Tastenabfrage Porta.7 = 1 Config Porta.0 = Output 'für Servo Config Servos = 1 , Servo1 = Porta.0 , Reload = 10 'für Servo Config Portc = Output 'für LEDs Enable Interrupts Dim Button As Byte Dim Servopos As Byte Dim Led As Byte Led = 1 Servopos = 95 Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 '*******************Main function************************** Do Servo(1) = Servopos If Led = 0 Then Portc.0 = 0 Portc.1 = 1 Portc.2 = 1 Elseif Led = 1 Then Portc.0 = 1 Portc.1 = 0 Portc.2 = 1 Elseif Led = 2 Then Portc.0 = 1 Portc.1 = 1 Portc.2 = 0 End If Button = Readbuttons() If Button <> 0 Then Select Case Button Case 1 Servopos = 45 Led = 2 Print "Servo rechts" Case 2 Servopos = 95 Led = 1 Print "Servo mittig" Case 3 Servopos = 145 Led = 0 Print "Servo links" End Select End If Waitms 100 Loop End '**********************Functions*********************************** Function Readbuttons() As Byte Local Ws As Word Readbuttons = 0 Start Adc Ws = Getadc(7) 'Print "ws= " ; Ws If Ws < 1010 Then Select Case Ws Case 400 To 455 Readbuttons = 1 Case 335 To 380 Readbuttons = 2 Case 250 To 305 Readbuttons = 3 End Select End If End Function







Zitieren

Lesezeichen