- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: ASURO Programmieren?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2008
    Beiträge
    27
    Anzeige

    Powerstation Test
    also ir hat unsigned char....
    wie muss ich des mit dem ascii code schreine dass wenn ich w drücke asuro nach vorne fährt???

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    32
    Beiträge
    239
    im hyperterminal (oder anderes programm) musst du nichts berücksichtigen, nur im code musst du wie oben erwähnt if (ir == 'w') schreiben. das habe ich damit gemeint
    mfg hai1991

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

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2008
    Beiträge
    27
    also ich hab jetzt ein programm geschrieben....:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       unsigned char ir;
    
       while(1) {
    SerRead(ir, 1, 0);
    if (ir == "w"){
    MotorDir(FWD, FWD);
    MotorSpeed(100, 100);
    }
    if (ir == "s"){
    MotorDir(RWD, RWD);
    MotorSpeed(100, 100);
    }
    
    }
    }
    das funktioniert aber nicht..

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Ich schätze mal hai1991 meint, dass du im Programm eine unsigned char variable deklarieren musst. In diese schreibst du dann mittels serread den Wert. Dieser wird mittels Hyperterminal übertragen.
    Und dann machst du einfach if (die unsigned char variable (255 zeichen, also passen alle asciis rein) == 'w') also vergleiche ob "w" gedrückt wurde -> und dann eben Motor bewegen.

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2008
    Beiträge
    27
    ich check des nich mit dem ascii....
    was muss ich da jetzt genau schreiben???

  6. #16
    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

    " - Bei Zeichenketten (strings, auch bei Länge==1!)
    ' - Bei Einzelzeichen wenn der ascii-Wert des Zeichens gemeint ist

    z.B.: 'a' ist dann ein Platzhalter für eine Konstante mit 65. Man könnte auch direkt 65 schreiben. Oder als Hex oder Bin, entscheidend ist nur, wie man als Programmierer leichter erkennt was gemeint ist. Wenn man bestimmte Bits testen will sagt (PINC & &b110010) mehr aus als (PINC & 50) und wenn man Zeichen einer Tastatur prüfen will ist ein 'w' oder 'Z' einfacher als direkt mit dem asciiwert zu vergleichen.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       unsigned char ir[]="123"; // Seite 65 der asuro-Anleitung
    
       while(1) {
    		SerRead(ir, 1, 0);
    		if (ir[0] == 'w')
    		{
    			MotorDir(FWD, FWD);
    			MotorSpeed(100, 100);
    			StatusLED(RED);
    		}
    		if (ir[0] == 's')
    		{
    			MotorDir(RWD, RWD);
    			MotorSpeed(100, 100);
    			StatusLED(YELLOW);
    		}
    		if (ir[0] == 'x')
    		{
    			MotorDir(BREAK, BREAK);
    			MotorSpeed(0, 0);
    			StatusLED(GREEN);
    		}
    	}
    }
    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. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2008
    Beiträge
    27
    thx......


    es funktioniert...!!!

    aber asuro fährt solange bis ich eine andere aste drücke....
    wie kann ich des machen das asuro stoppt wenn ich die taste los lasse??

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Bin mir nicht sicher aber versuch mal am Ende der while ir auf 0 zu setzen.

    Eigentlich müsste er stehen bleiben wenn du die Taste loslässt weil beim nächsten Schleifendurchlauf ja kein Buchstabe mehr empfangen wird. Aber vielleicht schreibt das Programm intern einfach nichts neues nach ir wenn nichts empfangen wird und somit bleibt die zuvor gedrückte Taste erhalten. Bin mir aber nicht sicher, dazu müsste man sich serRead genauer ansehen.

  9. #19
    Neuer Benutzer
    Registriert seit
    29.09.2008
    Ort
    Münster
    Alter
    35
    Beiträge
    1
    Guten Morgen

    Also wenn die Taste(z.B 'w') los gelassen wurde, ist ir immer noch "w23" . Beginnt jetzt der neue Schleifendurchlauf, wird mit dem Befehl SerRead(ir,1,0) so lange gewartet bis ein Zeichen eingelesen wurde. Gibst du 10 Sekunden lang kein Zeichen, führt dieser Befehl auch da zu, dass der Schleifendurchlauf 10 Sekunden lang nicht weiter geht.
    Dein Asuro fährt deswegen einfach weiter, weil du ihm nicht gesagt hast, dass er stoppen soll, wenn kein Zeichen mehr eingelesen wird.

    Wenn man z.B. folgendes Programm schreibt,

    Code:
     
    #include "asuro.h"
    
    int main(void)
       {
           char i = 5;
    
           while(1)
           {
                if (i == 5)
                {
                     MotorDir(FWD,FWD);
                     MotorSpeed(120,120);
                     i = 0;
                }
            }
          return 0;
      }
    Hier fährt der Asuro los, da i = 5 ist und setzt danach i auf 0. Bei den darauf folgenden Schleifendurchläufen passiert gar nix, da die If-Bedingung nicht erfüllt wird. Der Asuro fährt jetzt so lange weiter bis die Batterien alle leer sind, da nirgendwo steht, das er stoppen soll, wenn i nicht mehr 5 ist.

    Also die Lösung deines Problems:
    -ändere SerRead(ir,1,0) auf SerRead(ir,1,1) oder eine andere Zahl >0, damit er nicht unendlich lang auf die Eingabe eines Zeichens wartet (näheres im Handbuch auf S.65)

    -setze nach jedem Schleifendurchlauf ir[0] = 'x' , somit ist beim nächsten Schleifendurchlauf ir = "x23" und da nun nicht mehr bei SerRead gewartet wird, wird die 3. If-abfrage erfüllt und dein Asuro hält automatisch nach loslassen der Taste an.

    (hab ich nicht ausprobiert, ist mir nur spontan eingefallen, müsste aber trotzdem klappen)

    Gruß

    Flo

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    27.09.2008
    Beiträge
    27
    ich schreibe in meinem programm jetzt ir = 'y'
    (ich hab jetzt eine andere if abfrage geschrieben mit y....)

    aber jetzt kommt immer diese fehlermeldung...:

    error: incompatible types in assignment

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen