- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 4 von 4

Thema: NIBObee auf Linie

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hi,
    I appreciate your work.But can you send the picture and more information about your robot.
    Thanks in advance.

  2. #2
    Neuer Benutzer Öfters hier Avatar von Christian Strasser
    Registriert seit
    26.01.2013
    Ort
    Lippstadt (Germany)
    Alter
    41
    Beiträge
    15
    Hello judith222,

    my robot is a construction kit NIBObee from nicai-systems. NIBObee is an autonomous robot particularly developed for pupils and students. It can be programmed in C, C++, Java and assembler. It's my first one! At the video, you see my first self made programm at C. For more information see at http://www.nicai-systems.com/en/nibobee.html.

    Klicke auf die Grafik für eine größere Ansicht

Name:	1.jpg
Hits:	4
Größe:	30,5 KB
ID:	24361Klicke auf die Grafik für eine größere Ansicht

Name:	2.jpg
Hits:	4
Größe:	77,0 KB
ID:	24362Klicke auf die Grafik für eine größere Ansicht

Name:	3.jpg
Hits:	5
Größe:	51,9 KB
ID:	24363

    Christian

    PS: Where do you come from?

  3. #3
    Neuer Benutzer Öfters hier Avatar von Christian Strasser
    Registriert seit
    26.01.2013
    Ort
    Lippstadt (Germany)
    Alter
    41
    Beiträge
    15
    Hier noch das Programm..

    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/motpwm.h>
    #include <nibobee/delay.h>
    #include <nibobee/sens.h>
    #include <nibobee/odometry.h>
    #include <nibobee/led.h>
    #include <nibobee/line.h>
    
    
    
    enum
    {	//state - Zustand
    
    	MODE_STOP,// Anhalten
    	MODE_DRIVE,//Linie folgen
    };
    
    int16_t speed_l;
    int16_t speed_r;
    uint16_t counter_o;
    int16_t *korrektur_l;
    int16_t *korrektur_r;
    
    
    void korrektur(int16_t links, int16_t rechts, int mitte);
    
    uint8_t do_stop();
    uint8_t do_drive(int16_t links, int16_t rechts, int mitte);
    
    uint8_t mode_check(uint8_t mode);
    
    int main()
    {
    	
    	line_init();
    	led_init();
    	sens_init();
    	motpwm_init();
    	//odometry_init();
    	uint8_t mode;
    
    	
    	while (1==1)
    	{
    		enable_interrupts();
    		delay(1);
    		
    		
    				
    		
    		
    		
    		int16_t links = line_get(LINE_L);
    		int16_t rechts = line_get(LINE_R);
    		int16_t mitte = line_get(LINE_C);
    		
    		mode = mode_check(mode);
    		
    		//Code for state transitions.  This code only figures out what
    		//state transitions to make, and then makes them.
    		switch(mode)
    		{
    			case MODE_STOP:		    mode = do_stop();                        break;
    			case MODE_DRIVE:		mode = do_drive(links, rechts, mitte);   break;
    		}
    
    		
    		//state outputs
    		switch(mode)
    		{
    			case MODE_STOP:	                                     speed_l = 0;	           speed_r = 0;            break;
    			case MODE_DRIVE:  korrektur(links, rechts, mitte);	 speed_l = *korrektur_l;   speed_r = *korrektur_r; break;
    		}
    		
    		led_set(LED_L_YE, (links  + mitte) > 750);
    		led_set(LED_L_RD, (links  + mitte) > 900);
    		led_set(LED_R_RD, (rechts + mitte) > 900);
    		led_set(LED_R_YE, (rechts + mitte) > 750);
    		
    		motpwm_setLeft(speed_l);
    		motpwm_setRight(speed_r);
    		
    		
    	}
    	return 0;
    }
    
    
    uint8_t mode_check(uint8_t mode)
    {
    	if (sens_getLeft() && sens_getRight())
    	{
    		if((sens_getLeft()==-1) && sens_getRight()==-1)
    		{
    			mode = MODE_STOP;
    		}
    		else
    		{
    			mode = MODE_DRIVE;
    		}
    	}
    	return mode;
    }
    
    uint8_t do_drive(int16_t links, int16_t rechts, int mitte)
    {
    	uint16_t static counter_stop = 3000;
    	if ((links + mitte > 900) && (mitte + rechts >900))
    	{
    		counter_stop--;
    		if(!counter_stop)
    		{
    			return MODE_STOP;
    		}
    	}
    	else
    	{
    		counter_stop = 3000;
    		return MODE_DRIVE;
    	}
    	return MODE_DRIVE;
    }
    
    uint8_t do_stop()
    {
    	return MODE_STOP;
    }
    
    
    
    
    void korrektur(int16_t links, int16_t rechts, int mitte)
    {
    	int16_t static ir = 510;
    	int16_t static il = 500;
    	
    	if  (((links + mitte) >750) && ((rechts + mitte) < 750))
    	{
    		ir = ir - 10;
    		il = il + 3;
    	}
    	else if (((links + mitte) < 750) && ((rechts + mitte) > 750))
    	{
    		il = il - 10;
    		ir = ir + 5;
    	}
    	else
    	{
    		il = 500;
    		ir = 510;		
    	}
    	
    	if (((links + mitte) >750) && ((rechts + mitte) >750))
    	{
    		il = il--;
    		ir = ir--;
    	}	
    	
    	//Min 200
    	if ( il < 200)
    	{
    		il = 200;
    	}
    	if ( ir < 200)
    	{
    		ir = 200;
    	}
    	
    	//Max 700
    	if ( il > 700)
    	{
    		il = 700;
    	}
    	if ( ir > 700)
    	{
    		ir = 700;
    	}
    	
    	korrektur_l =& il;
    	korrektur_r =& ir;
    }

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 11.06.2012, 18:46
  2. [Nibobee]bgx1 - zugriff auf Flash
    Von waschtl im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 0
    Letzter Beitrag: 03.01.2011, 20:11
  3. Freie Linie auf GLCD
    Von C_Classic im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 15.04.2010, 17:57
  4. NiboBee: Versorgungsspannung auf 4 Volt senken: möglich ????
    Von miller_bln im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 14
    Letzter Beitrag: 04.04.2010, 15:09
  5. Antworten: 75
    Letzter Beitrag: 31.07.2005, 22:21

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests