fbpixel
Etiquetas: ,
0
(0)

Em programação, é muito comum e até necessário utilizar funções que requerem uma definição particular – sobretudo quando há blocos de código que se repetem no mesmo programa. Conjuntos de funções e objetos são normalmente reunidos em bibliotecas. Veremos neste tutorial a definição de funções em C aplicada ao Arduino.

Sintaxe para definição de funções em C

A sintaxe da definição de uma função em C apresenta 4 partes:

  • o tipo de variável devolvida pela função (void, int, char, etc.);
  • o nome da função;
  • os argumentos (opcional);
  • o corpo da função.
bool nom_fonction(int arg1, char arg2){
  bool out; //definition variable locale
  //corps de la fonction
  return out;
}

O tipo da função, o seu nome e a definição dos argumentos correspondem ao protótipo da função, ou seja, as informações mínimas necessárias para podermos chamar a função.

resultat = nom_fonction(param1,param2);

Exemplos

int convert(int val){
  return map(val,0,1023,-100,100);
}


bool isValid(int val){
  if(val>-5 && val<50){
    return true; 
  }else{
    return false;
  }
}


int increment(int val, int increment,int maxval, int minval){
  val+=increment;
  if(val>maxval) val=minval;
  if(val<minval) val=maxval;

  return val;
}

Uma função que não devolve um valor é chamada de procedimento. Ela se caracteriza por um tipo void (vazio, em português).

int myVar=0;

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   myVar+=1;
   delay(500);
}

void printVar(String nom, int val){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.println(val); 
}

>> myVar: 0
>> myVar: 1
>> myVar: 2
>> myVar: 3
>> myVar: 4
>> myVar: 5
>> myVar: 6
>> myVar: 7
>> myVar: 8
>> myVar: 9
>> myVar: 10

Para lembrar sobre a definição de funções em C

  • É necessário definir um tipo de variável devolvida.
  • Se a função não tem valor devolvido, é chamada de procedimento, e o seu tipo é void.
  • Uma função retorna uma variável por meio da função return.
  • Os argumentos são definidos pelo tipo e o nome utilizados na função.
  • Os argumentos são opcionais.
  • O corpo da função está entre chaves.

Bônus

Definição de argumentos com valores padrão

É possível, ao definir uma função, definir um valor padrão para um ou mais parâmetros. No Arduino, para poder compilar esta função, é preciso acrescentar o protótipo da função (ou toda a definição) antes da sua primeira utilização.

No início do arquivo, definimos o protótipo da função, especificando o valor padrão.

void printVar(String nom, int val, String unit="");

Depois, na sequência ou em outro local, adicionamos a definição da função sem os valores padrão.

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

Então é possível utilizar a função com ou sem o parâmetro para obter comportamentos diferentes.

   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");

int myVar=0;
int cmVar=0;

void printVar(String nom, int val, String unit="");

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");
   
   myVar+=1;
   cmVar+=5;
   delay(1000);
}

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

Sobrecarga de funções

É possível definir vários protótipos para que uma função com o mesmo nome possa atuar sobre parâmetros de diferentes tipos. Para sobrecarregar uma função, temos de declarar a função para cada lista de parâmetros desejados com diferentes protótipos e corpos.

Obs: Note que a sobrecarga de funções só é possível com listas de argumentos diferentes.

int myVar=0;
int cmVar=0;

void printVar(String nom, int val, String unit="");
void printVar(String nom, String mot, String unit="'");

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");
   printVar("cmVar","HelloWorld");
   myVar+=1;
   cmVar+=5;
   delay(1000);
}

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

void printVar(String nom, String mot,String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(unit);Serial.print(mot);
  Serial.print(unit);
  Serial.println();
}

>> myVar: 3 
>> cmVar: 15 cm
>> Text -> 'HelloWorld'
>> myVar: 4 
>> cmVar: 20 cm
>> Text -> 'HelloWorld'
>> myVar: 5 
>> cmVar: 25 cm
>> Text -> 'HelloWorld'
>> myVar: 6 
>> cmVar: 30 cm
>> Text -> 'HelloWorld'
>> myVar: 7 
>> cmVar: 35 cm
>> Text -> 'HelloWorld'

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?