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

Thema: fehler in einfachem fahrprogramm und ich finde ihn nicht :(

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    10.08.2007
    Beiträge
    47
    Anzeige

    Powerstation Test
    Hi,

    in "void behaviour_cruise(void)" ist die geschweifte Klammer vor setLEDs zuviel.
    Zusaetzlich ist in "void Batt(void)" die Klammer vor der while-Schleife zuviel. (Falls ich mich nicht verzaehlt habe ...)

    Ich wuerde dringend empfehlen einen Editor zu verwenden der es erlaubt die Klammerung zu "ueberwachen" (einfaerben, springen, etc.). Ein defensiverer Programmierstil kann auch helfen (d.h. bei Beginn einer Anweisung, welche Klammerung benoetigt, diese SOFORT zu setzen - oeffnende und schliessende, dann vergisst man auch keine)

    HTH
    Kay

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    bloß zeigt er jetzt entweder den batt status an oder er fährt, je nach dem was ich in main zuerst ablaufen lasse -echt cool haha weiß da jemand was ?

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    kannst du vielleicht den jetzt richtigen Code hochladen.

  4. #14
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    klar
    Code:
    // Cruise Behaviour:
    
    #include "RP6RobotBaseLib.h" 	
    
    #define IDLE  0
    
    #define TURN_SPEED 50
    #define MOVE_SPEED 100
    
    #define MOVE_FORWARDS 1
    
    
    
    void behaviour_cruise(void)
    
    {
    	uint8_t turn_direction = LEFT;
    	
    		
    			setLEDs(0b100100); 
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    		
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);			
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);
    
    	}
    	
    // akku_load:
    
    void Batt(void)
    {
    	setStopwatch1(400);
    
    	
    	
          while (true)
          	{
          		startStopwatch1();
                if(getStopwatch1() > 300)
                {
    
                      writeString_P("\nADC Akku: Voll");
                      writeInteger(adcBat, DEC);
                      writeChar('\n');
                   if(adcBat  > 900)
    						{                   
                         setLEDs(0b001001);
                   		writeString_P("\nADC Akku: >9V");
                   	}	
                   else if(adcBat < 901 && adcBat > 800)
                   {
                   		writeString_P("\nADC Akku: >8V");
                         statusLEDs.LED4 = !statusLEDs.LED4;
                         statusLEDs.LED1 = !statusLEDs.LED1;
                         updateStatusLEDs();
                   }
                   
    					else if(adcBat < 801 && adcBat > 700)
    								{
      					     		setLEDs(0b000001);
      					     		writeString_P("\nADC Akku: >7V");
    								}
    					else if(adcBat < 701 && adcBat > 590)
    					{		
    							statusLEDs.LED1 = !statusLEDs.LED1;
    										updateStatusLEDs();
    										writeString_P("\nADC Akku: Leer");
                   } 		
    				else if(adcBat < 591 && adcBat > 500)
    					{		
    										writeString_P("\nADC Akku: Laden!");
    										powerOFF();
    					}
                   
                      setStopwatch1(0);
    				}
                
               } 
          }                
                 
    
    int main (void)
    
       {
    
    	initRobotBase(); 	
    
    	startStopwatch1();
    	powerON();
    	while(true) 
    
    		{
    		task_ADC();
    		Batt();
    		behaviour_cruise();
    
    		task_RP6System();
    
    		behaviour_cruise();
    
    		}
    
    
    return 0;
    }

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    du sagst im Batt() "while(True)", also ist eine endlose Schleife.
    mach einfach das "while(True)" und die dazugehöringen Klammern weg.
    und mach uas dem "BLOCKING" eine "0"

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    Also:
    Code:
    // Cruise Behaviour:
    
    #include "RP6RobotBaseLib.h"    
    
    #define IDLE  0
    
    #define TURN_SPEED 50
    #define MOVE_SPEED 100
    
    #define MOVE_FORWARDS 1
    
    
    
    void behaviour_cruise(void)
    
    {
       uint8_t turn_direction = LEFT;
       
          
             setLEDs(0b100100);
          move(MOVE_SPEED, FWD, DIST_MM(2000), 0);
    
          rotate(TURN_SPEED, turn_direction, 102, 0);
    
          move(MOVE_SPEED, FWD, DIST_MM(100),0);
          rotate(TURN_SPEED, turn_direction, 102, 0);
          move(MOVE_SPEED, FWD, DIST_MM(2000),0);
          
          rotate(TURN_SPEED, RIGHT, 102, 0);         
          move(MOVE_SPEED, FWD, DIST_MM(100), 0);
          rotate(TURN_SPEED, RIGHT, 102, 0);
    
       }
       
    // akku_load:
    
    void Batt(void)
    {
       
    
       
       
          
                
                if(getStopwatch1() > 300)
                {
    
                      writeString_P("\nADC Akku: Voll");
                      writeInteger(adcBat, DEC);
                      writeChar('\n');
                   if(adcBat  > 900)
                      {                   
                         setLEDs(0b001001);
                         writeString_P("\nADC Akku: >9V");
                      }   
                   else if(adcBat < 901 && adcBat > 800)
                   {
                         writeString_P("\nADC Akku: >8V");
                         statusLEDs.LED4 = !statusLEDs.LED4;
                         statusLEDs.LED1 = !statusLEDs.LED1;
                         updateStatusLEDs();
                   }
                   
                   else if(adcBat < 801 && adcBat > 700)
                            {
                                setLEDs(0b000001);
                                writeString_P("\nADC Akku: >7V");
                            }
                   else if(adcBat < 701 && adcBat > 590)
                   {      
                         statusLEDs.LED1 = !statusLEDs.LED1;
                                  updateStatusLEDs();
                                  writeString_P("\nADC Akku: Leer");
                   }       
                else if(adcBat < 591 && adcBat > 500)
                   {      
                                  writeString_P("\nADC Akku: Laden!");
                                  powerOFF();
                   }
                   
                      setStopwatch1(0);
                }
               
               
          }               
                 
    
    int main (void)
    
       {
    
       initRobotBase();    
    
       
       powerON();
       startStopwatch1();
       while(true)
    
          {
          task_ADC();
          Batt();
          behaviour_cruise();
    
          task_RP6System();
    
          behaviour_cruise();
    
          }
    
    
    return 0;
    }

    das "startStopwatch1()" startest du in der main und das BLOCKING ausschalten, das setStopwatch(400); muss weg das hat keinen Sinn.
    Das "while(True)" muss auch weg, sonst ist es endlose.

    Code nicht getestet.

    MfG blenderkid
    [/code]

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    ja das merkt man ... also wenn ich alle Blockings weg mache dreht ersich im kreis, zeigt aber auch die batt an...

    @KayH zu viele klammern schaden nicht, nur dann wenn man die übersicht verliehrt *grins* - mein bluefish zeigt leider keine klammerhilfe an... aber schaue mal ob es das programmers notepad nicht auch für linux gibt ...

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    hol dir "gvim" mit "apt-get install"

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    ...also wenn ich alle Blockings weg mache dreht ersich im kreis, zeigt aber auch die batt an...

    soll er nicht genau das machen ?

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    nee er soll 2m vor, links im 90° winkel rotieren, 10cm vor wieder links im 90° winkel drehen und anschließend wieder 2m vor, dann 90° nach rechts rotieren 10cm vor 90° nach rechts rotieren und dann von forne...

    ist das aus dem code nicht ersichtlich ?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad