Hallo Hans,
ok, jetzt habe ich verstanden. Ja, das klingt sehr gut. Ich bin gespannt, wie das klappt.
Druckbare Version
Hallo Hans,
ok, jetzt habe ich verstanden. Ja, das klingt sehr gut. Ich bin gespannt, wie das klappt.
Mal zu Thema Fail-Save bei Senderausfall:
http://forum.mikrokopter.de/topic-23783-1.html
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.
Wie bereits oben erwähnt: Das ist eine Idee, wenn ich was Falsch gemacht habe dann bitte nicht zögern es zu sagen.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 =========
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..
Hallo an alle,
ein Tip:Bei einer Mittelwertbildung können die Sprünge der einzelnen Werte so heftig sein, dass der Mittelwert eigentlich nicht richtig zu gebrauchen ist. Von Mittelwert zu Mittelwert gibt es dann leider auch immer wilde Sprünge. Viel viel bessere Werte erlangt man mit einem gleitenden Mittelwert. Die Sprünge sind ausgeglichener und zu gebrauchen.
Tschüss hier aus Eckernförde Peter
@ Holzi: Der Gleitende Mittelwert ist hier überflüssig da wir nur ganz kurz messen. Aber der Hinweis ist natürlich richtig. (Eckernförde? Komm mal rum nach Kiel!!)
@all, natürlich habe ich mich mit der Stickstellung versehen, hier der berichtigte Code mit 3mal kurz Piepen für deaktivieren der Funktion. Könnte man auch über die LED machen.
Habe ich getestet und funktioniert. Jetzt gibts kein Versehentliches Neukalibrieren mehr.Code:'===XY Kalibrierung über Funke================================================== 'Nils-XY Offset
'Durch Bewegen des rechten Sticks nach oben links wird die XY Kalibierung aktiviert
If State = 0 And Sempf(rollchannel) > 20 And Sempf(nickchannel) > 20 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 bit gesetzt wurde, dann Kalibrierung übernehmen
If State = 0 And Sempf(rollchannel) > -10 And Sempf(rollchannel) < 10 And Sempf(nickchannel) > -10 And Sempf(nickchannel) < 10 And Sticksup_bo = 1 Then
Toggle Xy_calibration_bo 'Kalibrierung aktivieren/desaktivieren
Sticksup_bo = 0 ' Setzbit zurücksetzen
Speakeron = 1
If Xy_calibration_bo = 1 Then 'Falluntershceidung ob ein oder ausgeschaltet
Speakerduration = 100 'Nils-Speaker : jeder 100te takt wird gepiept
Silenceduration = 100 'Nils-Speaker: Dauer der Stille
Speakerbeeps = 2 'Nils-Speaker: Anzahl der Pieps 4=unendlich
Else 'Nils-Speaker: einschaltflag setzen
Speakerduration = 50 'Nils-Speaker : jeder 50te takt wird gepiept
Silenceduration = 50 'Nils-Speaker: Dauer der Stille
Speakerbeeps = 3 'Nils-Speaker: Anzahl der Pieps 4=unendlich
End If
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 = 1 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 = 100 'Nils-Speaker : jeder 100te takt wird gepiept
Silenceduration = 100 'Nils-Speaker: Dauer der Stille
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
Do 'Force RESET. Helps to know when eeprom is modified.
Loop
End If
End If
End If
'===Ende Offsetübernahme =========
Habt ihr Verbesserungsvorschläge?
Wer keinen Pieper hat einfach eine LED Routine einsetzen.
Den Code Lade ich morgen auf meinen Blog
Gruß
Nils
Kann man das ganze nicht in ein sub setzen? dann könnte man das ganze so handhaben das man den originalsource von william nimmt und selbst einfach die sub mit einfügt. plus natürlich die definitionen der variablen usw.
ich weiß garnet ob das möglich ist in bascom einfach eine externe datei mit zu verknüfpen. dann müsste man nur den aufruf der subroutine in der haupschleife aufrufen. ich denke das wäre eine sehr konfortable einfache und auch individuellere lösung!
und wohl auch für leute die nicht so viel vom programmieren verstehen einfacher!
Die Sub ist in arbeit, ist auch kein Problem, mit externen Dateien ist es schwierig glaube ich, Basic ist da zu begrenzt.
Wenn Du willst pass ich dir das auf den Originalcode von Willa an!
nene also ich bekomme das ganze schon hin ;) soweit fit bin ich in bascom schon... ich benötige dies aber auch nicht! fliege ja nur im acro mode!
dachte nur an die allgemeinheit!
Moin moin.
Ausprobiert habe ich so etwas auch noch nicht, aber wenn man nur die Sub für sich compiliert sollte man das Ergebnis doch als Include.xyz einfügen können? Dazu einmal so eine include Datei näher untersuchen. :-)
http://ubuntuone.com/p/lRo/
Gruß Richard
das hatte ich nun auch rausgefunden fand ich aber doof da das ganze dnan nicht mehr opensource ist!