Seite 44 von 81

#646 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 13:26:26
von r0sewhite
Moin,

alles klar, dann kann ich den Taster auch weglassen. Zwei Taster mit gleicher Funktion im Abstand von weniger als 1cm ist überflüssige Redundanz.

So, ich komme schrittweise vorwärts und kann kleine Erfolge verbuchen. Ich kommentiere hier auch mal Deine PN, damit das alles wieder im Zusammenhang steht. Möglicherweise hilft es ja auch anderen.
yacco hat geschrieben:
r0sewhite hat geschrieben:Kann es an KEY_PIN liegen, weil er auf A0 die kaskadierenden Buttons erwartet, wo bei mir Vert liegt? Das würde erklären, warum ich ausschließlich mit vertikalen Bewegungen Veränderungen bewirken kann.
Pin 0 und A0 sind der gleiche Pin, auf A0 werden daher immer noch die Tastatureingaben erwartet (wolltest du nicht
die Zeile

Code: Alles auswählen

rawKey = analogRead(KEY_PIN);   // read the value from the sensor
ersetzen? )

Alternativ kannst du auch auf Version 2.8 upgraden und #define KEY_PIN auskommentieren.
Wollte ich das? Davon wusste ich nichts. Gut, ich habe ein paar Seiten zurück geblättert und gefunden, was Du meinst. Ebenso die V2.8, die ja im Wiki noch nicht verlinkt ist. Das Auskommentieren von #define KEY_PIN führte allerdings auch in der V2.8 zu einem Fehler. Also bin ich die Schritte durchgegangen und habe erst mal den Code von Holger übernommen:

Code: Alles auswählen

#ifdef HWKEYS
  if      (digitalRead(HW_RIGHT) ==0) {result = KEY_RIGHT; }
  else if (digitalRead(HW_UP)    ==0) {result = KEY_UP;    }
  else if (digitalRead(HW_DOWN)  ==0) {result = KEY_DOWN;  }
  else if (digitalRead(HW_LEFT)  ==0) {result = KEY_LEFT;  }
  else if (digitalRead(HW_SELECT)==0) {result = KEY_SELECT;}
#else
  uint16_t input = analogRead(0);   // read the value from the sensor  
  for (uint8_t k = 0; result < 0 && k < NUM_KEYS; k++) {
    if (input < adc_key_val[k]) {
      result = k;
    }
  }
#endif
Hier wurde beim Kompilieren die Schleife (for (uint8_t k = 0; ...) angemeckert, also habe ich auf Deinen darauffolgenden Rat

Code: Alles auswählen

uint16_t input = analogRead(KEY_PIN); 
gegen

Code: Alles auswählen

uint16_t input = 1023;
ersetzt.

Brachte nicht den gewünschten Erfolg. Danach war ich etwas radikaler und habe einfach den kompletten Bereich

Code: Alles auswählen

#else
  uint16_t input = analogRead(0);   // read the value from the sensor  
  for (uint8_t k = 0; result < 0 && k < NUM_KEYS; k++) {
    if (input < adc_key_val[k]) {
      result = k;
    }
  }
rausgeschmissen, da ich ja eh keine kaskadierenden Buttons abfragen muss. Das war's: Kompilieren erfolgreich und mein Joystick geht. :mrgreen:

Komischerweise zeigt mir CHECK_INPUT zwar die Joystickbewegungen an, nicht aber den Select-Taster. KEY steht beharrlich auf 0000, funktioniert aber trotzdem. Ich kann in den Menüs herumblättern und mit Select auswählen. Egal, Wenn CHECK_INPUT nicht will, ist das eben kein Drama.

Allerdings kriege ich nun immer noch ständig einen Timeout, wenn ich das LCD an ein MWC-Board anschließe. Möglicherweise liegt es einfach daran, dass ich zuvor mit dem verrücktspielenden Joystick einige Parameter ungewollte verstellt habe, da ich einige Male in die Settings gerutscht bin. Augenblicklich steht da eine Delay Time von 80 und eine Baudrate von 19200. Bei der Baudrate tippe ich einfach mal auf 115200, doch welche Delay Time ist Standard und wo finde ich sie notfalls im Sketch? Mit dem Jostick kann ich den Wert nämlich nur in Schritten von 50ms ändern.

EDIT: Nur zur Absicherung: RX und TX müsen zwischen den Arduinos logischerweise gekreuzt sein, oder?

#647 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:00:41
von Hifly
r0sewhite hat geschrieben: Also bin ich die Schritte durchgegangen und habe erst mal den Code von Holger übernommen:

Code: Alles auswählen
#ifdef HWKEYS
if (digitalRead(HW_RIGHT) ==0) {result = KEY_RIGHT; }
else if (digitalRead(HW_UP) ==0) {result = KEY_UP; }
else if (digitalRead(HW_DOWN) ==0) {result = KEY_DOWN; }
else if (digitalRead(HW_LEFT) ==0) {result = KEY_LEFT; }
else if (digitalRead(HW_SELECT)==0) {result = KEY_SELECT;}
#else
uint16_t input = analogRead(0); // read the value from the sensor
for (uint8_t k = 0; result < 0 && k < NUM_KEYS; k++) {
if (input < adc_key_val[k]) {
result = k;
}
}
#endif
Kurz zur Klarstellung für alle, damit es keine Mißverständnisse gibt: dieser Code muss auskommentiert werden, sprich vor der ersten Zeile /* und hinter der letzten Zeile */ einfügen. Wenn dann vor #define HWKEYS weiter oben // steht (d.h. auch auskommentiert ist), dann hat das den selben
Effekt, wie es Tilmann gemacht und der zweite Teil einfach gelöscht wird.
Ich habe mittlerweile meine Box mit NC-Joystick entsorgt, da ich nicht ganz so zufrieden war mit den der REaktion auf die Eingaben (und ich auch noch ausversehen draufgetreten bin und der Joystick auseinander gebrochen ist). Meine neue Box sieht nun so aus: diskret aufgebaut mit atMega328, Joystick-Schalter vom großen C und Joystickknüppel ein 4mm Goldie 8) .

#648 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:04:06
von Hifly
PS: Danke an Arnd und allen die dieses super Tool entwickelt haben! :thumbright: Eigentlich geht es gar nicht ohne die Box!!!! 8)

#649 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:09:56
von Hifly
...und wenn ich schon dabei bin:
r0sewhite hat geschrieben:oder die Kupferschicht war nicht absolut rein
Habe meine Platinen auch mit dem Verfahren gemacht. Absolut wichtig ist es, dass die Kupferfläche total sauber ist! Lange mit Scheuermilch darauf rumschruppen, oder für noch bessere Ergebnis den Seno PoliBloc z.B. auch beim großen C. Dann geht es einigermaßen, einige Linien musste ich eigentlich immer noch mal mit einem dünnen Edding nachzeichnen.

#650 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:14:05
von r0sewhite
Hallo Holger,

mein Problem lag zunächst einfach am Mangel an Aceton. Mit Aceton kriegt man die Platine ebenfalls blitzeblank und dann klappt es auch mit der Direkt-Toner-Methode besser. Allerdings bin ich ganz froh um den ersten Fehlversuch, da ich nun doch noch an dem Platinenlayout bastel. Ich will den überflüssigen Reset-Taster raus haben, doch hat er noch eine angenehme Nebenrolle als Brücke. Nun muss ich schauen, wie ich die Leiterbahnen ohne Brücke verlegt kriege, da ich Drahtbrücken weitgehend vermeiden will. Das sieht so unprofessionell aus. :mrgreen:

#651 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:22:39
von Hifly
r0sewhite hat geschrieben:da ich Drahtbrücken weitgehend vermeiden will. Das sieht so unprofessionell aus. :mrgreen:
Kenne ich, kann man Stunden und Nächte mit verbringen.... :drunken: Ich habe es bei meinem Design vermeiden können, da ich den Doppeldecker gebaut habe mit dem LCD. Spart Platz und die eine Drahtbrücke, die vorher immer übriggeblieben ist, konnte so auch vermieden werden. Außerdem muss ich bei einem LCD mit anderer Belegung nicht das ganze Layout ändern, sondern nur die obere Platine.

#652 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 15:45:08
von yacco
r0sewhite hat geschrieben:anach war ich etwas radikaler und habe einfach den kompletten Bereich

Code: Alles auswählen
#else
uint16_t input = analogRead(0); // read the value from the sensor
for (uint8_t k = 0; result < 0 && k < NUM_KEYS; k++) {
if (input < adc_key_val[k]) {
result = k;
}
}


rausgeschmissen, da ich ja eh keine kaskadierenden Buttons abfragen muss. Das war's: Kompilieren erfolgreich und mein Joystick geht. :mrgreen:
Hups, hatte vergessen, dass ich meine Arbeitsversion schon etwas gepatcht hatte und dass das nicht mehr die Original-V2.8 ist. Aber genau das, was du getan hast, sollte auch mit dem Auskommentieren von KEY_PIN erreicht werden.
r0sewhite hat geschrieben: Komischerweise zeigt mir CHECK_INPUT zwar die Joystickbewegungen an, nicht aber den Select-Taster. KEY steht beharrlich auf 0000, funktioniert aber trotzdem. Ich kann in den Menüs herumblättern und mit Select auswählen. Egal, Wenn CHECK_INPUT nicht will, ist das eben kein Drama.
Das soll so sein. Wenn du keinen KEY_PIN definiert hast, zeigt KEY auch nix an.

Die Delay-Time spielt keine große Geige, das ist nur die Rate, mit der neue Datensätze vom MWC angefordert werden. Wenn die Baudrate nicht paßt, kommt allerdings keine serielle Kommunikation zustande. 115200 ist die richtige Wahl, wenn du im MWC nichts geändert hast.

RX und TX werden gekreuzt, korrekt. (Ich sollte das in meine Signatur einfügen, das spart Tipparbeit). :)

Freut mich, wenn's gefällt, Hifly. Ich hab übrigens einen Dreifachdecker *angeb*

#653 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 16:10:30
von r0sewhite
yacco hat geschrieben:Hups, hatte vergessen, dass ich meine Arbeitsversion schon etwas gepatcht hatte und dass das nicht mehr die Original-V2.8 ist. Aber genau das, was du getan hast, sollte auch mit dem Auskommentieren von KEY_PIN erreicht werden.
Nö, wenn ich einfach KEY_PIN auskommentiere, gibt's Mecker beim Kompilieren. Aber egal, geht ja so.

Nun hänge ich nur noch an der Baudrate. Ich kann sie so oft, wie ich will, auf 115200 stellen, sie steht jedes Mal nach Trennen der Stromversorgung oder nach einem Reset wieder auf 57600. Daher lande ich auch immer wieder im Timeout.

Könnte es das gleiche Problem sein, was Nico mit seinen "vergessenen" MultiWii-Einstellungen hatte? Kann ich irgendwie über den Sketch dem Arduino nochmal die 115200 fest einnageln?

#654 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 16:11:34
von Hifly
yacco hat geschrieben:Freut mich, wenn's gefällt, Hifly. Ich hab übrigens einen Dreifachdecker *angeb*
Neid! Da kann ich natürlich nicht mithalten! 8) Da komm ich aber vielleicht auch noch hin oder zum Vierfachdecker! Hatte eigentlich geplant noch mit 433MHz-Funkmodul auszurüsten, anstatt mit Kabel. Aber der Winter ist(zum Glück) vorbei und es waren einfach zu viele Projekte. Mal sehen ob ich mal noch dazu komme.
Bin bisher ganz gut ohne die weiteren Features, wie Logging ausgekommen. Konnte bisher immer auch so feststellen, warum der Quad vom Himmel fiel... :mrgreen:

#655 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 17:13:45
von yacco
Update... v2.9 beta

Ich hab versucht, die Patches und Vorschläge der letzten Beiträge in das Sketch einzubauen. Bugs im engeren Sinn wurden keine behoben, sondern nur ein paar Fallgruben zugeschüttet, in die man leicht beim Konfigurieren fallen konnte.

* Die kaskadierten Buttons können durch Auskommentieren der Zeile #define KEY_PIN abgeschaltet werden.
* Der Default bei der Versionseingabe ist jetzt immer die letzte Version.
* Die Baudrate kann jetzt fest eingestellt werden (Konstante DEFAULT_BAUDRATE bzw. USE_DEFAULT_BAUDRATE).

Bitte testen, wenn es keine Beschwerden gibt, wird es demnächst released.

EDIT: Anhang gelöscht, nehmt die 2.9 final.

#656 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 17:27:20
von r0sewhite
YEAH! Arnd, Du bist mein Held des Tages. Es geht. :mrgreen:

#657 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 17:37:50
von yacco
Würde mich aber interessieren, warum das mit der Baudrate nicht geklappt hat... und wieso ausgerechnet immer 57600 angezeigt wurde...

#658 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 19:07:53
von r0sewhite
Keine Ahnung. Nico hatte in dem anderen Thread ja auch die Probleme mit einem "vergesslichen" MWC, was auf eine USB-Verlängerung zurückzuführen war. Ich tippe mal drauf, dass die Spannungsversorgung das kritische Element ist, wenn irgendwelche Bits nicht richtig geschrieben werden.

So richtig zufrieden bin ich aber mit dem Joystick nicht. Man muss ihn schon sehr präzise in eine der vier Richtungen drücken, damit der Befehl angenommen wird. Ob sich das durch Verändern von JS_DEADBAND noch verbessern lässt?

#659 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 19:16:46
von yacco
Jupps, so ist es gedacht.

Code: Alles auswählen

    if (vert < JS_DEADBAND && vert > -JS_DEADBAND) {
      if      (hor < -5 * JS_DEADBAND)  {return KEY_RIGHT;}
      else if (hor >  5 * JS_DEADBAND)  {return KEY_LEFT; }
    }
    else if (hor < JS_DEADBAND && hor > -JS_DEADBAND) {
      if      (vert < -5 * JS_DEADBAND) {return KEY_UP;   }
      else if (vert >  5 * JS_DEADBAND) {return KEY_DOWN; }
    }
Wenn du den Wert von JS_DEADBAND hochsetzt, mußt du wahrscheinlich den Faktor 5 etwas reduzieren, sonst wird wieder keine Taste erkannt... das sollte ich nochmal überarbeiten...

#660 Re: MultiWiiKopter-Konfigurationsprogramm für Arduino

Verfasst: 08.05.2011 19:26:33
von r0sewhite
Nee, 49 funktioniert schon deutlich besser. Ich hab ja Ausschläge von locker +/-400 in jede Richtung und 49x5 sind gerademal 245. Da ist doch noch genügend Spielraum vorhanden.