quinta-feira, 3 de novembro de 2011

Funções do Arduino


Segmentar o código em funções possibilita ao programador criar partes modulares, que desempenham tarefas bem definidas, e então retornam para a área do código a partir de onde foram chamadas. O caso típico de criação de uma função é quando existe a necessidade de executar a mesma tarefa diversas vezes durante um programa.
Para programadores acostumados ao BASIC, funções do Arduino fornecem (e estendem) a utilidade do uso das subrotinas (GOSUB em BASIC).
Padronizar fragmentos de código em funções tem várias vantagens:
  • Funções ajudam o programador permanecer organizado, muitas vezes, isso ajuda a montar o conceito do programa.
  • Funções codificam a tarefa em um único lugar, para que a funcionalidade seja pensada e depurada uma única vez.
  • As chances de erros em modificações reduzem drasticamente, no caso do código precisar ser alterado.
  • Funções reduzem o tamanho dos Sketches (projetos criados na IDE do Arduino, do inglês: rascunhos), pois seções de código podem ser reutilizadas diversas vezes.
  • Elas também tornam mais fácil reutilizar código, tornando-o mais modular, e com um efeito colateral benéfico: fica mais agradável de ler o código.
Existem duas funções mandatórias nos Sketches do Arduino: setup() e loop(). Outras funções podem ser criadas fora das chaves ({}) dessas duas funções. Como um exemplo, vamos criar uma função simples para multiplicar dois valores.

Exemplo



Para “chamar” nossa função simples de multiplicação, nós passamos os parâmetros do tipo de dados que a função está esperando:
void loop{
int i = 2;
int j = 3;
int k;

k = myMultiplyFunction(i, j); // k now contains 6
}
Nossa função precisa ser declarada fora de qualquer outra função, então “MinhaFuncaoMultiplicar()” pode ficar tanto acima quanto abaixo da função principal “loop()”.
O código completo deve ficar parecido com isto:
void setup(){
  Serial.begin(9600);
}

void loop() {
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k now contains 6
  Serial.println(k);
  delay(500);
}

int myMultiplyFunction(int x, int y){
  int result;
  result = x * y;
  return result;
}

Outro exemplo

Esta função abaixo fará a leitura de um sensor, cinco vezes, utilizando a função analogRead(); calculando a média das cinco leituras. Ela também converte os dados da leitura para 8 bits (0-255), e a inverte, invertendo assim a saída.
int ReadSens_and_Condition(){
  int i;
  int sval = 0;

  for (i = 0; i < 5; i++){
    sval = sval + analogRead(0);    // sensor na porta analógica 0
  }

  sval = sval / 5;    // média
  sval = sval / 4;    // converte para 8 bits (0 - 255)
  sval = 255 - sval;  // inverte a saída
  return sval;
}
Para chamar a função, nós apenas fazemos a atribuição para uma variável.
int sens;

sens = ReadSens_and_Condition();

Tradução

Por Renato Aloi, do original em inglês, no site: http://arduino.cc/en/Reference/HomePage
 

3 comentários:

  1. Funçoes e laço for muito interessante , parece muito com C. Parabéns

    ResponderExcluir
  2. posso chamar uma subrotina de dentro do setup() para carregar variaveis por exemplo da eeprom durante o setup e antes de entrar no loop()?
    abraço

    ResponderExcluir
  3. Cara, fiquei triste de ver que as coisas não deram certo, mas não desanime, sacode a poeira, pense e repense, e volte. Joana de angeliz diz que: Os problemas são para o nosso crescimento moral e intelectual, aceite-os. È um grande erro o brasil não ter empréstimos via BNDS aos pequenos, eles preferem emprestar bilhões para os ricos, e correm um serio risco de grandes calotes, pois colocam muitos ovos numa cesta só.

    ResponderExcluir