-         

Ergebnis 1 bis 7 von 7

Thema: NIBOBee - Funktionen deklarieren

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    NIBOBee - Funktionen deklarieren

    Anzeige

    Hallo,

    wie kann ich TRUE und FALSE richtig deklarieren?

    Folgender Code:
    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/delay.h>
    #include <nibobee/analog.h>
    #include <nibobee/led.h>
    #include <stdlib.h>
    
    
    uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
    {
    	uint16_t j,z;
    	
    	PORTA |= (1 << PA0);   // PA0 auf HIGH (LED ausschalten) 
       	DDRA |= (1 << DDA1);   // PA1 als Ausgang
       	PORTA &= ~(1 << PA1);   // PA1 auf LOW
    
    	OCR2  = 254-distance_r;   // wenn OCR2=0xFE dann Objekt sehr nahe 
    	z=0;
    	for(j=0;j<30;j++) // loop time: 5ms
    	{
    		if (PINA & (1 << PA2))z++;
    		Msleep(6); // 6*Sleep(6)=1ms
    	}
    	if (z>=29) return FALSE; // Objekt nicht gefunden
    	else return TRUE;
    }
    
    uint8_t objekt_sichtbar_links(uint8_t distance_l)
    {
    	uint16_t i,y;
    
    	PORTA |= (1 << PA1);    // PA1 auf HIGH (LED ausschalten)
       	DDRA |= (1 << DDA0);   // PA0 als Ausgang
       	PORTA &= ~(1 << PA0);   // PA0 auf LOW
    
    	OCR2  = 254-distance_l;   // wenn OCR2=0xFE dann Objekt sehr nahe 
    	y=0;
    	for(i=0;i<30;i++) // loop time: 5ms
    	{
    		if (PINA & (1 << PA2))y++;
    		Msleep(6); // 6*Sleep(6)=1ms
    	}
    	if (y>=29) return FALSE; // Objekt nicht gefunden
    	else return TRUE;
    }
    
    
    
    uint8_t abstand_rechts()
    {
    	uint8_t k,n;
    	
    	k=255;
    	for(n=0;n<8;n++)
    	{
    	  if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen
    	}  
    	return k;
    }
    
    uint8_t abstand_links()
    {
    	uint8_t l,m;
    	
    	l=255;
    	for(m=0;m<8;m++)
    	{
    	  if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen
    	}  
    	return l;
    }
    
    
    
    /*************************************************************************
    
    	Hauptprogramm
    
    *************************************************************************/
    int main(void)
    {
       	led_init();
    	uint8_t n,m;
    
       	while(1)
    	{
    	   	n=abstand_rechts();
    	   	m=abstand_links();
    	   		
    		if ((n!=255) && (m!=255))
    	   	{
    	   		if (n<2) led_set(LED_R_RD, 1);
    			if (m<2) led_set(LED_L_RD, 1);
    
    
    			Msleep(10);
    		}
    	}
    
    }
    Bringt diese Fehler:
    Code:
    Build started 10.1.2010 at 11:30:35
    avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Program Files\NIBObeeLib\include"  -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99  -D_NIBOBEE_            -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d  -c  ../Nib
    obeeTest.c
    
    ../NibobeeTest.c: In function 'objekt_sichtbar_rechts':
    ../NibobeeTest.c:21: warning: implicit declaration of function 'Msleep'
    ../NibobeeTest.c:23: error: 'FALSE' undeclared (first use in this function)
    ../NibobeeTest.c:23: error: (Each undeclared identifier is reported only once
    ../NibobeeTest.c:23: error: for each function it appears in.)
    ../NibobeeTest.c:24: error: 'TRUE' undeclared (first use in this function)
    ../NibobeeTest.c: In function 'objekt_sichtbar_links':
    ../NibobeeTest.c:42: error: 'FALSE' undeclared (first use in this function)
    ../NibobeeTest.c:43: error: 'TRUE' undeclared (first use in this function)
    make: *** [NibobeeTest.o] Error 1
    Build failed with 6 errors and 1 warnings...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    405
    Code:
    #define TRUE 1
    #define FALSE 0
    muss zu Anfang deklariert werden (also einfügen).
    Dann sollte es klappen, schließlich kann man TRUE / FALSE ja mit 1 / 0 ersetzten.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Danke, hat geklappt, jetzt kriege ich eine andere Fehlermeldung:
    Code:
    Build started 10.1.2010 at 12:07:03
    avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Program Files\NIBObeeLib\include"  -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99  -D_NIBOBEE_            -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d  -c  ../Nib
    obeeTest.c
    
    ../NibobeeTest.c: In function 'objekt_sichtbar_rechts':
    ../NibobeeTest.c:23: warning: implicit declaration of function 'Msleep'
    avr-gcc -mmcu=atmega16  NibobeeTest.o   -L"C:\Program Files\NIBObeeLib\lib"  -lnibobee_line -lnibobee_utils -lnibobee_base -lnibobee_usart -lnibobee_i2c  -o NibobeeTest.elf
    NibobeeTest.o: In function `objekt_sichtbar_links':
    C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:42: undefined reference to `Msleep'
    NibobeeTest.o: In function `objekt_sichtbar_rechts':
    C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:23: undefined reference to `Msleep'
    NibobeeTest.o: In function `main':
    C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:97: undefined reference to `Msleep'
    make: *** [NibobeeTest.elf] Error 1
    Build failed with 3 errors and 1 warnings...
    Bitte nochmals um Hilfe.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Da man nicht weiß, wie der Kompiler true und false intern speichert, ist das besser:

    false = (1==0)
    true = !false

    Alles andere ist kritisch:
    http://www.rn-wissen.de/index.php/Fa...UE_ist_nicht_1

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Danke Radbruch,

    ich musse es so einfügen:

    false = (1==0);
    true = (0==1);

    Nun wird msleep nicht verstanden, sh. weiter oben.

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    true = (0==1);

    ????

    Die bee kennt kein Msleep(), Verzögerungen in Millisekundenschritten macht sie mit delay() aus delay.c

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    OK, danke der Code wurde nun übersetzt.

    Wie du dem Code oben entnehmen kannst, habe ich 2 IR-LEDs an X1 angeschlossen. Wenn ich nun die Ports auf LOW ziehe, leuchten sie nicht.

    Warum ist das so? Darf ich PA0 - PA3 nicht verwenden?

Berechtigungen

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