- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 45

Thema: Programm Starten und Stoppen über Hyper Terminal

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173

    Programm Starten und Stoppen über Hyper Terminal

    //[code]
    #include "asuro.h"
    #include "stdlib.h"
    int main(void)
    {

    int x=0,LANG=0,z=0,t=0;

    unsigned int data[2];
    char data0[5], data1[5];
    Init();



    x++;
    if (x > 1000)
    LANG++;
    if (x > 1000)
    x = 0;


    while( 1 )
    {

    char message[] = "1";
    SerRead(message,1,0);



    if(message[0] == 'g')

    {FrontLED(ON);



    {

    MotorDir(FWD,FWD);
    MotorSpeed(110,100);
    BackLED(OFF,OFF);



    if ( data[0] < 50 )

    {
    MotorDir(RWD,RWD);
    MotorSpeed(100,150);
    BackLED(ON,OFF);

    for(z=0 ; z < 40 ; z++){Sleep(216);}
    }


    if ( data[1] < 50 )

    {
    MotorDir(RWD,RWD);
    MotorSpeed(100,150);
    BackLED(OFF,ON);

    for(z=0 ; z < 40 ; z++){Sleep(216);}
    }
    }



    if (PollSwitch() >= 1)

    {
    MotorDir(RWD,RWD);
    MotorSpeed(255,255);
    BackLED(OFF,OFF);
    StatusLED(RED);

    for(z=0 ; z < 100 ; z++){Sleep(216);}
    }





    }
    else if (message[0] == 's')
    {
    MotorDir(FREE,FREE);
    MotorSpeed(0,0);
    FrontLED(OFF);
    StatusLED(OFF);
    }



    }

    return 0;
    }
    //[code]




    Mit dem Blauen Teil möchte ich das Programm über Hyper T starten und Pausieren (Stoppen)

    wenn ich das mache funkt aber der Liniensensor nicht mehr
    hat da wer ne idee was es da heben könnte


    mfg Problem

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    wenn ich das mache funkt aber der Liniensensor nicht mehr

    wie meinst du das?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Mein roby fährt dann immer über den schwarzen Fleck drüber

    Noch was wichtiges wenn ich g drücke fährt er rückwärts los wenn ich nochmal g drücke färht er vorwärts noch mal g rückwärts .......... wenn ich dann mal s drücke bleibt er stehen


    kennst du dich aus

    ein bisschen komisch da ich ja über das ganze Programm die {} Klammer gemacht habe


    mfg

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    wozu sind data0[] und data1[] ??

    Die werden gar nicht gebraucht.

    Banale Antwort auf dein Problem: Es fehlt die Liniensensorabfrage:
    Code:
    LineData(data);
    ohne dem funktioniert es natürlich nicht....

    Gruß

    DL

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    #include "asuro.h"
    #include "stdlib.h"
    int main(void)
    {

    int x=0,LANG=0,z=0,t=0;

    unsigned int data[2];
    char data0[5], data1[5];
    Init();



    x++;
    if (x > 1000)
    LANG++;
    if (x > 1000)
    x = 0;


    while( 1 )
    {

    char message[] = "1";
    SerRead(message,1,0);



    if(message[0] == 'G')


    {FrontLED(ON);

    { LineData(data);

    itoa (data[0], data0, 5);
    itoa (data[1], data1, 5);

    SerWrite (data0, 4);
    SerWrite (" links\n\r", ;

    SerWrite (data1, 4);
    SerWrite (" rechts\n\r", 9);

    for (t=0; t < 2; t++)
    {
    Sleep (72);
    }
    }

    {

    MotorDir(FWD,FWD);
    MotorSpeed(110,100);
    BackLED(OFF,OFF);



    if ( data[0] < 50 )

    {
    MotorDir(RWD,RWD);
    MotorSpeed(100,150);
    BackLED(ON,OFF);

    for(z=0 ; z < 40 ; z++){Sleep(216);}
    }


    if ( data[1] < 50 )

    {
    MotorDir(RWD,RWD);
    MotorSpeed(100,150);
    BackLED(OFF,ON);

    for(z=0 ; z < 40 ; z++){Sleep(216);}
    }
    }



    if (PollSwitch() >= 1)

    {
    MotorDir(RWD,RWD);
    MotorSpeed(255,255);
    BackLED(OFF,OFF);
    StatusLED(RED);

    for(z=0 ; z < 100 ; z++){Sleep(216);}
    }





    }
    if(message[0] == 'S')
    {
    MotorDir(FREE,FREE);
    FrontLED(OFF); //Dieser Teil müste eigentlich so funktonieren oder
    StatusLED(OFF);
    }


    }

    return 0;
    }

    so sieht jetzt aus funkt auch nicht


    sie data sind dass ich am hyper T sehe wie groß der WErt der Sensoren ist

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Es macht überhaupt keinen Sinn hier im RN-Forum und auch bei arexx wegen jedem minimalen Problemchen einen neuen Thread zu starten. Versuche es selbst zu lösen sonst lernst du es nie. Ich sag mal grob zwei Tage eigenes Ausprobieren sollten schon vergehen bevor man sich hilfesuchend in einem Forum meldet.

    Und noch ein Tipp: Verwende mehr Kommentare. Zum einen wird dir selbst dann klar, was du da machst. Zum anderen können wir leichter nachvollziehen, was du machen willst. Programme mit Kommentaren braucht man auch nicht mit farbigen Markierungen versehen und kannst deshalb die Codetags verwenden. Für meinen Geschmack verwendest du auch zuviele Leerzeilen, dadurch werden dein Programme für mich nahezu unleserlich.

    Gruß

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

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Ok werde ich machen

    Ich habe gedacht ich machs mit farbe das es übersichtlicher wird

    mfg

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    In deinem Thread auf das Arexx Forum habe ich geschrieben das entweder den Deklaration von de message 'Zeichenketten' oder den Standard-wert von SerRead (wann kein Zeichen empfangen wird) den eintrit von den if-abfragen verhindert. Aber nach weitere Gedanken bin ich sicher das den SerRead Befehl dein komplete Program Blockiert biss ein Zeichen empfangen wird. Dein Asuro reagiert nicht auf den Liniensensor weil er einfach nicht weiter als SerRead geht.(Eben wenn du doch den fehlende LineData(data); in dein Program geschrieben hatte.) Den 0 parameter am ende von SerRead meint das es immer warten bleibt biss irgendeiner Zeichen empfangen wird. Das es Forwärts oder Ruckwärts fahrt ist nicht ein Zeichen das es dauernt dein Code ablauft. Den Motoren drehen einfach dumm weiter.

    Das soll besser gehen:

    #include "asuro.h"
    #include "stdlib.h"
    int main(void)
    {

    int x=0,LANG=0,z=0,t=0;

    unsigned int data[2];
    char data0[5], data1[5];
    char message[] = "1";

    Init();

    ...

    while( 1 )
    {

    SerRead(message,1,1); //1 Zeichen empfangen, weiter gehen nacht 1 Zeichen 'Zeitbasis'!

    LineData(data); //Messe die Linienhelligkeit




    if(message[0] == 'G')
    ...

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Das empfangene zeichen im message zuruck senden zum Rechner mit SerWrite kann auch helfen verstehen wieso es nicht Korrekt reagiert. Einfach darauf verlassen das das Zeichen Korrekt ankommt bei Asuro kann man nicht.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Ich möchte in diesen Forum weiterschreiben

    Hier das steht in asuro.c drinen

    Code:
    void SerRead(unsigned char *data, unsigned char length,unsigned int timeout)
    {
       unsigned char i = 0;
       unsigned int  time = 0;
       UCSRB = 0x10; // enable receiver
       /* non blocking */
       if (timeout != 0) {
          while (i < length && time++ < timeout) {
             if (UCSRA & 0x80) {
                data[i++] = UDR;
                time = 0;
             }
          }
          if (time > timeout) data[0] = 'T';
       }
       /* blocking */
       else {
          while (i < length) {
             if (UCSRA & 0x80)
                data[i++] = UDR;
          }
       }   
    }

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen