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
- https://www.aranacorp.com/pt/aprender-programacao-com-arduino/
- http://www.cplusplus.com/doc/tutorial/functions/
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie