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..