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