-
        

Ergebnis 1 bis 7 von 7

Thema: Programm wird nicht ausgeführt und clean löscht auch die tes

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.04.2006
    Ort
    Marbach am Neckar
    Alter
    27
    Beiträge
    56

    Programm wird nicht ausgeführt und clean löscht auch die tes

    Anzeige

    Hallo
    Ich habe folgende Probleme...
    Das erste Problem ist, dass wenn ich das clean tool von der cd benutze auch die .hex datei gelöscht wird.
    Das zweite Problem ist, dass obwohl ich das Linienfolgeprogramm aus Mehr spaß mit Asuro 1 1:1 abtippe ich es zwar compilieren kann, sich aber nichts tut wenn ich den asuro dann anschalte.

    Gruß Chris

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo

    kannst du das programm mal posten?
    ich kenne den code aus mehr spaß mit asuro 1 nicht
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    sich aber nichts tut wenn ich den asuro dann anschalte.
    Nach dem Abtippen und VOR dem Kompilieren muss man das Programm abspeichern! (bei NP2) Möglicherweise kompillierst du ein leeres Programm.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.12.2008
    Ort
    Landshut
    Beiträge
    31
    Hallo,
    ich glaube, das ist es:
    Code:
    #include "asuro.h"
    #define SPEED 0x8F
    
    int speedLeft, speedRight;
    unsigned int lineData[2];
    int ADOffset;
    
    void LineLeft(void)
    {
      speedLeft += 1;
      if (speedLeft > 0xFE) speedRight = 0xFF;
    }
    
    void LineRight (void)
    {
      speedRight += 1;
      if (speedRight > 0xFE) speedRight = 0xFF;
    }
    
    int main (void)
    {
      int i;
      unsigned char j;
    
      Init();
      FrontLED(ON);
      for(j = 0; j < 0xFF; j++){
        LineData(lineData);}
      LineData(lineData);
      ADOffset = lineData[0] - lineData[1];
      speedLeft = speedRight =SPEED;
      for(;;) {
        LineData(lineData);
        i = (lineData[0] - lineData[1]) - ADOffset;
        if ( i > 4) {
          StatusLED(GREEN);
          LineLeft();
        }
        else if ( i < -4) {
          StatusLED(RED);
          LineRight();
        }
        else {
          StatusLED(OFF);
          speedLeft = speedRight = SPEED;
        }
        MotorSpeed(speedLeft,speedRight);
      }
      return(0);
    }
    ich hoffe, ich hab mich nicht vertippt!!
    auf meinem ASURO scheint es zu funktionieren!

    mfg Chrissi
    Der Computer macht immer das, was du ihm sagst, aber nicht immer das, was du willst...

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.04.2006
    Ort
    Marbach am Neckar
    Alter
    27
    Beiträge
    56
    Das Problem mit dem Compilieren hat sich erledigt nun habe ich aber folgendes problem:
    Der Asuro fährt wenn er die Linie verliert von der linie weg, oder er fährt in kurven einfach gerade aus ich würde das gerne insofern ändern, dass der asuro dann wieder auf die linie zufährt wenn er sie wieder verloren hat und dass er vor allem eher zackig ziemlich schnell gegen steuert und nicht so weich und langsam.

    gruß Chris

    edit: ganz vergessen zu sagen dass ich die funktion LineData nicht versteh und deswegen auch nicht weiß wie ich das ändern soll.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Code:
    LineData(lineData);
    bewirkt, dass die aktuellen Werten der beiden Fototansistoren des Linienfolgers in die Variable lineData geschrieben werden.
    Diese ist als
    Code:
    unsigned int lineData[2];
    deklariert und das bedeutet, dass sie eigentlich aus zwei Speicherplätzen besteht: lineData[0] und lineData[1]. Somit steht nach
    LineData(lineData); der Wert des linken Fototransistors in lineData[0] und der Wert des rechten in lineData[1].
    In obigem Programm wird mit
    Code:
    ADOffset = lineData[0] - lineData[1];
    zuerst der Unterschied der beiden Fototransistoren festgestellt und dann in der Endlosschleife mit
    Code:
    LineData(lineData); 
    i = (lineData[0] - lineData[1]) - ADOffset;
    jeweils der tatsächliche Unterschied abzüglich des ursprünglichen Unterschieds festgestellt.
    Wenn dieser Unterschied größer als 4 ist, wird die Funktion LineLeft() ausgeführt, wenn er kleiner ist als -4 wird LineRight() ausgeführt und sonst fährt er einfach weiter geradeaus.

    Ich hoffe, dass es jetzt einigermassen verständlich geworden ist, was LineData() macht.

    Gruß
    Günther

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.04.2006
    Ort
    Marbach am Neckar
    Alter
    27
    Beiträge
    56
    Hallo Günther
    Danke für die Erklährung das hat auf jeden Fall geholfen
    Leider bin ich nicht früher dazu gekommen hier nochmal rein zu schauen, da ich grade etwas im Schulstress bin.
    Gruß
    Christian

Berechtigungen

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