- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 17

Thema: Brauche Hilfe beim Verbinden von zwei Teilprogrammen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.11.2011
    Beiträge
    9

    Brauche Hilfe beim Verbinden von zwei Teilprogrammen

    Hallo Leute,

    ich möchte ein Linienverfolgungsprogramm mit einem Kollisionsprogramm verbinden aber leider habe ich noch große Probleme beide mit einander zu verbinen.
    Ich hoffe es kann mir jemand weiterhelfen.

    Hier die beiden Teilprogramme.

    Kollisionsprogramm:

    #include "asuro.h"

    int main(void){
    unsigned int i;
    Init();

    while(1){


    while(PollSwitch()==0)
    {StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(120,120);} //fahre vorwärts


    if(PollSwitch()!=0) // bis Schalter gedrückt wird
    {StatusLED(RED); // Rote Lampe an

    MotorDir(RWD,RWD); //Rückwärtsgang mit 120
    MotorSpeed(120,120);
    for (i=0;i<280;i++){Sleep(255);} //für 1 Sek zurückfahren
    MotorSpeed(0,0); // Motoren stoppen
    MotorDir(FWD,FWD); // Und Drehung einleiten für 1 Sek
    MotorSpeed (0,120);
    for (i=0;i<280;i++){Sleep(255);}
    MotorSpeed(0,0);
    }
    }
    return 0;
    }

    Linienverfolgung:

    #include "asuro.h"

    int main(void)
    {
    Init();

    while(1)
    {
    int line_data[2];
    LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
    // schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte

    FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
    int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
    int speed = 120;
    int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück

    while (line_data[1] > limit)
    {
    if (debug_mode)
    {
    SerWrite("rechts\r\n", 8 );
    PrintInt(line_data[1]);
    SerWrite("\r\n", 2);
    }
    BackLED(OFF, ON);
    MotorSpeed(0, speed);
    LineData(line_data);
    }

    while (line_data[0] > limit)
    {
    if (debug_mode)
    {
    SerWrite("links\r\n", 7);
    PrintInt(line_data[0]);
    SerWrite("\r\n", 2);
    }
    BackLED(ON, OFF);
    MotorSpeed(speed, 0);
    LineData(line_data);
    }
    MotorDir(FWD, FWD);
    MotorSpeed(speed, speed);
    }

    return 0;
    }

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Naja das Kollisionsprogramm kannst du ja so übernehmen wie das da steht. Du musst dann in das Programm nur eine weitere If-Abfrage machen um den Sensor auszulesen. Verstehst du den die beiden Einzelprogramme oder hast du da auch schon schwierigkeiten?
    Weil der Sinn ist ja das du es verstehst es bringt nichts wenn dir einer ein Programm schreibt was du nicht nachvollziehen kannst oder?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.11.2011
    Beiträge
    9
    Zugegeben nich zu 100%, aber das wichtigste verstehe ich glaube ich. ^^

    "Nur" eine weitere If-Abfrage? Ok, klingt ja im Grunde nicht so schwer, aber ich dachte der Asuro kann nicht zwei Sachen parallel machen. Also muss er die Linienverfolgung quasi aussetzen während er die Kollision hat und sich dreht?
    Ähm kann ich es auch anders herum machen, also das Kollisions- in das Linienverfolgungsprogramm einbinden? Würde das dann auch mit einer weiter If-Abfrage möglich sein?

    Und danke für deine Antwort

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Klar ist sogar die bessere Idee das so rum zu machen
    Du hast auch recht der Asuro kann keine zwei Sachen gleichzeitig machen. Du musst das alles nacheinander machen.
    Du nimmst dann einfach das Standart Linienfolgenprogramm und machst da eine If-Abfrage rein. Also falls der Schalter für die Kollisionsabfrage gedrückt wird soll er rückwärts fahren. Wenn nicht soll er weiter der Linie folgen.
    Also müsstest du eigentlich nur diese Zeilen:

    if(PollSwitch()!=0)
    {StatusLED(RED);

    MotorDir(RWD,RWD);
    MotorSpeed(120,120);
    for (i=0;i<280;i++){Sleep(255);}
    MotorSpeed(0,0);
    MotorDir(FWD,FWD);
    MotorSpeed (0,120);
    for (i=0;i<280;i++){Sleep(255);}
    MotorSpeed(0,0);
    }

    in das Linienfolgenprogramm reinschreiben. Das müsste eigentlich funktionieren.....

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.11.2011
    Beiträge
    9
    Ah oke, alles klar. Ich habe es jetzt folgendermaßen versucht. Leider kann ich es nicht compelieren, da ich auf dem PC an dem ich im moment bin nicht ProgrammersNotepad2 drauf ist.
    Noch eine zwischen Frage die Klammer nach else { ist schon nötig oder?

    #include "asuro.h"

    int main(void)
    {
    Init();

    while(1)
    {

    if(PollSwitch()!=0)
    {StatusLED(RED);

    MotorDir(RWD,RWD);
    MotorSpeed(120,120);
    for (i=0;i<280;i++){Sleep(255);}
    MotorSpeed(0,0);
    MotorDir(FWD,FWD);
    MotorSpeed (0,120);
    for (i=0;i<280;i++){Sleep(255);}
    MotorSpeed(0,0);
    }

    else{
    int line_data[2];
    LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
    // schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte

    FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
    int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
    int speed = 120;
    int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück

    while (line_data[1] > limit)
    {
    if (debug_mode)
    {
    SerWrite("rechts\r\n", 8 );
    PrintInt(line_data[1]);
    SerWrite("\r\n", 2);
    }
    BackLED(OFF, ON);
    MotorSpeed(0, speed);
    LineData(line_data);
    }

    while (line_data[0] > limit)
    {
    if (debug_mode)
    {
    SerWrite("links\r\n", 7);
    PrintInt(line_data[0]);
    SerWrite("\r\n", 2);
    }
    BackLED(ON, OFF);
    MotorSpeed(speed, 0);
    LineData(line_data);
    }
    MotorDir(FWD, FWD);
    MotorSpeed(speed, speed);
    }
    }
    return 0;
    }

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ja nach jedem if oder else muss der Teil der ausgeführt werden soll zwischen {} stehen

Ähnliche Themen

  1. PIC per USB mit PC verbinden... Brauche dringendst Hilfe!!
    Von itsgre.at im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 13
    Letzter Beitrag: 29.11.2011, 14:36
  2. Brauche Hilfe beim entrümpeln
    Von BoondockDuck im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 09.09.2008, 21:50
  3. Wie zwei externe EEproms auslesen? Brauche Hilfe beim Code
    Von Lightningman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 30.03.2008, 14:54
  4. brauche hilfe beim programmieren
    Von Anti süd im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 30.01.2008, 11:29
  5. brauche hilfe beim basteln
    Von over load im Forum Elektronik
    Antworten: 15
    Letzter Beitrag: 08.03.2006, 11:03

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests