-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Schalter auswerten funktioniert nicht

  1. #1
    dasisch
    Gast

    Schalter auswerten funktioniert nicht

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi Leutz,

    bin noch relativ unbeholfen, da ich es vorgestern geschafft habe, meinen Asuro zusammenzulöten und ich vorher noch nichts hardwareseitig programmiert habe. Es funktioniert auch alles (Selbsttest ist wunderbar durchgelaufen) und ich habe auch schon ein paar Dinge programmiert. Allerdings bleibe ich immer bei den Tastsensoren hängen. Ich möchte die gern auswerten und bin jetzt dem Schema des Selftests gefolgt. Kann mir vielleicht jemand sagen, wo der Fehler liegt, dass die Tastsensoren in meinem Programm nicht ausgewertet werden?

    Code:
    #include "asuro.h"
    
    void Msleep (int dauer) 
    {
        int z; 
        for (z = 0; z < dauer; z++)  
            Sleep (36); 
    } 
    
    void beruehrstop ()
    {
      unsigned char sw;
      sw = PollSwitch();
      
      if (sw & 0x01)
        MotorDir(BREAK,BREAK);
      if (sw & 0x02)
        MotorDir(BREAK,BREAK);
      if (sw & 0x04)
        MotorDir(BREAK,BREAK);
      if (sw & 0x08)
        MotorDir(BREAK,BREAK);
      if (sw & 0x10)
        MotorDir(BREAK,BREAK);
      if (sw & 0x20)
        MotorDir(BREAK,BREAK);
    }
    
    void beschleunigen (int beschl, int geschwindigkeit)
    {
      int a=90;
      for (a=90;a<geschwindigkeit;++a)
      {
        MotorDir(RWD,RWD);
    	MotorSpeed(a,a);
    	BackLED (ON, ON);
    	Msleep(beschl);				
    	beruehrstop();
      }
      BackLED (OFF, OFF);
    }
    
    int main(void)
    {
      Init();
      
      beschleunigen (300, 200);
      Msleep (2000);
      MotorDir(BREAK,BREAK);
      
     while(1);
     return 0;
    }
    Wäre euch sehr dankbar

    Viele Grüße und vielen Dank schonmal im Voraus!
    Sven

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    12.11.2006
    Ort
    SH
    Alter
    31
    Beiträge
    69
    Du hast dein Programm in mehrere Funktionen aufgeteilt. Der Asuro springt immer zuerst in die Main-Funktion, dort müsstest du dann zB. dein beruehrstop aufrufen.
    Außerdem hast glaub ich eine Funktion Msleep genannt. In der neuen Lib ist Msleep schon vergeben, das könnte auch Probleme geben.

    Was gibt er dir denn aus, wenn du kompilierst?

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.11.2006
    Ort
    SH
    Alter
    31
    Beiträge
    69
    if (sw & 0x01)
    MotorDir(BREAK,BREAK);
    if (sw & 0x02)
    MotorDir(BREAK,BREAK);
    if (sw & 0x04)
    MotorDir(BREAK,BREAK);
    if (sw & 0x0
    MotorDir(BREAK,BREAK);
    if (sw & 0x10)
    MotorDir(BREAK,BREAK);
    if (sw & 0x20)
    MotorDir(BREAK,BREAK);
    Du fragst hier alle Taster einzeln ab, das brauchst du garnicht, du kannst auch alle gleichzeitig auswerten.
    --> if (PollSwitch()>0)
    MotorDir(BREAK,BREAK);
    Außerdem müssten die letzten beiden 16 und 32 statt 10 und 20 heißen.

  4. #4
    dasisch
    Gast
    Hi,

    danke für die schnelle Antwort.

    Er gibt nichts negatives aus - sagt auch er hätte 0 Fehler gefunden. Ich habe die neue lib nicht installiert, sodass es da eigentlich keine Probleme geben sollte mit der Msleep (wird ja auch nichts angezeigt). Die Funktion beruehrstop habe ich ja in der zweiten Funktion aufgerufen (in der beschleunigen), die widerum in der main-funktion aufgerufen wird. Wenn ich beruehrstop in der main-funktion aufrufe, dann wird ja während dem Beschleuinigen nicht überprüft, ob einer der Schalter gedrückt wurde...

    Ich weiss nicht so ganz weiter, weil ohne Taster ist das alles bischen blöd...

    Viele Grüße,
    Sven

    [edit] da war ich wohl etwas spät. werde das mit dem gesamtauswerten ausprobieren und melde mich dann zurück. wer trotzdem nochwas dazu weiss, nur zu

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.11.2006
    Ort
    SH
    Alter
    31
    Beiträge
    69
    Ach ja, ich hab deine Funktion beschleunigen mit deiner Variable beschl durcheinander gebracht ^^
    Ich hab leider nur die neue Library drauf. Würd dir gerne helfen, aber ich hatte Probleme bis die neue Lib bei mir funste und will jetzt nicht wieder auf die alte umsteigen. Never change a running system.
    Beschreib dochmal was du von deinem Programm erwartest.

  6. #6
    dasisch
    Gast
    also eigentlich erwarte ich ja nur, dass er stopt, wenn er irgendwo dran fährt. hab das problem auch herausgefunden. scheinbar hat er ein problem, wenn ich die funktion beruehrstop() nach dem Msleep aufrufe. Habs jetzt davor gesetzt und jetzt funzts einigermaßen (das problem ist nur, dass ein Schalter bei längerem Drücken irgendwie immer so aussetzer hat...) vielen dank auf jeden fall nochma für die hilfe!

    das mit der neuen lib läuft bei mir auch garnicht. ich krieg die nicht mal installiert. liegt vielleicht daran, weil ich auch noch delphi installiert hab und da musste ich ohnehin schon die pfade für das programmers notepad neu eintragen. aller anfang ist schwer

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    die zahlen sind ok.

    0x10 = 16
    0x20 = 32

    In dem programmcode oben wird beruehrstop() gar nciht aufgerufen. postest du mal deinen neuen programmcode?
    kleinschreibung ist cool!

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    12.11.2006
    Ort
    SH
    Alter
    31
    Beiträge
    69
    Ich hab für die Taster auch ewig gebraucht.
    Freut mich, dass es jetzt klappt.
    Ich hatten den gleichen Fehler, wie du, dass er mir andre Werte ausgeben hat, wenn ich einen Taster länger gedrückt habe.
    Versuch mal etwas mit dem Kondensator C7 rumzuspielen. Ich habe ihn jetzt ganz rausgenommen und seit dem die besten Werte.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    12.11.2006
    Ort
    SH
    Alter
    31
    Beiträge
    69
    Doch beruehrstop wird in der beschleunigen-Funktion aufgerufen.
    Ach ja, ich sollt mich endlich mal mit dem Zahlensystem auseinander setzen.

  10. #10
    dasisch
    Gast
    Code:
    #include "asuro.h"
    
    void Msleep (int dauer) 
    {
        int z; 
        for (z = 0; z < dauer; z++)  
            Sleep (36); 
    } 
    
    void beruehrstop ()
    {
      unsigned char sw;
      sw = PollSwitch();
      
      if (sw & 0x01)
        MotorDir(BREAK,BREAK);
      if (sw & 0x02)
        MotorDir(BREAK,BREAK);
      if (sw & 0x04)
        MotorDir(BREAK,BREAK);
    	break;
      if (sw & 0x08)
        MotorDir(BREAK,BREAK);
      if (sw & 0x10)
        MotorDir(BREAK,BREAK);
    
      if (sw & 0x20)
        MotorDir(BREAK,BREAK);
    }
    
    void beschleunigen (int beschl, int geschwindigkeit)
    {
      int a=90;
      for (a=90;a<geschwindigkeit;++a)
      {
        MotorDir(RWD,RWD);
    	MotorSpeed(a,a);
    	BackLED (ON, ON);
    	beruehrstop();
    	Msleep(beschl);				
      }
      BackLED (OFF, OFF);
    }
    
    int main(void)
    {
      Init();
      
      beschleunigen (300, 200);
      Msleep (2000);
      MotorDir(BREAK,BREAK);
     
     while(1);
     return 0;
    }
    Apropos Zahlencodes: Kann mir jemand sagen, wo ich rauskriege, was das alles für Zahlencodes sind und was die bedeuten? In der selftest stehen noch mehr 0x... drin, wie beispielsweise 0xFE00. aber leider habe ich keinen blassen schimmer, was die bedeuten.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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