Brauche dringend hilfe

Die reinen Daten vom Nunchuck könnte man ja trotzdem anzeigen, so als Showeffekt, kost nix extra. :smiley:

Das mit dem Kalibrieren sollte nicht das Problem sein, man könnte es so einrichten dass es sich beim Einschalten/einem Reset auf "Null" stellt oder so.

Oder noch nen Knopf dran machen, zur Nullstellung.

Das mit dem Nullen ist so eine Sache. Es sollte ja prinzipiell so sein, dass das Mittel aus Minimalwert und Maximalwert auch die Ausgangslage ist. Andererseits muss man dann den Sensor am Motorrad auch exakt plazieren. Man könnte darüber nachdenken, über einen Taster des Controllers den Nullpunkt manuell zu setzen. Ist ja auch kein Thema.

Bremsen und Beschleunigen würde ich nicht anzeigen lassen, ein zweiter Balken lenkt nur von der Neigung ab. Dann lieber eine Zeile für "Neigung" oder so verwenden, dass jeder weiß, was angezeigt werden soll.

Klar sind wir da. Bin aber gerade auf dem Heimweg. Hast du noch konkrete Fragen oder Vorgaben?

Ich habe mir den spaß mal nachgebaut. (Ja, ich habe mir dazu auch den Controller gekauft und gleich den Stecker weggeschnippelt...)
Ich bekomme Werte zwischen 55 und 175 raus (accx), liege also in der Grundstellung bei 115.
Glaube kaum, dass ich heute noch eine vernünftige Balkendarstellung hinbekomme, werde mich aber morgen damit weiter beschäftigen.

So, das Nullsetzen mittels Taster ist noch nicht drin, aber sonst funktioniert der Code erst mal. :smiley:
Sollte Quick&Dirty werden, allerdings wurde aus dem quick nichts... :wink:

[edit] Ein Video dazu: http://dl.dropbox.com/u/57859158/VIDEO0010.3gp :smiley:

#include <Wire.h>
#include "nunchuck_funcs.h"
#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,7,6,5,4);

byte L1[8] = {B00001,B00001,B00001,B00001,B00001,B00001,B00001,B00001};
byte L2[8] = {B00011,B00011,B00011,B00011,B00011,B00011,B00011,B00011};
byte L3[8] = {B00111,B00111,B00111,B00111,B00111,B00111,B00111,B00111};
byte L4[8] = {B01111,B01111,B01111,B01111,B01111,B01111,B01111,B01111};
byte R1[8] = {B10000,B10000,B10000,B10000,B10000,B10000,B10000,B10000};
byte R2[8] = {B11000,B11000,B11000,B11000,B11000,B11000,B11000,B11000};
byte R3[8] = {B11100,B11100,B11100,B11100,B11100,B11100,B11100,B11100};
byte R4[8] = {B11110,B11110,B11110,B11110,B11110,B11110,B11110,B11110};

byte zero = 115;

void setup(){
  nunchuck_setpowerpins();
  nunchuck_init();
  lcd.begin(16,2);
  lcd.createChar(1,L1);
  lcd.createChar(2,L2);
  lcd.createChar(3,L3);
  lcd.createChar(4,L4);
  lcd.createChar(5,R1);
  lcd.createChar(6,R2);
  lcd.createChar(7,R3);
  lcd.createChar(8,R4);
}

void loop(){
  nunchuck_get_data();
  int accx  = nunchuck_accelx(); // ranges from approx 55 - 175
            
  lcd.setCursor(0,0);
  lcd.print("Neigung:");
  lcd.setCursor(13,0);
  lcd.print(accx-zero);
  if (accx<zero+40&&accx>zero-40) showBar(accx);  
  
  delay (100);
  lcd.clear ();
}

void showBar (byte w){
  byte col;
  byte c;
  if (w==zero){
    lcd.setCursor(7,1);
    lcd.write (1);
    lcd.write (5);
  } else {
    if (w<zero){
      c=w%5;
      if (c==0) c=255;
      if (c==1) c=4;
      if (c==2) c=3;
      if (c==3) c=2;
      if (c==4) c=1;
      col=(w-zero+1)/5+7;
    }
    if (w>zero){
      c=w%5;
      if (c==0) c=255;
      if (c==1) c=5;
      if (c==2) c=6;
      if (c==3) c=7;
      if (c==4) c=8;
      col=(w-zero-1)/5+8;
    } 
    if (col<7){
      lcd.setCursor (col+1,1);
      for (int i=1; i<=7-col;i++) lcd.write (255);
    }  
    if (col>8){
      lcd.setCursor (8,1);
      for (int i=1; i<col-7;i++) lcd.write (255);
    }  
    lcd.setCursor(col,1);
    lcd.write (c); 
  }
}

Fine fine!!!
Ziemlich genau das was ich in meinem ersten Post
gemeint hatte.

Aber schön umgesetzt!

Klasse! :astonished: :slight_smile:

@konni87: Es würd uns interessieren was es für ne Note gab! :wink:

@Muethos: Ja, dieses Darstellungsvariante schien mir dann auch am besten, auch wenn für mich die Mathematik dahinter nicht ganz trivial war: Finde die richtige Position auf dem Display, setze das das richtige Zeichen, fülle bis zum Nullpunkt alles mit schwarzen Blöcken. Und das ganze dann in die positive und in die negative Richtung. Ich bin mir sicher, dass manch einer das noch optimieren kann, aber es tut ja vorerst was es soll...
Nun habe ich 8 Zeichen (5x8 Pixel) selbst definiert, der volle Block ist zum Glück im Zeichensatz enthalten, sonst hätte das nicht so gut geklappt.

@Joghurt: Lob höre ich doch gern! :wink:

Habe gestern abend noch ein Poti für den Kontrast eingebaut, hatte aber nicht mehr die Muße, das zu filmen. Auch auf die Hintergrundbeleuchtung habe ich verzichtet, es ging mir ja hauptsächlich um die Balkendarstellung.
Den Nullpunkt habe ich bewusst variabel gehalten, weil der Sketch ja auf eine manuelle Nullung per Tastendruck erweitert werden soll.

sth77:
Den Nullpunkt habe ich bewusst variabel gehalten, weil der Sketch ja auf eine manuelle Nullung per Tastendruck erweitert werden soll.

Guter Ansatz, jetzt kann man ganz einfach per

if (digitalRead(BUTTON) || nunchuck_zbutton() || nunchuck_cbutton())
  zero = nunchuck_accelx();

oder wie auch immer den Nullpunkt setzen. :slight_smile:

Den Wert schreiben wir dann auch fest ins Eeprom, dass man den nicht zwingend bei jedem Start neu ermitteln muss.

Oder so. XD

Das grenzt keinesfalls an Genialität, das hätte mit genügend Zeit fast jeder schaffen können. Immerhin war es eine sportliche Leistung von allen Beteiligten, das zeugt doch von der Kraft einer starken Community. Haben wir jemals in so kurzer Zeit einen siebenseitigen Thread "erschaffen"? :wink:
Dessen ungeachtet möchte ich nochmal festhalten, dass dies eine Ausnahmesituation war. Es soll nicht zur Regel werden, dass hier prüfungsrelevante Dinge fremdbearbeitet werden. Unter dem Gesichtspunkt, dass dies jedoch nur eine Teilleistung ist, haben wir nochmal ein Auge zugedrückt. Und der Ehrgeiz war ja sowieso schon geweckt...

Dann viel Glück bei den Prüfungen, schau bald wieder rein, die Sache mit der Nullung bekommen wir auch noch ohne zusätzlichen Hardwareaufwand hin - vielleicht sogar schon heute abend.

Auch wenn Euch das jetzt nicht gefällt - Eure Hilfsbereitschaft in Ehren - aber ich glaube es nicht, daß die Community hier ein Auge zudrücken kann. Das war keine Hausaufgabenhilfe, hier wurde gerade ein Teil einer Prüfungsleistung durch die Community erbracht. Soll heißen: egal wieviele Augen hier zugedrückt werden, die Entscheidung ob das OK ist oder nicht treffen die Prüfer und nicht die Arduino Community.

@konni87: was sagen die Prüfer dazu? Ist sowas üblich oder mußt Du jetzt hoffen, daß das keiner merkt?

Ich habe hier nicht geholfen und meiner Meinung nach hat die Gemeinschaft hier lediglich den Lehrer ersetzt. Es geht nicht um eine Doktorarbeit und Bundespräsident will er vermutlich nicht werden. Überdies ist das Thema in großen Teilen fachfremd. Schön zu sehen dass es sowas von Hilfe noch gibt !! Muss ich mich jetzt schämen weil ich gestern eine DCF 77 Library verwendet habe ?

Wer sich hier erbrüstet sollte eventuell nochmal in sich gehen. Mein Cent :wink:

Nein, Du mußt Dich nicht schämen, daß Du eine Library verwendest. Du mußt aber auch nicht gleich persönlich werden wenn Dir eine Ansicht nicht gefällt.

Soweit ich das verstehe ist das Projekt Bestandteil der Prüfung. Klar ist das keine Doktorarbeit, aber die Frage ist trotzdem ob das OK ist. Mein Punkt war nur, daß diese Entscheidung nicht von uns getroffen wird sondern von jemand anders. Egal ob Dir das gefällt oder nicht.

Die ursprüngliche Anfrage hat sich jedenfalls nicht darauf bezogen, daß er an einer Stelle hängt und ein paar Tipps braucht. Er hat keine Ahnung von Programmierung und die Community sagt ihm wo er den Code findet und wie er ihn ändern muß. Ich finde das jedenfalls nicht 100% OK.

Im Roboternetz war die Antwort meiner Meinung nach angemessen: benötige sehr dringend hilfe das bestehen meines meisterkurses hängt davon ab - Roboternetz-Forum.

Ich denke auch dass das ok war, da wir hier keine fertige Prüfungsarbeit abgeliefert haben sondern der Code maximal als Technologiedemonstrator taugt.

Da ist wie mit ner Schüssel Wasser: Wenn Du die in die Hand nimmst und neigst, dann neigt sich auch das Wasser, der Displaybalken bewegt sich. Wenn Du die Schüssel aber aufs Motorrad spannst und damit in die Kurve gehst, dann wird das Wasser relativ zum Motorrad (mehr oder weniger) in Ruhe bleiben. Wäre dem nicht so würde man ja umfallen... :wink:

Ich denke mal, damit er nicht durchrasselt sollte es ausreichen, aber für den funktionierenden Schräglagensensor, den er bauen sollte, wirds für ne richtig gute Note nicht reichen.

@konni87: Hmm... Darfst Du den Sensor eigentlich auch an den Helm schrauben? Da der Helm in der Kurve ja normalerweise waagrecht bleibt könnte es damit (mit umgekehrten Vorzeichen) sogar funktionieren, theoretisch... :slight_smile:

Ich bin schon ewig nicht mehr Motorrad gefahren. Warum bleibt der Helm waagrecht?

Das die Konstruktion auf dem Motorrad nicht funktioniert ist mir auch klar. Da gehört schon mehr dazu. Vor allem wenn die Konstruktion dauerhaft funktionieren soll.

Wenn die Schräglage ermittelt werden soll, dann geht das allerdings schon mit einem fest eingebauten Beschleunigungssensor. Nur muß man dazu den Betrag der Beschleunigung und den zeitlichen Verlauf auswerten. Weiterhin braucht man eine brauchbare Filterung um mit Vibrationen fertig zu werden.

Weil man dann einen besseren Überlick über die Kurve hat und schneller reagieren kann. :slight_smile: