Hallo iedereen,
Ik ben pas begonnen met avr studio 5 en ik heb een probleem.
Ik kan geen waarde lezen van men servo.c naar mijn hoofdprogramma.c
De bedoeling is dat ik een waarde ingeef (tss 240 (min) en 1100(max)) om de positie van de servomotor in te stellen. De bedoeling is om later ook met dmx te werken maar daarvoor moet dit eerst werken.

Alvast bedankt

code:hoofdprogramma.c



#include <avr/io.h>
#include "servo.h"

void main (void)

{
	
	int i;
	DDRB = 255;
	while(1)
	{	
		PORTB = 255;
		for(i=0;i<optel();i++);	
		
		PORTB = 0;
		
		for(i=0;i<32000;i++);
		
		
		
	}
}	

code: servo.c



#include <avr/io.h>
#include "servo.h"
unsigned char optel (void)
{
optel=300;
}

code: servo.h


unsigned char optel (void);


unsigned char optel (void)
{
    optel=300;
}

Een functie en een variabele met dezelfde naam?! Dan gaat je compiler toch protesteren?

Hey pros,

alvast bedankt voor de reactie, maar ik heb geen idee hoe ik het anders zou moeten doen? Hoe zou jij het doen? grt

Geef de functie een andere naam, en declareer een variabele.


unsigned char optel;

unsigned char set_optel(void)
{
    optel=300;
}

Nee, ik denk dat ie de functie een waarde wil laten terugeven.


unsigned char optel (void) 
{
  return 123;
}

Mmmm, ja, dat lijkt er meer op. Ik had z'n main() maar half-en-half gelezen...

alvast bedankt!
Maar met de return lukt het niet. Als ik gewoon een getal ingeef op de positie van optel dan werkt het wel.

#include <avr/io.h>
#include "servo.h"

int8_t return_getal; //var die return getal zal bevatten.

void main (void)
{
	
while(1)
	{

	return_getal = set_optel(); //return_getal bevat nu het getal 30.
	}

}
 
unsigned char set_optel(void)
{
	int8_t uitkomst; //uitkomst variabel

	int8_t var1 = 10; //getal 1 van de som
	int8_t var2 = 20; //getal 2 van de som

	uitkomst = var1 + var2; //som

	return uitkomst; //retirn uitkomst
}

Edit/
Je kan ook nog zoiets doen, de getallen van de som meegeven met de functie. Moet je wel even servo.h aanpssen met "unsigned char set_optel(int8_t var1, int8_t var2);"

#include <avr/io.h>
#include "servo.h" 

int8_t return_getal; //var die return getal zal bevatten.

void main (void)
{
	
while(1)
	{

	return_getal = set_optel(10, 20); //return_getal bevat nu het getal 30.
	}

}
 
unsigned char set_optel(int8_t var1, int8_t var2)
{
	int8_t uitkomst; //uitkomst variabel

	uitkomst = var1 + var2; //som

	return uitkomst; //return uitkomst
}

Edit/2
maak er maar dit van: int8_t set_optel(int8_t var1, int8_t var2)

Had de char even over het hoofd gezien en dat gaat wellicht problemen geven