- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: neuling braucht hilfe beim programmieren

  1. #1

    neuling braucht hilfe beim programmieren

    Anzeige

    Praxistest und DIY Projekte
    hallo

    ich will folgendes programm schreiben asuro soll mit den taster vorraus im zimmer rumfahren und wenn k1, k2 oder k3 gedrückt wird sich rechtsrum drehen wenn k4, k5 oder k6 gedrückt wird sich linksrum drehen und danach wieder geradeaus weiterfahren allerdings kommt wenn ich make ausführe immer error:
    parse error before '[' token (in Zeile 8 )
    parse error before "else" (in Zeile13 )
    parse error before "else" (in Zeile 18 )
    hier mein programmcode


    #include "asuro.h"

    int main(void)
    {
    int i;
    Init();
    while(1);
    if((PollSwitch()& [0x01]&[0x02]&[0x04])) <-- zeile 8
    MotorDir(FWD,FWD);
    MotorSpeed(150,90);
    for(i=0;i<790;i++)
    {Sleep(144);}
    else if((PollSwitch()& [0x08]&[0x16]&[0x32])) <-- zeile 13
    MotorDir(FWD,FWD);
    MotorSpeed(90,150);
    for(i=0;i<790;i++)
    {Sleep(144);}
    else <-- zeile 18
    MotorDir(RWD,RWD);
    MotorSpeed(120,120);
    return 0;
    }
    vielen dank im vorraus
    gruß
    philipp

  2. #2

  3. #3
    das hab ich bereits entdeckt allerdings würd ich gerne verstehen was ich bei meiner programmierung falsch mache damit später nicht dauern etwas aus dem forum kopieren muss.
    Philipp

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    Was willst du genau mit den Zahlen in eckigen Klammern bezwecken? Ich weiß leider nicht, wofür die stehen sollen.

    Falls du 0x1 & 0x2 & 0x4 meinst, wirst du trotzdem was anderes wollen, als dies bewirkt. Denn dabei kommt wohl 0 raus. Du brauchst eher 0x1 | 0x2 | 0x4. Setz den Ausdruck aber noch in Klammern, also so:
    PollSwitch()& (0x01 | 0x02 | 0x04)

    Ansonsten kann ich auf Anhieb nichts erkennen. Könnte aber auch dran liegen, dass der Code ungünstig formatiert ist, was ihn sehr unübersichtlich macht.

  5. #5
    Hallo ich hab hier ein ähnliches Beispiel,
    hier habe ich aber nicht mit 'if'-Funktionen gearbeitet sondern mit 'switch' und 'case', was manchmal bei solchen Abfragen wesentlich einfacher ist.
    Angehängte Dateien Angehängte Dateien

  6. #6
    danke erstmal für die hilfe jetzt kommt keine fehlermeldung mehr,
    allerdings hab ich jetzt fogendes problem mein asuro fährt nicht los hab noch Leds eingebaut um die schalter zu prüfen die leuchten allerdings auch nicht wenn ich einen taster drücke

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    int i;
    	Init();
    	while(1);
    		if
    			((PollSwitch()&(0x01|0x02|0x04))){ 
    			MotorDir(FWD,FWD); 
    			MotorSpeed(150,90);
    			BackLED(OFF,ON);
    			for(i=0;i<790;i++)
    			{Sleep(144);}}
    		else if
    			((PollSwitch()&(0x08|0x16|0x32))){
    			MotorDir(FWD,FWD);
    			MotorSpeed(90,150);
    			BackLED(ON,OFF);
    			for(i=0;i<790;i++)
    			{Sleep(144);}}
    		else {
    			MotorDir(RWD,RWD);
    			MotorSpeed(120,120);}
    			BackLED(OFF,OFF);
    	return 0;
    }

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2007
    Beiträge
    26
    Er bleibt schon bei while(1); hängen. ;)
    Das ; beendet gleich die while Schleife und der Rest wird nie ausgeführt.
    Korrekt würde es so heißen:

    Code:
    while(1)
    {
    //der teil der hier steht wird immmer wieder wiederholt!
    }
    und in deinen code:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    int i;
       Init();
       while(1)
          {
          if
             ((PollSwitch()&(0x01|0x02|0x04))){
             MotorDir(FWD,FWD);
             MotorSpeed(150,90);
             BackLED(OFF,ON);
             for(i=0;i<790;i++)
             {Sleep(144);}}
          else if
             ((PollSwitch()&(0x08|0x16|0x32))){
             MotorDir(FWD,FWD);
             MotorSpeed(90,150);
             BackLED(ON,OFF);
             for(i=0;i<790;i++)
             {Sleep(144);}}
          else {
             MotorDir(RWD,RWD);
             MotorSpeed(120,120);}
             BackLED(OFF,OFF);
          }
       return 0;
    }

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.063
    ob eine null hinter dem x steht oder nicht, ist egal. auch 0x000001 wäre in ordnung, allerdings dann kein integer mehr.
    der asuro nimmt übrigens auch gern dezimale zahlen, damit spart man sich umrechnungen und tipparbeit. die werte für die taster sind dann 1,2,4,8,16 und 32.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #9
    Zitat Zitat von damaltor
    der asuro nimmt übrigens auch gern dezimale zahlen, damit spart man sich umrechnungen und tipparbeit. die werte für die taster sind dann 1,2,4,8,16 und 32.
    Hallo zusammen,
    diesen Hinweis habe ich nun schon mehrfach gelesen, muss allerdings sagen, dass ich persönlich die dezimale Schreibweise eher kontraproduktiv finde, wenn es darum geht, den Zustand bestimmter Bits festzustellen oder zu manipulieren. Das Umrechnen eines Nibbles in eine Hexziffer (und damit von byte zu einem Literal der Form 0x12 o.ä.) ist auf Dauer wesentlich schneller und unanfälliger für Fehler als das Umrechnen ins Dezimalsystem.

    Hinzu kommt noch die Möglichkeit der zugegebenermaßen zunächst merkwürdig erscheinenden Schreibweise mit Shift-Operator:

    Code:
    if ( taster & (1<<4) )
    fragt z.B. auf Bit4 in taster ab. Hat man diese Art der Abfrage einmal gesehen (und vllt einfach hingenommen), so ist sie möglicherweise sogar die einfachste und "fehlerresistenteste" Art, mit Bitmanipulationen und Abfragen umzugehen. (...und im Übrigen nutzt man sie ja ohnehin wahrscheinlich permanent, wenn man z.B. die Konfigurationsregister des Controllers beschreibt . )

    Fröhliches Programmieren,
    Thomas

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.063
    ja diese schiebe-anweisungen sind natürlich ein guter vorteil, haben aber eher was mit binären als mit hexadezimalen zahlen zu tun. aber an sich ist es egal, hauptsache man macht keine fehler. gerade für neulinge ist es allerdings deutlich einfacher dezimalzahlen zu lesen, als hex-zahlen zu interpretieren.

    edit: das ist nichts gegen dich, ihc meine damit nur dass dadurch auch neulinge deine programme besser verstehen können =)
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Berechtigungen

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

Solar Speicher und Akkus Tests