- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: Programmieren lernen

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    33
    Beiträge
    239
    Anzeige

    Praxistest und DIY Projekte
    hallo

    was mir noch aufgefallen ist:
    Code:
    while(PollSwitch()>==8)
    bei diesem vergleichsoperator bin ich mir nicht sicher, was du als ergebnis erhältst.
    entweder meinst du == als abfrabe, ob beide werte gleich groß sind
    oder >= ob der 1. wert größer oder gleich dem 2. ist

    und noch ein kleiner hinweis, vl ist es auch deine absicht, aber wenn du schreibst
    Code:
    while(a<200)
    {
       //hier irgend welche befehle, in deinem fall FrontLED(ON);
    }
    und in der schleife der wert a nicht verändert wird, dann bleibt das programm hier stecken. d.h. die anderen programmteile werden nicht mehr ausgeführt.
    mfg hai1991

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

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    So, hier noch mal das Programm mit Kommentaren.
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    int p;
    int a=400;					// gibt Zählwert an
    
    Init();
    	
    
    		while(1)			// Asuro soll einfach losfahren
    	{	MotorDir(FWD,FWD);
    		BackLED(OFF,OFF);
    		MotorSpeed(175,175);
    		BackLED(OFF,OFF);   // beide BackLED aus
    		
    		while(PollSwitch()>=8)	//wenn eine linke Taste gedrückt wird 
    		{		BackLED(ON,OFF);// linke LED an
    			MotorDir(BREAK,BREAK); // Stop
    			MotorSpeed(0,0);
    			for(p=1;p<200;p++)Sleep(255);	 // kurze  rechte Rückwärtskurve
    			MotorDir(RWD,RWD);
    			MotorSpeed(120,170);
    			for(p=1;p<a;p++)Sleep(255);  // Pause
    			MotorSpeed(0,0);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a+20;							// wenn jetzt nichts passiert einfach geradeaus weiter fahren
    		}
    		while((PollSwitch()<8)&&(PollSwitch()>1)) // hier die Tasten 2und 3 von rechts gesehen
    		{		BackLED(OFF,ON);// rechte LED an
    			MotorDir(BREAK,BREAK);
    			MotorSpeed(0,0);
    			for(p=1;p<200;p++)Sleep(255);// kurze  linke Rückwärtskurve
    			MotorDir(RWD,RWD);
    			MotorSpeed(170,120);
    			for(p=1;p<a;p++)Sleep(255);
    			MotorSpeed(0,0);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a-50;							// hier soll vom Zählwert abgezogen werden, damit die Rückwärtskurven immer unterschiedlich ausfallen
    		}
    												// wenn jetzt nichts passiert einfach geradeaus weiter fahren
    												
    		while(a<200)					// wenn der Zählwert die 200 unterschreitet soll er stehenbleiben, und die FrontLED leuchten
    		{	break;
    			FrontLED(ON);
    		}
    	
    	
    	}
    return 0;
    }
    Irgendwas ist falsch, das mit den Zählwert klappt wohl nicht, und wenn rein theoretisch der zählwert unter 200 liegt ändert sich garnicht´s.
    Gruß Frank

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    33
    Beiträge
    239
    warum die FrontLED nicht leuchtet wenn a<200 hat radbruch schon beschrieben:
    Code:
          while(a<200)
          {   break;
             FrontLED(ON);
          }
    Das break ist hier ein C-Befehl und bewirkt, dass die aktuelle while-Schleife sofort verlassen wird. Dadurch wird der FrontLED(ON)-Befehl nie ausgeführt. Vermutlich meinst du MotorDir(BREAK,BREAK).
    dass er stehen bleibt müsste es so aussehen:
    Code:
    while(a<200)
    {
      MotorDir(BREAK,BREAK); //Motoren ausschalten
      FrontLED(ON); //Frontled an
    }
    mfg hai1991

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

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Hab´s jetzt noch mal mit nur LED´s versucht, und es klappt auf einmal. Hab ja sonst nix berändert. Kann die Motorspannung was damit zu tun haben?
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    int p;
    int a=400;
    
    Init();
    	
    
    		while(1)
    	{	StatusLED(GREEN);
    		BackLED(OFF,OFF);
    		
    		while(PollSwitch()>=8)
    		{		BackLED(ON,OFF);
    			StatusLED(RED);
    			for(p=1;p<200;p++)Sleep(255);
    			StatusLED(YELLOW);
    			for(p=1;p<a;p++)Sleep(255);
    			StatusLED(OFF);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a+20;
    		}
    		while((PollSwitch()<8)&&(PollSwitch()>1))
    		{			BackLED(OFF,ON);
    			StatusLED(YELLOW);
    			for(p=1;p<200;p++)Sleep(255);
    			StatusLED(RED);
    			for(p=1;p<a;p++)Sleep(255);
    			StatusLED(OFF);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a-50;
    		}
    		while(a<200)
    		{	
    			FrontLED(ON);
    			BackLED(ON,ON);
    		}
    	
    	
    	}
    return 0;
    }

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    33
    Beiträge
    239
    hallo frank

    wie schon zweimal beschrieben ist der break-befehl in der while-schleife schuld.

    Hab ja sonst nix berändert.
    doch, du hast diesen befehl gelöscht. dadurch wird die while-schleife nicht abgebrochen!


    es gibt aber das problem, dass durch die laufenden motoren die tasterauswertung nicht korrekt ist.
    als abhilfe kann man dann die PollSwitch mehrfach aufrufen und auf gleichheit überprüfen.
    als beispiel:
    Code:
    int t1;
    t1=PollSwitch();
    if(PollSwitch==t1 && t1>=8)
    {
      //dieser teil wird nur aufgerufen, 
      //wenn PollSwitch zweimal hintereinander 
      //den selben wert geliefert hat und 
      //dieser größer oder gleich 8 war
    }
    mfg hai1991

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

  6. #26
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Noch ein Versuch, man soll ja nie aufgeben:
    Code:
          while(a<200)
          { 
             break;  
             FrontLED(ON);
             BackLED(ON,ON);
          }
    Funktioniert das auch?
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Hi radbruch, das mit break funktioniert nicht, und an hai1991 mit den mehrfachabfragen werde ich ausprobieren.
    Danke

  8. #28
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hi radbruch, das mit break funktioniert nicht....
    Naja, es war ein Versuch. Ich befürchte, hier kann ich nicht mehr weiterhelfen.

    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!

  9. #29
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    ...
    while( (PollSwitch() <8 ) && ( PollSwitch()>1 ))
    { BackLED(OFF,ON);
    StatusLED(YELLOW);
    ...
    Genau mit welcher taster probierst du das zu testen? Und was ist die rechter taster in deiner meinung? Und was meint 'funkioniert nicht'? Was erwartest du? Deine kommentierungen sind auch wieder weg.

    In einer altere bericht erzählst du von die ganz rechter taster. Die obene code ist von deine letzte bericht mit kompletem program drin. Die while-schleife tret nur ein wan die 2e (K5, wert=4) oder 3e (K4, wert=2) taster (von hinten gesehen, von rechts zu links) eingeprellt sind. Durch den >1 reagiert er nicht auf dem ganz rechter taster alleine (K6, von hinter gesehen, neben den an/aus schalter), weil K6=1. Mit ">=" stimmt die logik und wird er reagieren auf alle taster an dem an/aus schalter seite.

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Nun ja, ich denke mal alle Fehler sind beseitigt. Das mit dem ganz recheten Taster (K6) der den Wer 1 liefert habe ich absichtlich weggelassen, da bei laufenden Motoren immer wieder Störungen auftraten. ich meinte die linken Taster mit K1 bis K3 und die rechten mit K4-K6. Ich versuchs mal mit der mehrfachen Tasterabfrage.
    Gruß Frank

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress