- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Asuros Schalter

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.10.2005
    Alter
    35
    Beiträge
    6

    Asuros Schalter

    Anzeige

    E-Bike
    hi,

    mein Asuro behauptet, dass Schalter gedrückt wurden, die eigentlich nicht gedrückt sind (K5 und K6 werden vom Programm für K1 gehalten). In der Anleitung steht drinn:
    In seltenen Fällen kann es vorkommen, dass durch Bauteiletoleranzen ein falsches Muster erkannt wird.
    Das kann aber später softwareseitig behoben werden.”
    Wie sieht dieses "Softwareseitig beheben" aus? Habt ihr Beispielcode? Ich bin mir recht sicher, dass mein Code, der aus der Ausgabe von PollSwitch() einen Array mit Werten für die einzelnen Schalter macht funktioniert. Es muss also dieser Fehler sein, der Selbsttest hat das selbe Problem.

    Danke schonmal,
    campino
    Für dich ist ein Robot ein Robot. Von Menschen hergestellt und wenn nötig von Menschenhand zerstört. Nur hast du leider noch nicht mit ihnen gearbeitet, und so kennst du die Realität überhaupt nicht.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    41
    Beiträge
    357
    Poste doch mal deinen Code. Meiner sieht so aus:

    Code:
                int poll = PollSwitch();
    
                ...
    
                int switches[6] = { 0, 0, 0, 0, 0, 0 };
                int i, switchValue;
                for (i=0; i<6; i++) {
                    switchValue = power(2, (6-i-1));
                    if (poll-switchValue >= 0) {
                        switches[i] = 1;
                        poll -= switchValue;
                    }            
                }
    Damit hab ich ziemlich genau die Werte der Taster. 0 = nicht gedrückt, 1 = gedrückt.

    Softwareseitig beheben heisst in diesem Fall:

    Probier aus, was du für Werte bekommst. Dazu einfach ein kleines Programm schreiben, das in einer Endlosschleife die Taster abfrägt (am besten nach jeder Abfrage eine Pause von 1000ms oder so) und über die IR Schnittstelle an den PC sendet.

    Dort liest du im Hyperterminal die Werte ab und siehst dann, welchen Wert du für welchen Taster bekommst.

    Am besten probierst du erstmal jeden Taster einzeln. Dann hast du die Einzelwerte (die bei gleichzeitigem Drücken nur addiert werden).

    Wenn du die hast, kannst du deinen Code dementsprechent modifizieren.
    Unwissenheit ist ein Segen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.10.2005
    Alter
    35
    Beiträge
    6
    EDIT:
    sry, hatte alles nach der ersten Zeile deines Codes übersehen...Was macht power()?
    Für dich ist ein Robot ein Robot. Von Menschen hergestellt und wenn nötig von Menschenhand zerstört. Nur hast du leider noch nicht mit ihnen gearbeitet, und so kennst du die Realität überhaupt nicht.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    41
    Beiträge
    357
    Ja das kann leicht passieren. Die Code-Boxen könnten etwas größer sein....

    power(2,x) bedeutet einfach 2^x, also in Worten "Zwei hoch x".

    Code hier:

    Code:
    int power(int base, int e) {
        if (e == 0) { return 1; }
        else if (e == 1) { return base; }
        else { return base*power(base, e-1); }
    }
    Unwissenheit ist ein Segen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.10.2005
    Alter
    35
    Beiträge
    6
    Das ist aber nicht so sonderlich performant, oder? Kann es sein, dass es ein paar Sekunden dauert, power() auszuführen?

    ich hatte bisher follgendes:
    Code:
    int k[6]={0, 0, 0, 0, 0, 0}; 
    int b=PollSwitch();
    int i;
    for(i=0;i<k.length;i++){
         k[i]=b%2;
         b=(b-k[i])/2;
    }
    ich glaube das geht schneller, ist da irgendwo ein Fehler drin? Lag mein Problem vielleicht daran, dass ich k leer gelassen hatte?
    Für dich ist ein Robot ein Robot. Von Menschen hergestellt und wenn nötig von Menschenhand zerstört. Nur hast du leider noch nicht mit ihnen gearbeitet, und so kennst du die Realität überhaupt nicht.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo,

    ich verstehe nicht ganz, warum ihr die Tastenauswertung so kompliziert mit arrays macht.
    Geht es nicht viel einfacher mit einem character als Tastenwert und bitweise vergleichen?

    Code:
    ...
    unsigned char t1, t2;
    ...
    t1=PollSwitch();
    t2=PollSwitch();
    if (t1 && t1 == t2) 
    {
      if (t1 & 0x01) do_K6();
      if (t1 & 0x02) do_K5();
      if (t1 & 0x04) do_K4();
      ...
    }
    ...
    2x o. 3x aufrufen von PollSwitch() und vergleichen der Rückgabewerte korrigiert Schwankungen der A/D Werte durch Lade/Entladevorgänge von C7.

    Vorraussetzung ist natürlich, das die PollSwitch() Funktion auch tatsächlich
    die richtigen Werte liefert (2er Potenzen). Deshalb erst mal mit einem Testprogramm die Werte sich ausgeben lassen.

    Code:
    ...
    char str[8];
    unsigned char t1,t2;
    ...
    t1=PollSwitch();
    t2=PollSwitch();
    
    if (t1 && t1 == t2) 
    {
      sprintf(str, "%3d\r\n", t1);
      SerWrite(str, 5);
    }
    Falls K1 o. K2 nicht ganz korrekte Werte liefern kann, man dies in der PollSwitch() Funktion anpassen.
    Guckt ihr hier:
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=12475
    https://www.roboternetz.de/phpBB2/ze...ag.php?p=82999


    Gruß Peter

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress