Mal zu Thema Fail-Save bei Senderausfall:
http://forum.mikrokopter.de/topic-23783-1.html
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
_________________________________________________
[-X Quis custodiet ipsos custodes
Ground-Effect-Stability-Robot www.peter-holzknecht.de
@ 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!
Lesezeichen