So,
Harry und Hans ich hab mir mal ein paar Gedanken gemacht und möchte das jetzt zur Diskussion stellen:
Das Vorgehen ist folgendes:
Im GUI Mode (Standby) den rechten Stick nach oben links bewegen. Beim Loslassen schaltet er die Kalibrierung an, nur dann funktioniert der Vorgang so mit dem Schalter während des Fluges. Das Ganze wird durch einen Doppelpieps bestätigt.
Problem war das Halten der Sticks, das würde ja für ein unendliches Togglen sorgen daher die Zwischenvariable.
Eins noch vorneweg: Hans mir ist aufgefallen, dass Willa die Kanäle erst kurz vor Ende des Loops bereinigt (also das umrechen auf -39...+39). Am Ende liest er dann neue Werte ein die von 61 bis 139 gehen.Du scheinst aber Teilweise schon mit bereinigten Werten zu rechnen. Habe ich da einen Denkfehler? Bei den Stickpositionen rechne ich jetzt mit Werten von 61 bis 139.
Ganz unten: 61
Mitte: 100
Ganz oben: 139
Ich weiß nicht wierum links und rechts ist.
Ich hab das noch nicht getestet.
Code:
If State = 0 And Sempf(rollchannel) < 70 And Sempf(nickchannel) > 120 Then
Sticksup_bo = 1 'Setzbit setzen (Dient dazu zu verhindern das der zustand springt wenn ich dies ticks lange halte
End If
'Erst wenn ich die sticks wieder loslasse und das bitt gesetzt wurde, dann calibrierung übernehmen
If State = 0 And Sempf(rollchannel) > 90 And Sempf(rollchannel) < 110 And Sempf(nickchannel) > 90 And Sempf(nickchannel) < 110 And Sticksup = 1 Then
Toggle Xy_calibration_bo 'Kalibrierung aktivieren/desaktivieren
Sticksup = 0 ' Setzbit zurücksetzen
Speakeron = 1 'Nils-Speaker: einschaltflag setzen
Speakerduration = 250 'Nils-Speaker : jeder 250te takt wird gepiept
Speakerbeeps = 2 'Nils-Speaker: Anzahl der Pieps 4=unendlich
End If
If State > 0 Then ' Acro oder Hover Mode ausgewählt
If Sempf(5) > 0 And Sempf(throttlechannel) > 50 Then Switch_validation = 1 'Wenn größer als 0 (Acro) und Gas> 50 dann Kalibrierung scharf schalten heir muss ich irgendwas einbauen damit ich nicht aus versehen was amche
If Sempf(5) < -20 And Switch_validation = 1 And Xy_calibration_bo Then 'Betriebswahl auf Standbay ohne Gas wegzunehmen > Werte werden jetzt übernommen
XY_Calibration_Bo = 0
Switch_validation = 0
Modification = 1 'Es wurden werte gemessen
For I = 1 To 19 '20 mal messen und Summe bilden
Xacc_offset = Xacc_offset + Getadc(4)
Yacc_offset = Yacc_offset + Getadc(5)
Next
Xacc_offset = Xacc_offset / 20 'Mittelwert bilden
Yacc_offset = Yacc_offset / 20
Speakeron = 1 'Nils-Speaker: einschaltflag setzen
Speakerduration = 250 'Nils-Speaker : jeder 250te takt wird gepiept
Speakerbeeps = 2 'Nils-Speaker: Anzahl der Pieps 4=unendlich
End If
End If
If Modification = 1 Then 'Gemessene Werte stehen zur verfügung
If State = 0 Then 'Betriebswahl auf Standby
If Motors_on = 0 Then 'Motoren aus
Var(23) = Xacc_offset - 384
Var(24) = Yacc_offset - 384
For I = 1 To 33
Writeeeprom Var(i) , I 'Werte ins EEPROM schreiben
Next
'Fraglich ob das geht, oder ob er vorher in die LOOP hier unter geht..
'evtl eine subroutine schreiben die am ende ausgeführt wird
Speakeron = 1 'Nils-Speaker: einschaltflag setzen
Speakerduration = 250 'Nils-Speaker : jeder 250te takt wird gepiept
Speakerbeeps = 2 'Nils-Speaker: Anzahl der Pieps 4=unendlich
Do 'Force RESET. Helps to know when eeprom is modified.
Loop
End If
End If
End If
'===Ende Offsetübernahme =========
Wie bereits oben erwähnt: Das ist eine Idee, wenn ich was Falsch gemacht habe dann bitte nicht zögern es zu sagen.
Damit mir keiner vorwirft mich mit fremden Federn zu schmücken:
Das ganze basiert auf Hans' Code, ich habe lediglich kleinere Anpassugnen vorgenommen.
Nils
ps.: Wäre das nicht ganz gut in einer Sub aufgehoben? Wirkt sauberer..
Lesezeichen