Início
/
Software
/
Dicas de Software
/
Como criar e utilizar Funções para organizar seu código em Arduino
Como criar e utilizar Funções para organizar seu código em Arduino
Angelo Luis Ferreira | 29/11/2023
Acessos: 736
Declarando e usando Funções em Arduino
Objetivo
Vamos mostrar neste artigo o conceito de funções na programação com Arduino. A utilização de funções no Arduino é uma prática comum para modular e organizar o código. As funções permitem que você divida o código em partes menores e reutilizáveis, tornando-o mais legível e fácil de manter.
Sintaxe (declarando uma função):
tipo_retorno nome_da_funcao(parametros) {
// Corpo da função
// Código a ser executado
return valor_retorno; // Opcional, apenas se a função tiver um tipo de retorno
}
Onde:
tipo_retorno: se a função tiver retorno, utilize o tipo de dado que será retornado, como: int, boolean, float, etc. (leia Tipos de dados usados pelo Arduino)
tipo_retorno: se afunção não tiver retorno, utilize a palavra chave void (que signinifca vazio). Ela indica que a função não retornará nenhum dado para a qual foi chamada. Apenas executa um bloco de códigos sem retornar nada.
parâmetros: servem para fornecer dados que a função precisa para executar suas operações. Esses parâmetros podem ser usados dentro do bloco de código de uma função, por meio de variáveis locais, permitindo que a função seja alterada a cada chamada.
retrun: A palavra-chave return em uma função do Arduino (assim como em outras linguagens de programação) é usada para retornar um valor específico para o ponto onde a função foi chamada. Quando a palavra-chave return é encontrada em uma função, ela interrompe a execução da função atual e retorna o valor especificado na declaração da função como resultado da função.
valor_retorno: é o valor que a função produz ou calcula e que deve ser retornado para onde a função foi chamada. Esse valor é opcional e deverá ser utilizado apenas em funções com retorno. Atenção: tipo de dado do valor_retorno será o mesmo que o tipo_retorno definido na sintaxe da função.
No Arduino, as funções podem ser definidas em qualquer lugar dentro do código de programação, mas é comum organizá-las de maneira lógica e estruturada para facilitar a leitura e manutenção do programa, ou seja, antes ou depois das funções principais setup() e loop(). Isso permite separar partes específicas do código em funções para tornar o programa mais legível e fácil de manter.
1. Utilizando funções SEM retorno
1.1. Em Arduino, uma função sem retorno é uma função que não retorna nenhum valor após executar suas instruções. Ela é definida utilizando o tipo void no lugar de um tipo de dado específico que indicaria o valor retornado pela função.
1.1.1. Em programação, void é um tipo de dado especial que indica ausência de valor. Quando usado em uma função, void indica que a função não retorna nenhum valor. Isso significa que a função executa certas instruções, mas não produz ou retorna nenhum dado específico para onde foi chamada.
1.2. Exemplo da utilização de uma função sem retorno e sem parâmetros:
// Função sem retorno e sem parâmetros para acender um LED por um segundo e apagá-lo por um segundo
void piscarLED() {
digitalWrite(LED_BUILTIN, HIGH); // Liga o LED embutido
delay(1000); // Aguarda 1 segundo
digitalWrite(LED_BUILTIN, LOW); // Desliga o LED embutido
delay(1000); // Aguarda 1 segundo
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Configura o LED embutido como saída
}
void loop() {
piscarLED(); // Chama a função piscarLED para acender e apagar o LED
}
1.2.1. Neste exemplo, a função piscarLED() não possui parâmetros entre os parênteses, indicando que ela não recebe nenhum dado específico quando é chamada. Além disso, ela é do tipo void, o que significa que não retorna nenhum valor.
1.2.2. No loop(), a função piscarLED() é chamada repetidamente para acender e apagar o LED embutido na placa Arduino a cada segundo. Esta função executa uma ação específica, mas não retorna nenhum valor após completar sua tarefa.
1.2.2.1. O LED embutido (ou LED interno) está configurado no pino 13 do Arduino Uno .
1.3. Exemplo da utilização de uma função sem retorno e com parâmetros:
// Função sem retorno, mas com parâmetros para piscar um LED
void piscarLed(int pinoLED, int intervalo) {
digitalWrite(pinoLED, HIGH); // Liga o LED
delay(intervalo); // Aguarda um tempo
digitalWrite(pinoLED, LOW); // Desliga o LED
delay(intervalo); // Aguarda outro tempo
}
void setup() {
pinMode(13, OUTPUT); // Define o pino 13 como saída
}
void loop() {
piscarLed(13, 1000); // Chama a função para piscar o LED no pino 13 a cada 1 segundo (1000ms)
}
1.3.1. Em Arduino, uma função sem retorno e com parâmetros é uma função que não retorna nenhum valor após a execução, mas recebe dados ou informações específicas através de parâmetros.
1.3.2. Nesse exemplo, a função piscarLed() não possui um tipo de retorno especificado (void indica que não retorna nenhum valor). No entanto, ela possui dois parâmetros: pinoLed e intervalo.
1.3.3. Quando a função é chamada no loop(), são passados os valores 13
e 1000
como argumentos para pinoLed e intervalo, respectivamente.
1.3.4. Dentro da função, esses parâmetros são utilizados para determinar qual LED será piscado (no pino 13) e qual será o intervalo de piscamento (1000ms).
2. Utilizando funções COM retorno
2.1. Em Arduino, uma função com retorno é uma função que executa determinadas instruções e retorna um valor específico após a conclusão de suas operações. Ela é definida com um tipo de dado específico para indicar o tipo de valor que será retornado quando a função for chamada.
2.2. Exemplo da utilização de uma função com retorno e sem parâmetros:
// Função com retorno, mas sem parâmetros para retornar um valor fixo
int obterNumero() {
int numero = 42; // Valor fixo a ser retornado
return numero; // Retorna o número 42
}
void setup() {
// Código de inicialização, se necessário
}
void loop() {
int valorRetornado = obterNumero(); // Chama a função e armazena o valor retornado
// Usar o valor retornado, por exemplo, imprimir no monitor serial
Serial.begin(9600);
Serial.print("O número retornado é: ");
Serial.println(valorRetornado);
// Aguarda um tempo antes de repetir o loop
delay(1000);
}
2.2.1. Nesse exemplo, int é o tipo de retorno da função obterNumero(), indicando que a função retorna um número inteiro.
2.2.2. A função obterNumero() não possui parâmetros entre os parênteses, indicando que ela não requer nenhuma informação para ser executada. No entanto, ela retorna um número inteiro fixo, que neste caso é 42.
2.2.3. No loop principal loop(), a função obterNumero() é chamada e seu valor retornado é armazenado na variável valorRetornado. Em seguida, esse valor é impresso no monitor serial para demonstrar o número retornado pela função.
2.3. Exemplo da utilização de uma função com retorno e com parâmetros:
// Declara variável global x
int x = 0;
// Função com retorno e com parâmetros para retornar um valor inteiro
int somar(int a, int b) {
int resultado = a + b;
return resultado;
}
void setup() {
// Código de inicialização, se necessário
}
void loop() {
int valorRetornado = somar(x, x*3); // Chama a função somar e armazena o valor retornado
// Usar o valor retornado, por exemplo, imprimir no monitor serial
Serial.begin(9600);
Serial.print("O número retornado é: ");
Serial.println(valorRetornado);
// Acrescenta +1 em x
x++;
// Aguarda um tempo antes de repetir o loop
delay(1000);
}
2.3.1. Uma função com retorno e com parâmetros em Arduino é uma função que aceita informações específicas, conhecidas como parâmetros, e retorna um valor após realizar operações com base nesses parâmetros.
2.3.2. Neste exemplo, int é o tipo de dado de retorno da função somar(), indicando que a função retorna um valor inteiro. Ela aceita dois parâmetros (a e b) do tipo int.
2.3.3. Quando a função é chamada, os valores de a e b são passados como argumentos, cujo o resultado é a soma de a + b.
2.3.4. No loop principal loop(), a função somar() é chamada e seu valor retornado é armazenado na variável valorRetornado. Em seguida, esse valor é impresso no monitor serial para demonstrar o número retornado pela função.
2.3.5. Como definimos os valores de a e b em função da variável x, os valores retornados são variáveis:
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN0AAACZCAYAAACrDT9gAAAQOklEQVR4Xu1dbYgV1xk++WVN42Zj8DONX01KfhhrVjRizEZwbYKokYWNMZikiopLVYqwBhGCBBaJC1KsEkGppoJNEKSoVOsHxk1J7Q/bIKGmNbG2JrvGQFi1ifqrve+5ee+ee3Zm7pmdOXPm3Hnmj9nMzDnved73OV93nvPe97/SJXABASCQGQL3gXSZYY2KgIBEAKRDIACBjBEA6TIGHNUBAZAOMQAEMkYApMsYcFQHBJyT7m8XPxHnL/xVtC9/Dd4oCALH/nhatnTB8y0FaXF1MyNJ986+34oTZz6Qb7wwd07qxCDCHT15Wmxc1y5+MGRIIR2Q10b/6z/XxJtbu8SSxYtSJQcR7lpPT+qxRDhS2XsOHJSQbtm4QTw1ZXIu4Q0lHRGOLh6BbIKVS2QsGdV385b43eHfi+WvLMl9R0PEu3L132Ju82xLaKRXrDpjunvvnth38H2xtHWxaHywIb1KUiopkHQEdvdH58XrL7dVVfPue4dE86yZYuK4R0OrpwZv+/U78v4Phw4V3X/+S1XPo96nEa73qxuyR20YNkx0bn5DBuQnl/4hRo0cIS58fFGsX71CHD52XNy6fVu8talD1k2Bu7nzbfFFT++AUZjLp3ept6OpK43W6kjNvfit2/+N3SuSc7ds2y6mTZ0iXnpxgejcvkOWYWIbv6uC96OxY2S7OTiibON7hFXH2jWia+duiQG1c+L4cRKTSaV/v71zR2LXMOyBil1Up172qldfqRrF1Ptk18plS8U3fX0V0iXBjepXZ056u+k++5X+W8XEJNYPHTkm5j3XXMGRsKYrj6NdIOnI4C97rw+YVpg2hAO/6cnJsgy9d9f/1nsmcs6jY8eK2TNniK2/2inWLH9VAsi9rk7+oFGYpxocWJ9e/kxMKBGWSL573wGx6ZdrpYOo7l1794vWhfMjOxPV8XpwlAPmpiy/lm1RIx0FdS3bGNvLn1+RhBozaqS4WnrviccfqwQtkYWCTe88r9/4WjZjdKlDo0u1lezasec3Yv2qFRIXfXppYlsUOfSY0suzQbqgGDYhsO1nrJHu6IlTYuEL8+QUSidVLdJxr0WN56kYkYVIN+2nU6pGOQaIRh51bUike2TM6AE93ZnuP4lJE8ZXESzuNCqMOPoIHGRbFOlMbIuaOlHZp851i7ZFC2TVel36SKWOhEEdqkoUE9uiglUd5fg5fSROEuxBI51XpEsyvSTgKDBsks5kTeSKdLVsc0U68ou+zlGJZJt0JkuTtElH5XkzvSRjk2ykmJBOncpQXbSO43l81EhHi/owQqlOC3smqEMJ6sWjAiCKOLVs00cqdWpsYttgR7q7d+9VbeBQXV2ltXdHaV3N62S1w9CXCCa2RWEW1pGr7yRZ06mdhpcbKQzEYH4yUDcyaMpHawQiGC3s1Smgur27rK1VXCqtuega/lCjOHW2W9BCmzcLaFOFNy1oC7tlzrNys4bK1KdwvDHDmyR0X1+0q3XT/Tg/hwRNk9QNCbX9UVNf3toOmhbzPd023W71vjq1pfbQzh1vNnH71PcJkxlNU8Xpcx9WNlv0jR7yy5ETJys/GyTBjWzV39enl0lIp+Pu5U8GSYZ6vAsEgEA4As6/SIFzgEDREADpiuZxtNc5AiCdcxfAgKIhANIVzeNor3MEQDrnLoABRUMApCuax9Fe5wiAdM5dAAOKhgBIVzSPo73OEXBOOijHncdA5gZAOR5x2OxgPgOL40Eox+Ogle2zPirHCSG2e0P76lx+7Ew2QjmebSwPkNtkXH2s6uJKnmIVbuFh/tD5Jz+eJIY3NvpFuiTSHijHw1XtUI73n7mTtnKcOEwzs5nTmip0zqOsJ3Skg3I8uhuGcjy+4t62clxdJ5qecGBhsDUqEsrx79cBcQ7ggXK8HFtxpp82leNBcqo0VelGTIrxUOoHE1HdJiJWXTCpqpprHddQS51NNkA5Xn1cA2FSz8pxNea9HOl4fkz/DuYIPhPSQTlePh4OyvF+uiQRsdYF6Zh4cQ+bhXK8fARhkKqdD9RVFdRQjpePVaQrDdLxNNa76WWM6SkeBQJAICYCzr9IiWkvHgcC3iMA0nnvQjTANwRAOt88Bnu9RwCk896FaIBvCIB0vnkM9nqPAEjnvQvRAN8QAOl88xjs9R4BkM57F6IBviHgnHRQjvsWMsnthXIcyvHkUVSHJfimHK+LBCJJUmXVYQym1iTkHE8NyqqCVFWJl6myoBwPDwzkHO8q5X+Pn6udELWZc1xPOmk7CWWSrsOaiJW+tEfO8bKu71pPT0UihZzjLTJe0845rqeeVnMGJiGIjXetkc5m+mNOdqgCgpzjZWlMUXOOf1pKKjqklN+eZUKUXfeZp6fLnPd5u6Ac/77XTeu4hlqqduQcL2vn0r74tAESBtMVN6V12vZElWflCD4ox0eHHv+GnONtofGYRMRaF6TTF76mebmhHIdyPIxVNnOO808cvMljGq9ZjnBcl/Mfx100GnUCAZcIgHQu0UfdhUQApCuk29FolwiAdC7RR92FRACkK6Tb0WiXCIB0LtFH3YVEAKQrpNvRaJcIgHQu0UfdhUQApCuk29Folwg4Jx2U4y7d76ZuKMehHHcTeTmv1Wfl+JaNGwZ8+6pmwQ3KApulO6x88JxlA3yrC8pxOx5j5fiXvdfFI2OqPzinDuTw0T+IX6z8uZT66H/bsSi81NSlPcg5jpzjYeFmUznOdYYlA1Vt0lUwuSAdco5HuwE5x/OXczwO6UyIaZOIUI6X0I2TO5ucgZzj5ZCMg5vNnOMqQWoRSj8+wya5wspOfXpJFZmIWJFzfMmAowSC1M56YEeddBV1XAP5pQg5x8NIx8ueEQ8Pr5xX44JwVKeVjRQT0iHnOHKO60GfRDkeNb3kndgN7avlrmYu13TcAHVKYKrEhXIcyvGwEcSmcjxo+songun1kn36QVZZjnrOfxzPsrGoCwjkAQGQLg9egA2FQgCkK5S70dg8IADS5cELsKFQCIB0hXI3GpsHBEC6PHgBNhQKAZCuUO5GY/OAAEiXBy/AhkIhANIVyt1obB4QcE46KMfzEAbZ2gDlOJTj2UacJ7XVm3KcYVc/FwtSmGfhHisfPGdhuK91QDlux3NRynGqkb8J5uzAdqwwKzV1aQ+U41COh4WeS+V4LZ2dGV3SecqaiBU5x8sZR5FzvByo+mkEaeccZzqEkYuSRn733R1x+Nhx+ajLnOTWSIec4/29oiojcZX+mA/keXNrl+DEiQ3DHhBvbeqQebqJFHSR3owvlSgmAtuoccClclydfW1c1y7Fw+++d0g0z5pZyVGezhhmVkrq00ueP9skXa283jzC6KdC0f9PGjxURtRxDbVsc0U6sruoynEm3cKftVQ6laBOxowyyZ+yspEC5ThyjuuhSdPJ7o/Oi9dftpNzvNb0Uq8/qPNNTiezEiJ/p4NyfCCIUQplHuVpPXvh44uVl3WVsqpkjrpHBaiK/SAFNN/now6+6OmV7yxtXSw2d74t+O/25a/J9eWeAwelXXTg6oymqeL0uQ+rpphbtm2v2L2srVUcOXFSLFm8SCx4vqXqfd02k3BzpRxXCcntNz0JwaRdcZ9x/uN4XIPxPBDwHQGQzncPwn7vEADpvHMZDPYdAZDOdw/Cfu8QAOm8cxkM9h0BkM53D8J+7xAA6bxzGQz2HQGQzncPwn7vEADpvHMZDPYdAeekg3Lc9xCKbz+U41COx4+aArzhm3Jc/QyO3KOrwtXENsg5XoAAVpsI5Xj6DidC7dq7X7QunC+lOvrfVCN9MztzWpNUGZh8fJ2+lf0lpi7tgXIcyvGwgM1COc51qyoCPVkmPUOi1nnPNYvGBxts8iuwbGsiVijHoRxXIy4r5TjVqY9kQaTLnYhVB4jBMxX+mejpkqQ/ZsmK6tQgiYwLEWst21yJWIuiHA87BuLUuW7RtmhBJWRyR7qwOa+pobZJV0udTciGnZUB5Xg57TJdKha2j2swjZ0kcz3y+fEzZ0Xn5jeqpo1eTC954Un/kviRg/haT49RknQT0iHnOHKO6wQbbM5x3kcY8fDwSnzqnau6hsvlRgqDAeX4wH4XyvGy8pyuuOprW8px/nmDD1wi29RDl3idx4cy5fYngyTDPN4FAkAgHAHnX6TAOUCgaAiAdEXzONrrHAGQzrkLYEDREADpiuZxtNc5AiCdcxfAgKIhANIVzeNor3MEQDrnLoABRUMApCuax9Fe5wg4Jx2U485jIHMDoByHcjzzoPOhwnpTjjPmYR9FZ+kTK6mysmyAb3VBOZ6+x0yU41Qrf+h8//1DnQlYyQ4ox0sg6OdpRIUFTYcpnRTp9156cYHo3L5DPs4ZTfWzOtSPgvldtXz941v9413VNr7XMGyY6Fi7RnTt3C1TYdEzE8ePk6mxJpX+/fbOHZmqK+qjX7JBTwGs1k12rVy2VHzT1yfmNs+WJkfZZkIlV8pxso38wsoW0ta5Uo2Hki4NESuU41COq0R0qRzXR0KXRzVYJZ3N9Me11NnUMFci1lq2QTneT0V9JDYZLWs9E6QcD5L+6CcN1Co3zfupTy/JOBMRa5LjGqAcf19mWtUP1dEV0irByS/1nnPcdJMklyMdOYjm33RBOT6wj4sarcJGWC6FOiQ1+Ol5VuQHKZp1BbT+vmpdFOnu3r0n1M6K6uoqpWnuWNcuj63T28Rq7KYnJ8vUxya2RY0GJmptm8px1bbcko6Jd+LMB9JeU5WweqgnDeHrV62QC1ha2KtDuqoiptzWly5/JusZ/lCjOHW2W+bE5s2CUSNHVDYtKP91y5xnRVhe796vbghWCDPQ+maFrmA2bZuOCZevbkio7ef7yDleRsKlcpzqVze5cje9jOqxcA8IAIFkCDj/IiWZ+XgbCPiHAEjnn89gsecIgHSeOxDm+4cASOefz2Cx5wiAdJ47EOb7hwBI55/PYLHnCIB0njsQ5vuHAEjnn89gsecIOCcdlOOeR9AgzIdyHMrxQYRN/b9Sb8pxXSuop9PK0qNQjmeJdqkuKMfTB7yWclz/SNzk4+v0rewvMXVpD3KOI+d4WMC6Uo7rHZ3rjg85x0tSm11794vWhfOlxMXk0iUo9E7fzZtiQul9PeOoKt0pP3erSmKj1qcLMPUenJ7lTu3y51fkERFjRo0UV0synScef6zyFT0ds/DUlMkD5DjXb3wtqxtdUm3QpdqqHmdAOj19emliWxR2LpXjZJd6VIYN8axJ3PAz1kgH5Xi/G1QZCZTj/bjYCP4g5TjVSLrEZ56eLij3Ovng7/+8LGZNnxaHK6k9m/r0kntjm6SDchzK8SAGmOYc1082SI1NhgVZ2UgxOa4BOceRc1yPUVvKcV1Rn1vSESDIOT6w60LOcT9zjuuq9TjHLhoOYMaPOf9x3NhSPAgE6gQBkK5OHIlm+IMASOePr2BpnSAA0tWJI9EMfxAA6fzxFSytEwRAujpxJJrhDwIgnT++gqV1ggBIVyeORDP8QQCk88dXsLROEHBOOijH6ySSYjQDyvEI5XgMHPEoEAAChgg4H+kM7cRjQKBuEPg/2/33Q8mXfIEAAAAASUVORK5CYII=)
3. Documentação oficial
Using Functions in a Sketch - Usando funções em um Sketch
4. Conclusão
Funções são blocos de código reutilizáveis que permitem organizar e modular seu programa.
No Arduino, elas podem receber parâmetros, executar operações específicas e retornar valores, facilitando a escrita de código mais limpo, legível e eficiente.
Ao usar funções, você simplifica a lógica do programa, promove a reutilização de código e torna mais fácil o desenvolvimento de projetos complexos.
É uma boa prática colocar as definições de funções adicionais no início do código, antes das funções setup() e loop(), para que elas sejam reconhecidas quando o programa principal for executado. Isso ajuda a evitar problemas de referência ou declarações de função ausentes durante a execução do programa.
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários