-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Problem mit C!!!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.11.2004
    Beiträge
    41

    Problem mit C!!!

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo!

    Habe ein Problem!

    Asuro soll wenn Kollisionstaster gedrückt ist rückwärts fahren, nur habe ich das problem dass wenn ich den Taster loslasse wieder aus der Schleife rausfällt und wieder vorwärts fahrt!

    Mit Timer habe ich es probiert, hat aber irgendwie nicht geklappt!

    Der Code ist ein Grundgerüst, bitte um hilfe dass Asuro nach loslassen auch noch zurückfährt.



    P.S. meine C.lektüre ist zum vergessen, gibt es im netz wo freeware C-Bücher???

    Mfg
    Roland
    Code:
    #include "asuro.h"
    
    int main()
    {
    unsigned int i;
    
    Init();
    while(1)
    	{
    		if (PollSwitch() == 0) 
    			{
    				StatusLED (GREEN);
    				MotorDir(RWD,RWD);
    				MotorSpeed(120,120);
    			}
    				
    		else 
    			{
    				i==0;
    				StatusLED (YELLOW);
    				for(i=0;i < 847;i++); 
    					{
    				MotorDir(FWD,FWD);
    				MotorSpeed(200,200);
                                                        }
    		}
    }
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255

    Re: Problem mit C!!!

    Zitat Zitat von Dreamer001
    Asuro soll wenn Kollisionstaster gedrückt ist rückwärts fahren, nur habe ich das problem dass wenn ich den Taster loslasse wieder aus der Schleife rausfällt und wieder vorwärts fahrt!
    Du bräuchtest als ne Funktion, die dem Programmablauf einfach ne gewisse Zeit pausieren lässt, damit der Asuor erstr mal ne gewisse Zeit rückwärts fährt, bis der Taster wieder abgefragt wird. Die nennt sich _delay_ms(); und steht in der Datei delay.h.
    So kommst du dran:
    #include <util/delay.h>
    am Aunfagn des Programms, nach #include "asuro.h"

    Aufrufen könntest du sie dann über diese Funktion
    void warte (int loop) //loop: wartezeit in ms
    {
    int i;
    for(i=0;i<loop;i++) _delay_ms(1);
    }
    Der Parameter loop gibt die Wartezeit in Milisekunden an. Bei warte(500); würde der Asuro als ne halbe Sekunde rückwärts fahren.



    Zitat Zitat von Dreamer001
    P.S. meine C.lektüre ist zum vergessen, gibt es im netz wo freeware C-Bücher???
    C allgemein:
    http://de.wikibooks.org/wiki/C-Programmierung
    und die AVR-Spezifischen Sachen:
    http://www.mikrocontroller.net/artic...R-GCC-Tutorial

  3. #3
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    oder du lässt ihn einfach mit sleep() oder Msleep() abwarten, dann musst du nix weiter einbinden.

    ein tolles c-buch ist auch "c von a bis z", welches du hier
    http://www.pcronix.de/pronix-4.html
    lesen kannst (mit suchfunktion) und hier
    http://download.galileo-press.de/ope...on_a_bis_z.zip
    runterladen kannst (8,5 mb; ohne suchfunktion)
    kleinschreibung ist cool!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    03.11.2004
    Beiträge
    41
    erstmal danke!

    Das mit der Sleep-funktion hätte ich so schon probiert ging aber nicht

    wie könnte so ein Konstrukt aussehen??

    Mfg
    Dreamer001

    P.S. danke für die links!!!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2006
    Beiträge
    25
    Ungefähr so:
    Code:
    #include "asuro.h"
    
    int main()
    {
    unsigned int i;
    int zaehler;         //die ist neu
    
    Init();
    while(1)
       {
          if (PollSwitch() == 0)
             {
                StatusLED (GREEN);
                MotorDir(RWD,RWD);
                MotorSpeed(120,120);
    
                /*jetzt de interessante Teil, wir lassen Asuro 500 mal
                 *hintereinander ein kleines Päuschen einlegen*/
                for(zaehler = 0; zaehler <= 500; zaehler++)
                {
                  Sleep(74);  /*Bewirkt das Asuro genau 1 ms "schläft",
                               *er fährt dabei aber weiterhin rückwärts!*/
                }
              //Das wars, ab hier wieder normal weiter  
    
             }
                
          else
             {
                i==0;
                StatusLED (YELLOW);
                for(i=0;i < 847;i++);
                   {
                MotorDir(FWD,FWD);
                MotorSpeed(200,200);
                                                        }
          }
    }
    }
    Das funktioniert auch ohne extra-Sachen einzubinden mit der Asuro.h die mitgeliefert wird, wenn dir der Code oben nix sagt dann mach dich nochmal über die sogenannte "for-schleife" schlau, nützliches dingens.
    http://www.pronix.de/pronix-689.html

  6. #6
    Neuer Benutzer
    Registriert seit
    31.12.2006
    Ort
    Berlin
    Beiträge
    3
    Hallo, entschuldigt bitte,
    ich bin ein 0-Ahnung Programmierneuling.
    Habe meinem 13jährigem Sohn einen Asuro zu Weihnachten geschenkt,
    komplett aufgebaut (Testprogramm läuft ohne Fehler inc. Datenübermittlung via USB & RS232). Aber nun ist Vaters Wissen am Ende. Welche Bücher für einen Schnelleinstieg soll ich wählen, wie kann ich ihm was erklären was ich noch nie gemacht habe?
    Ich hoffe auf kompetente Hilfe.

    Mfg Axel

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Hier mal mein Ansatz:

    Code:
    /*  asuro fährt nach Anstoss einstellbare Zeit zurueck
        mic 3.1.2007
    */
    #include <asuro.h>
    
    unsigned long zurueckzeit; // Zeit Rueckwaerts in Millisekunden
    unsigned char sw;          // Zwischenspeicher für Schalter k1-k6
    
    int main(void) {
        Init();
    
        zurueckzeit=0;         // vorwärts losfahren
        MotorDir(FWD,FWD);
        MotorSpeed(150,150);
    
    /*  Achtung! Das funzt nur wenn die Taster richtig erkannt werden,
        sonst bleibt der asuro auf freier Strecke stehen!
    */
    
    do {
        sw=PollSwitch();  // Schalter einlesen und für eine Runde speichern
    
        if (!zurueckzeit && ((sw==2) || (sw==16))) {
        zurueckzeit=Gettime()+1000; // Aktuelle Zeit plus x millisek. zurueck
        MotorSpeed(0,0);
        MotorDir(RWD,RWD);   // Bei unterschiedlichen Geschwindigkeiten
        MotorSpeed(100,100);  // dreht der asuro beim Zurueckfahren ;-) 
        }
    
        if (zurueckzeit && (Gettime() > zurueckzeit)) { // Lange genug zurueck?
        MotorSpeed(0,0);
        MotorDir(FWD,FWD);    
        MotorSpeed(150,150);
        zurueckzeit=0;
        }
    
        }while (1); // mainloop (Endlosschleife)
    
        return 0;
    }
    (Ich werte hier nur zwei Taster aus wegen der Störimpulse der Mots)

    @AxelZ: Ich denke, dass asuro-Buch wäre für dich das Richtige

    Gruß

    mic

  8. #8
    Neuer Benutzer
    Registriert seit
    31.12.2006
    Ort
    Berlin
    Beiträge
    3
    Hallo mic und alle anderen,
    schönen Dank für die Idee, wenn Du das blaue Buch mit der Zusatzplatine meinst, das habe ich schon vor dem Asuro gekauft um überhaupt eine Vorinfo
    zu haben. Die weisen aber in dem Buch immer auf die Anleitung hin aber die Beschreibungen in der Anleitung sind für mich relativ Hand und Fußlos ( nicht Kopflos ) aber eben schwer zu verstehen.
    Danke
    Mfg Axel

  9. #9
    Neuer Benutzer
    Registriert seit
    31.12.2006
    Ort
    Berlin
    Beiträge
    3
    Hallo mic und alle anderen,
    schönen Dank für die Idee, wenn Du das blaue Buch mit der Zusatzplatine meinst, das habe ich schon vor dem Asuro gekauft um überhaupt eine Vorinfo
    zu haben. Die weisen aber in dem Buch immer auf die Anleitung hin aber die Beschreibungen in der Anleitung sind für mich relativ Hand und Fußlos ( nicht Kopflos ) aber eben schwer zu verstehen.
    Danke
    Mfg Axel

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Zitat Zitat von AxelZ
    Hallo mic und alle anderen,
    schönen Dank für die Idee, wenn Du das blaue Buch mit der Zusatzplatine meinst, das habe ich schon vor dem Asuro gekauft um überhaupt eine Vorinfo zu haben.
    Aha, das wusste ich ja nicht. Überhaupt ist es sehr schwer euch Tipps zu geben da ich euren "Wissensstand" nicht kenne. Deshalb mal ein kleiner Check:

    Könnt ihr eigene Leerschleifenprogramme erstellen und diese zum asuro flashen und dann Testen?

    Wenn ja, ist euch auch halbwegs klar, was ihr da macht?

    Wenn nein, wo klemmts?

    -Programme erstellen (Welche Software? Sinn eines Programms?)
    -Compilieren (Hä? Welcher Compiler? Version?)
    -Flashen (Welche Software? Version?)
    -Testen (Was soll passieren? Was funzt und was nicht? Quellcode des Programms?)

    Wenn ihr mit "ja" antworten könnt, habt ihr die Grundlagen fürs "echte" Programmieren des asuros schon und wir können loslegen. Wenn nicht müssen wir noch klären, wo es bei euch klemmt.

    gruß

    mic

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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