{"id":2126,"date":"2018-01-19T11:52:23","date_gmt":"2018-01-19T13:52:23","guid":{"rendered":"https:\/\/arduxop.com.br\/loja\/?p=2126"},"modified":"2020-12-30T12:52:46","modified_gmt":"2020-12-30T14:52:46","slug":"2126-2","status":"publish","type":"post","link":"https:\/\/arduxop.com.br\/loja\/2126-2\/","title":{"rendered":"Programa\u00e7\u00e3o para Arduino &#8211; Primeiros Passos"},"content":{"rendered":"<div class=\"project-title\">\n<h4>Conceitos iniciais de programa\u00e7\u00e3o para Arduino<\/h4>\n<\/div>\n<div class=\"description\">\n<p><em>Autor: Lu\u00eds Fernando Chavier<\/em><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.circuitar.com.br\/media\/CACHE\/images\/project\/4\/images\/arduino_uno\/5d270d1f0bee4406bf0dd357490d5711.jpg\" alt=\"Arduino\" \/><\/p>\n<p>Neste tutorial vamos apresentar os conceitos b\u00e1sicos de programa\u00e7\u00e3o necess\u00e1rios para come\u00e7ar a utilizar o Arduino, e tamb\u00e9m outros tipos de de sistemas embarcados semelhantes. Para conhecer o que \u00e9 poss\u00edvel construir com esses sistemas, veja a nossa se\u00e7\u00e3o de <a href=\"https:\/\/www.circuitar.com.br\/projetos\">projetos<\/a>. Se quiser aprender mais sobre Arduino e sistemas embarcados, explore a nossa se\u00e7\u00e3o de <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\">tutoriais<\/a>.<\/p>\n<p>Se voc\u00ea est\u00e1 usando o Arduino pela primeira vez, n\u00e3o deixe de ver nossos tutoriais de como configurar o Arduino para <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/configurando-o-arduino-no-windows\/\">Windows<\/a> ou <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/configurando-o-arduino-no-mac\/\">Mac<\/a>.<\/p>\n<p>Aqui n\u00f3s vamos explicar os conceitos de programa\u00e7\u00e3o desde o in\u00edcio, e voc\u00ea n\u00e3o precisa saber nada sobre Arduino ou programa\u00e7\u00e3o de computadores para come\u00e7ar. Se voc\u00ea j\u00e1 tem experi\u00eancia pr\u00e9via com programa\u00e7\u00e3o, este tutorial talvez n\u00e3o acrescente muito ao seu conhecimento.<\/p>\n<p>N\u00f3s vamos aprender como funciona um programa simples, fazendo nele algumas modifica\u00e7\u00f5es ao longo do tutorial. Se voc\u00ea tiver acesso a um Arduino, voc\u00ea pode us\u00e1-lo ao longo do tutorial para praticar os conceitos aprendidos, tornando a experi\u00eancia muito mais legal. Voc\u00ea s\u00f3 precisa de um Arduino, original ou compat\u00edvel, e mais nada. Ent\u00e3o vamos l\u00e1.<\/p>\n<p>Este tutorial \u00e9 dividido nas seguintes partes:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#introduo\">Introdu\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#computador\">Computador<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#programa-de-computador\">Programa de Computador<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#linguagem-de-programao\">Linguagem de Programa\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#algoritmo-programa\">Algoritmo (Programa)<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#varivel\">Vari\u00e1vel<\/a>\n<ul>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#tipo-de-dado\">Tipo de Dado<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#atribuio\">Atribui\u00e7\u00e3o<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#operador\">Operador<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#funo\">Fun\u00e7\u00e3o<\/a>\n<ul>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#chamada-de-funo\">Chamada de Fun\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#valor-de-retorno\">Valor de Retorno<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#parmetros\">Par\u00e2metros<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#comentrios\">Coment\u00e1rios<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#estruturas-de-controle\">Estruturas de Controle<\/a>\n<ul>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#while\">While<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#for\">For<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#if\">If<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#if-else\">If-Else<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#bibliotecas\">Bibliotecas<\/a><\/li>\n<li><a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#concluso\">Conclus\u00e3o<\/a><\/li>\n<\/ul>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse0\"><span id=\"introduo\"><\/span>Introdu\u00e7\u00e3o<\/h2>\n<div id=\"collapse0\" class=\"collapse in\">\n<p>O objetivo deste tutorial \u00e9 apresentar, de uma forma simples e r\u00e1pida, o b\u00e1sico de programa\u00e7\u00e3o para que voc\u00ea possa come\u00e7ar a utilizar o Arduino em seus projetos, sem ter que ler muitos livros ou artigos sobre programa\u00e7\u00e3o. O tema &#8220;desenvolvimento de software&#8221; como um todo \u00e9 muito abrangente, ent\u00e3o vamos focar apenas nos conceitos que s\u00e3o importantes para Arduino e sistemas embarcados em geral.<\/p>\n<p>Existem muitas outras coisas para se aprender na parte de software que n\u00e3o vamos abordar aqui. No final do artigo n\u00f3s colocamos links que voc\u00ea pode seguir para aprender conceitos mais avan\u00e7ados ou conceitos de software que n\u00e3o s\u00e3o muito utilizados na programa\u00e7\u00e3o de sistemas embarcados.<\/p>\n<p>Vamos come\u00e7ar explicando como funciona um computador (lembre-se que o Arduino \u00e9, no fundo, um computador).<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse1\"><span id=\"computador\"><\/span>Computador<\/h2>\n<div id=\"collapse1\" class=\"collapse in\">\n<p>Um <strong>computador<\/strong> \u00e9, de forma simplificada, uma m\u00e1quina que processa instru\u00e7\u00f5es. Essas instru\u00e7\u00f5es s\u00e3o processadas no &#8220;c\u00e9rebro&#8221; do computador, que se chama <strong>microprocessador<\/strong>. Todo computador possui pelo menos um microprocessador. O Arduino, por exemplo, nada mais \u00e9 do que um computador muito pequeno, e ele utiliza um microprocessador do modelo <strong>ATmega<\/strong>. Alguns microprocessadores, como o ATmega, tamb\u00e9m s\u00e3o chamados de <strong>microcontroladores<\/strong>.<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse2\"><span id=\"programa-de-computador\"><\/span>Programa de Computador<\/h2>\n<div id=\"collapse2\" class=\"collapse in\">\n<p>Um <strong>programa de computador<\/strong>, ou <strong>software<\/strong>, \u00e9 uma sequ\u00eancia de instru\u00e7\u00f5es que s\u00e3o enviadas para o computador. Cada tipo de microprocessador (c\u00e9rebro) entende um <strong>conjunto de instru\u00e7\u00f5es<\/strong> diferente, ou seja, o seu pr\u00f3prio &#8220;idioma&#8221;. Tamb\u00e9m chamamos esse idioma de <strong>linguagem de m\u00e1quina<\/strong>.<\/p>\n<p>As linguagens de m\u00e1quina s\u00e3o, no fundo, as \u00fanicas linguagens que os computadores conseguem entender, s\u00f3 que elas s\u00e3o muito dif\u00edceis para os seres humanos entenderem. \u00c9 por isso n\u00f3s usamos uma coisa chamada <strong>linguagem de programa\u00e7\u00e3o<\/strong>.<\/p>\n<p>No caso de sistemas como o Arduino (os chamados sistemas embarcados), o software que roda no microprocessador \u00e9 tamb\u00e9m chamado de <strong>firmware<\/strong>.<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse3\"><span id=\"linguagem-de-programao\"><\/span>Linguagem de Programa\u00e7\u00e3o<\/h2>\n<div id=\"collapse3\" class=\"collapse in\">\n<p>N\u00f3s seres humanos precisamos converter as nossas id\u00e9ias para uma forma que os computadores consigam processar, ou seja, a linguagem de m\u00e1quina. Os computadores de hoje (ainda) n\u00e3o conseguem entender a linguagem natural que n\u00f3s usamos no dia a dia, ent\u00e3o precisamos de um outro &#8220;idioma&#8221; especial para instruir o computador a fazer as tarefas que desejamos. Esse &#8220;idioma&#8221; \u00e9 uma linguagem de programa\u00e7\u00e3o, e na verdade existem <a href=\"http:\/\/en.wikipedia.org\/wiki\/List_of_programming_languages\" target=\"_blank\" rel=\"noopener\">muitas delas<\/a>.<\/p>\n<p>Essas linguagens de programa\u00e7\u00e3o tamb\u00e9m s\u00e3o chamadas de <strong>linguagens de programa\u00e7\u00e3o de alto n\u00edvel<\/strong>. A linguagem de programa\u00e7\u00e3o utilizada no Arduino \u00e9 a linguagem <a href=\"http:\/\/en.wikipedia.org\/wiki\/C%2B%2B\" target=\"_blank\" rel=\"noopener\"><strong>C++<\/strong><\/a> (com pequenas modifica\u00e7\u00f5es), que \u00e9 uma linguagem muito tradicional e conhecida. Essa \u00e9 a linguagem que utilizaremos ao longo deste tutorial.<\/p>\n<p>Para converter um programa escrito em uma linguagem de alto n\u00edvel para linguagem de m\u00e1quina, n\u00f3s utilizamos uma coisa chamada <strong>compilador<\/strong>. A a\u00e7\u00e3o de converter um programa para linguagem de m\u00e1quina \u00e9 chamada <strong>compilar<\/strong>. Para compilar um programa, normalmente se utiliza um <strong>ambiente de desenvolvimento<\/strong> (ou IDE, do ingl\u00eas <em>Integrated Development Environment<\/em>), que \u00e9 um aplicativo de computador que possui um compilador integrado, onde voc\u00ea pode escrever o seu programa e compil\u00e1-lo. No caso do Arduino, esse ambiente de desenvolvimento \u00e9 o Arduino IDE.<\/p>\n<p>O texto contendo o programa em uma linguagem de programa\u00e7\u00e3o de alto n\u00edvel tamb\u00e9m \u00e9 conhecido como o <strong>c\u00f3digo fonte<\/strong> do programa.<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse4\"><span id=\"algoritmo-programa\"><\/span>Algoritmo (Programa)<\/h2>\n<div id=\"collapse4\" class=\"collapse in\">\n<p>Um <strong>algoritmo<\/strong>, ou simplesmente <strong>programa<\/strong>, \u00e9 uma forma de dizer para um computador o que ele deve fazer, de uma forma que n\u00f3s humanos conseguimos entender facilmente. Os algoritmos normalmente s\u00e3o escritos em linguagens de programa\u00e7\u00e3o de alto n\u00edvel. Isso se aplica a praticamente qualquer computador, inclusive o Arduino, onde um algoritmo tamb\u00e9m \u00e9 conhecido como <strong>sketch<\/strong>. Para simplificar, a partir de agora n\u00f3s vamos nos referir aos algoritmos, programas ou sketches simplesmente como &#8220;programas&#8221;.<\/p>\n<p>Um programa \u00e9 composto de uma sequ\u00eancia de comandos, normalmente escritos em um arquivo de texto. Para este tutorial, vamos usar como base os comandos do programa mais simples do Arduino, o <strong>Blink<\/strong>, que simplesmente acende e apaga um LED, e vamos destrinch\u00e1-lo ao longo do tutorial. Veja abaixo o c\u00f3digo fonte do Blink:<\/p>\n<pre>int led = 13;\r\n\r\nvoid <b>setup<\/b>() {\r\n\u00a0\u00a0pinMode(led, OUTPUT);\r\n}\r\n\r\nvoid <b>loop<\/b>() {\r\n\u00a0\u00a0digitalWrite(led, HIGH);\r\n\u00a0\u00a0delay(1000);\r\n\u00a0\u00a0digitalWrite(led, LOW);\r\n\u00a0\u00a0delay(1000);\r\n}\r\n<\/pre>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse5\"><span id=\"varivel\"><\/span>Vari\u00e1vel<\/h2>\n<div id=\"collapse5\" class=\"collapse in\">\n<p>Uma <strong>vari\u00e1vel<\/strong> \u00e9 um recurso utizado para armazenar dados em um programa de computador. Todo computador possui algum tipo de <strong>mem\u00f3ria<\/strong>, e uma vari\u00e1vel representa uma regi\u00e3o da mem\u00f3ria usada para armazenar uma determinada informa\u00e7\u00e3o. Essa informa\u00e7\u00e3o pode ser, por exemplo, um n\u00famero, um caractere ou uma sequ\u00eancia de texto. Para podermos usar uma vari\u00e1vel em um programa Arduino, n\u00f3s precisamos fazer uma <strong>declara\u00e7\u00e3o de vari\u00e1vel<\/strong>, como por exemplo:<\/p>\n<pre>int led;\r\n<\/pre>\n<p>Nesse caso estamos declarando uma vari\u00e1vel do tipo <code>int<\/code> chamada <code>led<\/code>. Em seguida n\u00f3s falaremos mais sobre o tipo de dado de uma vari\u00e1vel.<\/p>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse6\"><span id=\"tipo-de-dado\"><\/span>Tipo de Dado<\/h3>\n<div id=\"collapse6\" class=\"collapse in\">\n<p>O <strong>tipo de dado<\/strong> de uma vari\u00e1vel significa, como o pr\u00f3prio nome diz, o tipo de informa\u00e7\u00e3o que se pode armazenar naquela vari\u00e1vel. Em muitas linguagens de programa\u00e7\u00e3o, como C++, \u00e9 obrigat\u00f3rio definir o tipo de dado no momento da declara\u00e7\u00e3o da vari\u00e1vel, como vimos na declara\u00e7\u00e3o da vari\u00e1vel <code>led<\/code> acima. No caso dos m\u00f3dulos Arduino que usam processador ATmega, os tipos mais comuns de dados que utilizamos s\u00e3o:<\/p>\n<ul>\n<li><code>boolean<\/code>: valor verdadeiro (<code>true<\/code>) ou falso (<code>false<\/code>)<\/li>\n<li><code>char<\/code>: um caractere<\/li>\n<li><code>byte<\/code>: um byte, ou sequ\u00eancia de 8 bits<\/li>\n<li><code>int<\/code>: n\u00famero inteiro de 16 bits com sinal (-32768 a 32767)<\/li>\n<li><code>unsigned int<\/code>: n\u00famero inteiro de 16 bits sem sinal (0 a 65535)<\/li>\n<li><code>long<\/code>: n\u00famero inteiro de 16 bits com sinal (-2147483648 a 2147483647)<\/li>\n<li><code>unsigned long<\/code>: n\u00famero inteiro de 16 bits sem sinal (0 a 4294967295)<\/li>\n<li><code>float<\/code>: n\u00famero real de precis\u00e3o simples (ponto flutuante)<\/li>\n<li><code>double<\/code>: n\u00famero real de precis\u00e3o dupla (ponto flutuante)<\/li>\n<li><code>string<\/code>: sequ\u00eancia de caracteres<\/li>\n<li><code>void<\/code>: tipo vazio (n\u00e3o tem tipo)<\/li>\n<\/ul>\n<p>Para conhecer todos os tipos de dado suportados pelo Arduino, veja a se\u00e7\u00e3o &#8220;Data Types&#8221; <a href=\"http:\/\/arduino.cc\/en\/Reference\/HomePage\" target=\"_blank\" rel=\"noopener\">nessa p\u00e1gina<\/a>.<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse7\"><span id=\"atribuio\"><\/span>Atribui\u00e7\u00e3o<\/h3>\n<div id=\"collapse7\" class=\"collapse in\">\n<p><strong>Atribuir<\/strong> um valor a uma vari\u00e1vel significa armazenar o valor nela para usar posteriormente. O comando de atribui\u00e7\u00e3o em C++ \u00e9 o <code>=<\/code>. Para atribu\u00edrmos o valor <code>13<\/code> \u00e0 vari\u00e1vel <code>led<\/code> que criamos acima, fazemos assim:<\/p>\n<pre>led\u00a0=\u00a013;\r\n<\/pre>\n<p>Quando se armazena um valor em uma vari\u00e1vel logo na sua inicializa\u00e7\u00e3o, chamamos isso de <strong>inicializa\u00e7\u00e3o de vari\u00e1vel<\/strong>. Assim, no nosso programa de exemplo temos:<\/p>\n<pre>int led = 13;\r\n<\/pre>\n<p>O objetivo dessa linha de c\u00f3digo \u00e9 dizer que o pino 13 do Arduino ser\u00e1 utilizado para acender o LED, e armazenar essa informa\u00e7\u00e3o para usar depois ao longo do programa.<\/p>\n<p>Os valores fixos usados no programa, como o valor <code>13<\/code> acima, s\u00e3o chamados de <strong>constantes<\/strong>, pois, diferentemente das vari\u00e1veis, o seu valor n\u00e3o muda.<\/p>\n<\/div>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse8\"><span id=\"operador\"><\/span>Operador<\/h2>\n<div id=\"collapse8\" class=\"collapse in\">\n<p>Um <strong>operador<\/strong> \u00e9 um conjunto de um ou mais caracteres que serve para operar sobre uma ou mais vari\u00e1veis ou constantes. Um exemplo muito simples de operador \u00e9 o operador de adi\u00e7\u00e3o, o <code>+<\/code>. Digamos que queremos somar dois n\u00fameros e atribuir a uma vari\u00e1vel <code>x<\/code>. Para isso, fazemos o seguinte:<\/p>\n<pre>x\u00a0=\u00a02\u00a0+\u00a03;\r\n<\/pre>\n<p>Ap\u00f3s executar o comando acima, a vari\u00e1vel <code>x<\/code> ir\u00e1 conter o valor <code>5<\/code>.<\/p>\n<p>Cada linguagem de programa\u00e7\u00e3o possui um conjunto de operadores diferente. Alguns dos operadores mais comuns na linguagem C++ s\u00e3o:<\/p>\n<ul>\n<li>Operadores aritm\u00e9ticos:\n<ul>\n<li><code>+<\/code>: adi\u00e7\u00e3o (&#8220;mais&#8221;)<\/li>\n<li><code>-<\/code>: subtra\u00e7\u00e3o (&#8220;menos&#8221;)<\/li>\n<li><code>*<\/code>: multiplica\u00e7\u00e3o (&#8220;vezes&#8221;)<\/li>\n<li><code>\/<\/code>: divis\u00e3o (&#8220;dividido por&#8221;)<\/li>\n<\/ul>\n<\/li>\n<li>Operadores l\u00f3gicos:\n<ul>\n<li><code>&amp;&amp;<\/code>: conjun\u00e7\u00e3o (&#8220;e&#8221;)<\/li>\n<li><code>||<\/code>: disjun\u00e7\u00e3o (&#8220;ou&#8221;)<\/li>\n<li><code>==<\/code>: igualdade (&#8220;igual a&#8221;)<\/li>\n<li><code>!=<\/code>: desigualdade (&#8220;diferente de&#8221;)<\/li>\n<li><code>!<\/code>: nega\u00e7\u00e3o (&#8220;n\u00e3o&#8221;)<\/li>\n<li><code>&gt;<\/code>: &#8220;maior que&#8221;<\/li>\n<li><code>&lt;<\/code>: &#8220;menor que&#8221;<\/li>\n<li><code>&gt;=<\/code>: &#8220;maior ou igual a&#8221;<\/li>\n<li><code>&lt;=<\/code>: &#8220;menor ou igual a&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Operadores de atribui\u00e7\u00e3o:\n<ul>\n<li><code>=<\/code>: atribui um valor a uma vari\u00e1vel, como vimos acima.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Ao longo do desenvolvimento dos seus projetos, aos poucos voc\u00ea se familiarizar\u00e1 com todos esses operadores. Para uma lista completa, veja <a href=\"http:\/\/pt.wikipedia.org\/wiki\/Operadores_em_C_e_C%2B%2B\" target=\"_blank\" rel=\"noopener\">essa p\u00e1gina<\/a> da Wikipedia.<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse9\"><span id=\"funo\"><\/span>Fun\u00e7\u00e3o<\/h2>\n<div id=\"collapse9\" class=\"collapse in\">\n<p>Uma <strong>fun\u00e7\u00e3o<\/strong> \u00e9, em linhas gerais, uma sequ\u00eancia de comandos que pode ser reutilizada v\u00e1rias vezes ao longo de um programa. Para criar uma fun\u00e7\u00e3o e dizer o que ela faz, n\u00f3s precisamos fazer uma <strong>declara\u00e7\u00e3o de fun\u00e7\u00e3o<\/strong>. Veja como uma fun\u00e7\u00e3o \u00e9 declarada no nosso programa de exemplo:<\/p>\n<pre>void <b>setup<\/b>() {                \r\n\u00a0\u00a0pinMode(led, OUTPUT);     \r\n}\r\n<\/pre>\n<p>Aqui estamos declarando uma fun\u00e7\u00e3o com o nome <code>setup()<\/code>. O que ela faz \u00e9 executar os comandos de uma outra fun\u00e7\u00e3o <code>pinMode()<\/code>. A a\u00e7\u00e3o de executar os comandos de fun\u00e7\u00e3o previamente declarada \u00e9 denominada <strong>chamada de fun\u00e7\u00e3o<\/strong>. N\u00f3s n\u00e3o precisamos declarar a fun\u00e7\u00e3o <code>pinMode()<\/code> porque ela j\u00e1 \u00e9 declarada automaticamente no caso do Arduino.<\/p>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse10\"><span id=\"chamada-de-funo\"><\/span>Chamada de Fun\u00e7\u00e3o<\/h3>\n<div id=\"collapse10\" class=\"collapse in\">\n<p>Chamar uma fun\u00e7\u00e3o significa executar os comandos que foram definidos na sua declara\u00e7\u00e3o. Uma vez declarada, uma fun\u00e7\u00e3o pode ser chamada v\u00e1rias vezes no mesmo programa para que seus comandos sejam executados novamente. Para chamarmos a nossa fun\u00e7\u00e3o <code>setup()<\/code>, por exemplo, n\u00f3s usar\u00edamos o seguinte comando:<\/p>\n<pre><b>setup<\/b>();\r\n<\/pre>\n<p>No entanto, no caso do Arduino, n\u00f3s n\u00e3o precisamos chamar a fun\u00e7\u00e3o <code>setup()<\/code>, porque ela \u00e9 chamada automaticamente. Quando compilamos um programa no Arduino IDE, ele chama a fun\u00e7\u00e3o <code>setup()<\/code> uma vez e depois chama a fun\u00e7\u00e3o <code>loop()<\/code> repetidamente at\u00e9 que o Arduino seja desligado ou reiniciado.<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse11\"><span id=\"valor-de-retorno\"><\/span>Valor de Retorno<\/h3>\n<div id=\"collapse11\" class=\"collapse in\">\n<p>A palavra chave que vem antes do nome da fun\u00e7\u00e3o na declara\u00e7\u00e3o define o tipo do <strong>valor de retorno<\/strong> da fun\u00e7\u00e3o. Toda vez que uma fun\u00e7\u00e3o \u00e9 chamada, ela \u00e9 executada e devolve ou <strong>retorna<\/strong> um determinado valor &#8211; esse \u00e9 o valor de retorno, ou simplesmente <strong>retorno<\/strong> da fun\u00e7\u00e3o. O valor de retorno precisa ter um tipo, que pode ser qualquer um dos <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#tipo-de-dado\">tipos de dados<\/a> citados anteriormente. No caso da nossa fun\u00e7\u00e3o <code>setup()<\/code>, o tipo de retorno \u00e9 <code>void<\/code>, o que significa que a fun\u00e7\u00e3o n\u00e3o retorna nada.<\/p>\n<p>Para exemplificar, vamos criar uma fun\u00e7\u00e3o que retorna alguma coisa, por exemplo um n\u00famero inteiro. Para retornar um valor, n\u00f3s utilizamos o comando <code>return<\/code>:<\/p>\n<pre>int f() {\r\n\u00a0\u00a0return 1;\r\n}\r\n<\/pre>\n<p>Quando chamada, a fun\u00e7\u00e3o <code>f()<\/code> acima retorna sempre o valor <code>1<\/code>. Voc\u00ea pode usar o valor de retorno de uma fun\u00e7\u00e3o para atribu\u00ed-lo a uma vari\u00e1vel. Por exemplo:<\/p>\n<pre>x\u00a0=\u00a0f();\r\n<\/pre>\n<p>Ap\u00f3s declarar a fun\u00e7\u00e3o <code>f()<\/code> e chamar o comando de atribui\u00e7\u00e3o acima, a vari\u00e1vel <code>x<\/code> ir\u00e1 conter o valor <code>1<\/code>.<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse12\"><span id=\"parmetros\"><\/span>Par\u00e2metros<\/h3>\n<div id=\"collapse12\" class=\"collapse in\">\n<p>Um outro recurso importante de uma fun\u00e7\u00e3o s\u00e3o os <strong>par\u00e2metros<\/strong>. Eles servem para enviar algum dado para a fun\u00e7\u00e3o quando ela \u00e9 chamada. Vamos criar por exemplo uma fun\u00e7\u00e3o que soma dois n\u00fameros:<\/p>\n<pre>int soma(int a, int b) {\r\n\u00a0\u00a0return a + b;\r\n}\r\n<\/pre>\n<p>Aqui acabamos definir uma fun\u00e7\u00e3o chamada <code>soma()<\/code>, que aceita dois n\u00fameros inteiros como par\u00e2metros. N\u00f3s precisamos dar um nome para esses par\u00e2metros, e nesse caso escolhemos <code>a<\/code> e <code>b<\/code>. Esses par\u00e2metros funcionam como vari\u00e1vel que voc\u00ea pode usar dentro da fun\u00e7\u00e3o. Sempre que chamarmos a fun\u00e7\u00e3o <code>soma()<\/code>, precisamos fornecer esses dois n\u00fameros. O comando <code>return a + b;<\/code> simplesmente retorna a fun\u00e7\u00e3o com a soma dos dois n\u00fameros. Vamos ent\u00e3o somar 2 + 3 e atribuir o resultado para uma vari\u00e1vel <code>x<\/code>:<\/p>\n<pre>x\u00a0=\u00a0soma(2,\u00a03);\r\n<\/pre>\n<p>Ap\u00f3s a chamada acima, a vari\u00e1vel <code>x<\/code> ir\u00e1 conter o valor <code>5<\/code>.<\/p>\n<\/div>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse13\"><span id=\"comentrios\"><\/span>Coment\u00e1rios<\/h2>\n<div id=\"collapse13\" class=\"collapse in\">\n<p>Um <strong>coment\u00e1rio<\/strong> \u00e9 um trecho de texto no seu programa que serve apenas para explicar (documentar) o c\u00f3digo, sem executar nenhum tipo de comando no programa. Muitas vezes, os coment\u00e1rios s\u00e3o usados tamb\u00e9m para desabilitar comandos no c\u00f3digo. Nesse caso, dizemos que o c\u00f3digo foi <strong>comentado<\/strong>.<\/p>\n<p>Na linguagem C++, um coment\u00e1rio pode ser escrito de duas formas:<\/p>\n<ul>\n<li>Coment\u00e1rio de linha: inicia-se com os caracteres <code>\/\/<\/code>, tornando todo o resto da linha atual um coment\u00e1rio.<\/li>\n<li>Coment\u00e1rio de bloco: inicia-se com os caracteres <code>\/*<\/code> e termina com os caracteres <code>*\/<\/code>. Todo o texto entre o in\u00edcio e o t\u00e9rmino se torna um coment\u00e1rio, podendo ser composto de v\u00e1rias linhas.<\/li>\n<\/ul>\n<p>Para facilitar a visualiza\u00e7\u00e3o, os ambientes de desenvolvimento geralmente mostram os coment\u00e1rios em uma cor diferente. No caso do Arduino IDE, por exemplo, os coment\u00e1rios s\u00e3o exibidos na cor cinza. Vamos ent\u00e3o explicar o que o programa de exemplo faz, inserindo nele v\u00e1rios coment\u00e1rios explicativos:<\/p>\n<pre>\/*\r\nPrograma\u00e7\u00e3o\u00a0para\u00a0Arduino\u00a0-\u00a0Primeiros\u00a0Passos\r\nPrograma\u00a0de\u00a0exemplo:\u00a0Blink\r\n*\/\r\n\r\n\/*\u00a0\r\nDeclara\u00e7\u00e3o\u00a0da\u00a0vari\u00e1vel\u00a0\"led\"\r\nIndica\u00a0que\u00a0o\u00a0LED\u00a0est\u00e1\u00a0conectado\u00a0no\u00a0pino\u00a0digital\u00a013\u00a0do\u00a0Arduino\u00a0(D13).\r\n*\/\r\nint led = 13;\r\n\r\n\/*\r\nDeclara\u00e7\u00e3o\u00a0da\u00a0fun\u00e7\u00e3o\u00a0setup()\r\nEsta\u00a0fun\u00e7\u00e3o\u00a0\u00e9\u00a0chamada\u00a0apenas\u00a0uma\u00a0vez,\u00a0quando\u00a0o\u00a0Arduino\u00a0\u00e9\u00a0ligado\u00a0ou\u00a0reiniciado.\r\n*\/\r\nvoid <b>setup<\/b>() {\r\n\u00a0\u00a0\/\/ Chama a fun\u00e7\u00e3o pinMode() que configura um pino como entrada ou sa\u00edda\r\n\u00a0\u00a0pinMode(led, OUTPUT); \/\/ Configura o pino do LED como sa\u00edda\r\n}\r\n\r\n\/*\r\nDeclara\u00e7\u00e3o\u00a0da\u00a0fun\u00e7\u00e3o\u00a0loop()\r\nAp\u00f3s\u00a0a\u00a0fun\u00e7\u00e3o\u00a0setup()\u00a0ser\u00a0chamada,\u00a0a\u00a0fun\u00e7\u00e3o\u00a0loop()\u00a0\u00e9\u00a0chamada\u00a0repetidamente\u00a0at\u00e9\r\no\u00a0Arduino\u00a0ser\u00a0desligado.\r\n*\/\r\nvoid <b>loop<\/b>() {\r\n\u00a0\u00a0\/\/ Todas as linhas a seguir s\u00e3o chamadas de fun\u00e7\u00e3o com passagem de par\u00e2metros\r\n\u00a0\u00a0\/\/ As fun\u00e7\u00f5es s\u00e3o executadas em sequ\u00eancia para fazer o LED acender e apagar\r\n\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\r\n\u00a0\u00a0\/\/ Ap\u00f3s terminar a fun\u00e7\u00e3o loop(), ela \u00e9 executada novamente repetidas vezes,\r\n\u00a0\u00a0\/\/ e assim o LED continua piscando.\r\n}\r\n<\/pre>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse14\"><span id=\"estruturas-de-controle\"><\/span>Estruturas de Controle<\/h2>\n<div id=\"collapse14\" class=\"collapse in\">\n<p><strong>Estruturas de controle<\/strong> s\u00e3o blocos de instru\u00e7\u00f5es que alteram o fluxo de execu\u00e7\u00e3o do c\u00f3digo de um programa. Com elas \u00e9 poss\u00edvel fazer coisas como executar comandos diferentes de acordo com uma condi\u00e7\u00e3o ou repetir uma s\u00e9rie de comandos v\u00e1rias vezes, por exemplo.<\/p>\n<p>A seguir n\u00f3s veremos algumas das estruturas de controle mais comuns usadas nas linguagens de programa\u00e7\u00e3o em geral. Vamos tamb\u00e9m modificar o nosso programa de teste para exemplificar melhor como essas estruturas funcionam.<\/p>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse15\"><span id=\"while\"><\/span>While<\/h3>\n<div id=\"collapse15\" class=\"collapse in\">\n<p>O <strong>while<\/strong> \u00e9 uma estrutura que executa um conjunto de comandos repetidas vezes enquanto uma determinada condi\u00e7\u00e3o for verdadeira. <em>While<\/em> em ingl\u00eas quer dizer &#8220;enquanto&#8221;, e pronuncia-se &#8220;u\u00e1i-ou&#8221;. Ele segue o seguinte formato:<\/p>\n<pre><code>while(condi\u00e7\u00e3o) {\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>Vamos ent\u00e3o fazer uma modifica\u00e7\u00e3o no nosso programa para exemplificar melhor como o <code>while<\/code> funciona. O nosso objetivo agora \u00e9 fazer o LED piscar tr\u00eas vezes, depois esperar cinco segundos, piscar mais tr\u00eas vezes e assim por diante. N\u00f3s vamos mudar o conte\u00fado da fun\u00e7\u00e3o <code>loop()<\/code> para o seguinte:<\/p>\n<pre>\u00a0\u00a0\/\/ Vari\u00e1vel para contar o n\u00famero de vezes que o LED piscou\r\n\u00a0\u00a0int i = 0;\r\n\u00a0\u00a0\r\n\u00a0\u00a0\/\/ Pisca o LED tr\u00eas vezes\r\n\u00a0\u00a0while(i &lt; 3) {\r\n\u00a0\u00a0\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0i\u00a0=\u00a0i\u00a0+\u00a01;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Aumenta o n\u00famero de vezes que o LED piscou\r\n\u00a0\u00a0}\r\n\u00a0\u00a0\r\n\u00a0\u00a0delay(5000);               \/\/ Espera 5 segundos para piscar o LED de novo\r\n<\/pre>\n<p>Primeiro n\u00f3s declaramos uma vari\u00e1vel <code>i<\/code>. Essa vari\u00e1vel vai contar quantas vezes o LED j\u00e1 piscou desde o in\u00edcio do programa ou desde a \u00faltima pausa de cinco segundos. N\u00f3s vamos inicializar essa vari\u00e1vel com zero porque no in\u00edcio da fun\u00e7\u00e3o <code>loop()<\/code> o LED ainda n\u00e3o piscou nenhuma vez sob essas condi\u00e7\u00f5es.<\/p>\n<p>Em seguida n\u00f3s inserimos o comando <code>while<\/code>, que deve ser seguido de uma <strong>condi\u00e7\u00e3o<\/strong> definida entre par\u00eanteses. Enquanto essa condi\u00e7\u00e3o for verdadeira, todo o bloco de comandos entre os caracteres <code>{<\/code> e <code>}<\/code> \u00e9 executado repetidamente. No caso do nosso programa, enquanto o n\u00famero de &#8220;piscadas&#8221; do LED (representado pela vari\u00e1vel <code>i<\/code>) for menor do que tr\u00eas, n\u00f3s continuamos a executar os comandos que fazem o LED piscar. Isso \u00e9 representado pela express\u00e3o <code>i &lt; 3<\/code> dentro dos par\u00eanteses.<\/p>\n<p>Entre os caracteres <code>{<\/code> e <code>}<\/code> n\u00f3s colocamos o c\u00f3digo que faz o LED piscar, como anteriormente, mas n\u00e3o podemos nos esquecer de somar <code>1<\/code> \u00e0 vari\u00e1vel que conta o n\u00famero de &#8220;piscadas&#8221;. Isso \u00e9 feito na seguinte linha de c\u00f3digo:<\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0i\u00a0=\u00a0i\u00a0+\u00a01;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Aumenta o n\u00famero de vezes que o LED piscou\r\n<\/pre>\n<p>Veja que ap\u00f3s executar todos os comandos entre <code>{<\/code> e <code>}<\/code>, sempre teremos na vari\u00e1vel <code>i<\/code> o n\u00famero de vezes que o LED piscou desde o in\u00edcio da fun\u00e7\u00e3o <code>loop()<\/code>. Vamos percorrer a sequ\u00eancia de passos executada cada vez que a fun\u00e7\u00e3o <code>loop()<\/code> \u00e9 chamada:<\/p>\n<ol>\n<li>Atribu\u00edmos <code>0<\/code> \u00e0 vari\u00e1vel <code>i<\/code>: o LED ainda n\u00e3o piscou nenhuma vez.<\/li>\n<li>Comparamos se <code>i &lt; 3<\/code>: como <code>0<\/code> \u00e9 menor do que <code>3<\/code>, executamos os comandos entre <code>{<\/code> e <code>}<\/code>:\n<ol>\n<li>Executamos os comandos para acender e apagar o LED.<\/li>\n<li>Somamos <code>1<\/code> \u00e0 vari\u00e1vel <code>i<\/code>, tornando-a <code>1<\/code>: sabemos que o LED piscou uma vez.<\/li>\n<\/ol>\n<\/li>\n<li>Voltamos ao in\u00edcio do <code>while<\/code> e comparamos se <code>i &lt; 3<\/code>: como <code>1<\/code> \u00e9 menor do que <code>3<\/code>, executamos os comandos entre <code>{<\/code> e <code>}<\/code> novamente:\n<ol>\n<li>Executamos os comandos para acender e apagar o LED.<\/li>\n<li>Somamos <code>1<\/code> \u00e0 vari\u00e1vel <code>i<\/code>, tornando-a <code>2<\/code>: sabemos que o LED piscou duas vezes.<\/li>\n<\/ol>\n<\/li>\n<li>Voltamos ao in\u00edcio do <code>while<\/code> e comparamos se <code>i &lt; 3<\/code>: como <code>2<\/code> \u00e9 menor do que <code>3<\/code>, executamos os comandos entre <code>{<\/code> e <code>}<\/code> novamente:\n<ol>\n<li>Executamos os comandos para acender e apagar o LED.<\/li>\n<li>Somamos <code>1<\/code> \u00e0 vari\u00e1vel <code>i<\/code>, tornando-a <code>3<\/code>: sabemos que o LED piscou tr\u00eas vezes.<\/li>\n<\/ol>\n<\/li>\n<li>Voltamos ao in\u00edcio do <code>while<\/code> e comparamos se <code>i &lt; 3<\/code>: como <code>3<\/code> <strong>n\u00e3o<\/strong> \u00e9 menor do que <code>3<\/code>, n\u00e3o executamos mais os comandos entre <code>{<\/code> e <code>}<\/code> e prosseguimos \u00e0 pr\u00f3xima instru\u00e7\u00e3o.<\/li>\n<li>Esperamos cinco segundos por meio da chamada <code>delay(5000)<\/code>.<\/li>\n<\/ol>\n<p>Ap\u00f3s esses passos, chegamos ao final da fun\u00e7\u00e3o <code>loop()<\/code>, e como j\u00e1 sabemos, ela \u00e9 chamada novamente pelo sistema do Arduino. Isso reinicia o ciclo, executando os passos acima indefinidamente.<\/p>\n<p>Rode o programa modificado com as instru\u00e7\u00f5es acima no seu Arduino e tente variar o n\u00famero de &#8220;piscadas&#8221; e o n\u00famero<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse16\"><span id=\"for\"><\/span>For<\/h3>\n<div id=\"collapse16\" class=\"collapse in\">\n<p>Agora que n\u00f3s j\u00e1 aprendemos o comando <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#while\">while<\/a>, fica muito f\u00e1cil aprender o comando <strong>for<\/strong>, pois ele \u00e9 quase a mesma coisa. Vamos modificar o conte\u00fado da fun\u00e7\u00e3o <code>loop()<\/code> como fizemos acima, por\u00e9m usando o <code>for<\/code> no lugar do <code>while<\/code>:<\/p>\n<pre>\u00a0\u00a0\/\/ Vari\u00e1vel para contar o n\u00famero de vezes que o LED piscou\r\n\u00a0\u00a0int i;\r\n\u00a0\u00a0\r\n\u00a0\u00a0\/\/ Pisca o LED tr\u00eas vezes\r\n\u00a0\u00a0for(i = 0; i &lt; 3; i++) {\r\n\u00a0\u00a0\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0}\r\n\u00a0\u00a0\r\n\u00a0\u00a0delay(5000);               \/\/ Espera 5 segundos para piscar o LED de novo\r\n<\/pre>\n<p>A primeira modifica\u00e7\u00e3o que fizemos foi declarar a vari\u00e1vel <code>i<\/code> sem inicializ\u00e1-la com o valor <code>0<\/code>. N\u00f3s podemos fazer isso porque o comando <code>for<\/code> far\u00e1 isso para a gente. Ele segue o seguinte formato:<\/p>\n<pre><code>for(inicializa\u00e7\u00e3o; condi\u00e7\u00e3o; finaliza\u00e7\u00e3o) {\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>Vamos descrever cada item separadamente:<\/p>\n<ul>\n<li><strong>Condi\u00e7\u00e3o<\/strong>: \u00e9 uma express\u00e3o verificada repetidamente, de forma id\u00eantica \u00e0 condi\u00e7\u00e3o entre par\u00eanteses do <code>while<\/code>. Enquanto ela for verdadeira, os comandos entre <code>{<\/code> e <code>}<\/code> continuam sendo executados.<\/li>\n<li><strong>Inicializa\u00e7\u00e3o<\/strong>: \u00e9 um comando executado <strong>apenas uma vez<\/strong> no in\u00edcio do comando <code>for<\/code>.<\/li>\n<li><strong>Finaliza\u00e7\u00e3o<\/strong>: \u00e9 um comando executado <strong>repetidas vezes<\/strong> ao final de cada execu\u00e7\u00e3o dos comandos entre <code>{<\/code> e <code>}<\/code>.<\/li>\n<\/ul>\n<p>Podemos ent\u00e3o verificar que o <code>for<\/code> nada mais \u00e9 do que um <code>while<\/code> acrescido de um comando de inicializa\u00e7\u00e3o e um comando de finaliza\u00e7\u00e3o. Para o nosso programa de teste, esses comandos s\u00e3o, respectivamente:<\/p>\n<ul>\n<li><code>i = 0<\/code>: inicializa a contagem do n\u00famero de &#8220;piscadas&#8221;.<\/li>\n<li><code>i++<\/code>: soma <code>1<\/code> \u00e0 vari\u00e1vel <code>i<\/code> ao final da execu\u00e7\u00e3o dos comandos entre <code>{<\/code> e <code>}<\/code>; nesse caso ele \u00e9 equivalente ao comando <code>i = i + 1<\/code>. O operador <code>++<\/code> \u00e9 chamado de operador de <strong>incremento<\/strong>, e \u00e9 muito usado na linguagem C++.<\/li>\n<\/ul>\n<p>Se executarmos o programa acima no Arduino, veremos que o resultado \u00e9 o mesmo que obtivemos com o programa que fizamos anteriormente utilizando o <code>while<\/code>.<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse17\"><span id=\"if\"><\/span>If<\/h3>\n<div id=\"collapse17\" class=\"collapse in\">\n<p>O <strong>if<\/strong> \u00e9 uma das estruturas mais b\u00e1sicas de programa\u00e7\u00e3o em geral. <em>If<\/em> significa &#8220;se&#8221; em ingl\u00eas, e \u00e9 exatamente isso que ele faz: ele verifica uma express\u00e3o e, apenas <strong>se<\/strong> ela for <strong>verdadeira<\/strong>, executa um conjunto de comandos. Em linguagem natural, ele executa uma l\u00f3gica do tipo: &#8220;<strong>se<\/strong> isso for verdadeiro, ent\u00e3o fa\u00e7a aquilo&#8221;<\/p>\n<p>Para ilustrar, vamos modificar o nosso programa de exemplo para que ele fa\u00e7a a mesma coisa que fizemos com o <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#while\">while<\/a> e o <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#for\">for<\/a> acima, por\u00e9m vamos fazer isso usando um <code>if<\/code>, que segue o seguinte formato:<\/p>\n<pre><code>if(condi\u00e7\u00e3o) {\r\n    ...\r\n}\r\n<\/code><\/pre>\n<p>A l\u00f3gica \u00e9 muito simples: sempre que a condi\u00e7\u00e3o vor verdadeira, os comandos entre <code>{<\/code> e <code>}<\/code> s\u00e3o executados, caso contr\u00e1rio o programa prossegue sem execut\u00e1-los. Vamos ver ent\u00e3o como fica a fun\u00e7\u00e3o <code>loop()<\/code>:<\/p>\n<pre>\/\/\u00a0Vari\u00e1vel\u00a0para\u00a0contar\u00a0o\u00a0n\u00famero\u00a0de\u00a0vezes\u00a0que\u00a0o\u00a0LED\u00a0piscou\r\nint i = 0;\r\n\r\nvoid <b>loop<\/b>() {\r\n\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\r\n\u00a0\u00a0i++;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Incrementa o n\u00famero de \"piscadas\"\r\n\u00a0\u00a0if(i == 3) {\r\n\u00a0\u00a0\u00a0\u00a0delay(5000);           \/\/ Espera 5 segundos para piscar o LED de novo  \r\n\u00a0\u00a0\u00a0\u00a0i\u00a0=\u00a00;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Reinicia o contador de n\u00famero de \"piscadas\"\r\n\u00a0\u00a0}\r\n}\r\n<\/pre>\n<p>Aqui a l\u00f3gica \u00e9 um pouco diferente: n\u00f3s vamos manter a fun\u00e7\u00e3o <code>loop()<\/code> piscando o LED como no programa original, por\u00e9m vamos inserir uma espera adicional de 5 segundos ap\u00f3s cada 3 piscadas. Para isso, criamos uma vari\u00e1vel <code>i<\/code> fora da fun\u00e7\u00e3o <code>loop()<\/code>; ela precisa ser declarada de fora da fun\u00e7\u00e3o para poder reter o seu valor entre cada execu\u00e7\u00e3o da fun\u00e7\u00e3o <code>loop()<\/code>. Chamamos isso de <strong>vari\u00e1vel global<\/strong>. Quando a vari\u00e1vel \u00e9 declarada dentro do corpo da fun\u00e7\u00e3o, ela n\u00e3o ret\u00e9m o valor etnre cada execu\u00e7\u00e3o, sendo reiniciada a cada vez que a fun\u00e7\u00e3o \u00e9 re-executada. Chamamos isso de <strong>vari\u00e1vel local<\/strong>.<\/p>\n<p>N\u00f3s usaremos ent\u00e3o essa vari\u00e1vel global <code>i<\/code> para contar, novamente, o n\u00famero de vezes que o LED acendeu e apagou. Na declara\u00e7\u00e3o da vari\u00e1vel, n\u00f3s a inicializamos com o valor <code>0<\/code> para indicar que o LED n\u00e3o acendeu nenhuma vez ainda. A fun\u00e7\u00e3o <code>loop()<\/code> ent\u00e3o come\u00e7a a ser executada, acendendo e apagando o LED. Para contar o n\u00famero de vezes que o LED piscou, n\u00f3s adicionamos a seguinte linha de c\u00f3digo:<\/p>\n<pre>\u00a0\u00a0i++;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Incrementa o n\u00famero de \"piscadas\"\r\n<\/pre>\n<p>Em seguida utilizamos o <code>if<\/code> para verificar se acabamos de acender o LED pela terceira vez. Para isso, usamos a express\u00e3o <code>i == 3<\/code> na condi\u00e7\u00e3o do <code>\u00ecf<\/code>. Se essa express\u00e3o for verdadeira, isso que dizer que o LED j\u00e1 acendeu 3 vezes, ent\u00e3o inserimos uma pausa adicional de 5 segundos com a chamada <code>delay(5000)<\/code> e reiniciamos a contagem do n\u00famero de &#8220;piscadas&#8221; novamente com o seguinte comando:<\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0i\u00a0=\u00a00;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Reinicia o contador de n\u00famero de \"piscadas\"\r\n<\/pre>\n<p>A partir da\u00ed a fun\u00e7\u00e3o <code>loop()<\/code> continua sendo chamada e o ciclo se inicia novamente.<\/p>\n<\/div>\n<h3 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse18\"><span id=\"ifelse\"><\/span>If-Else<\/h3>\n<div id=\"collapse18\" class=\"collapse in\">\n<p>O <strong>if-else<\/strong>, tamb\u00e9m conhecido como <strong>if-then-else<\/strong>, pode ser visto como uma extens\u00e3o do comando <code>if<\/code>. <em>Else<\/em> em ingl\u00eas significa &#8220;caso contr\u00e1rio&#8221;, e ele faz exatamente o que o nome diz: &#8220;<strong>se<\/strong> isso for verdadeiro, ent\u00e3o fa\u00e7a aquilo, <strong>caso contr\u00e1rio<\/strong>, fa\u00e7a outra coisa&#8221;. Ele segue o seguinte formato:<\/p>\n<pre><code>if(condi\u00e7\u00e3o) {\r\n   ...\r\n} else {\r\n   ...\r\n}\r\n<\/code><\/pre>\n<p>Para exemplificar, vamos usar o programa do <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#for\">for<\/a> que mostramos acima, mas vamos dessa vez fazer o LED acender e apagar quatro vezes antes de dar uma pausa de cinco segundos. Depois vamos fazer com que na terceira de cada uma dessas quatro &#8220;piscadas&#8221;, o LED acenda por um per\u00edodo mais curto. Dentro da fun\u00e7\u00e3o <code>loop()<\/code>, teremos o seguinte:<\/p>\n<pre>\u00a0\u00a0\/\/ Vari\u00e1vel para contar o n\u00famero de vezes que o LED piscou\r\n\u00a0\u00a0int i;\r\n\u00a0\u00a0\r\n\u00a0\u00a0\/\/ Pisca o LED tr\u00eas vezes\r\n\u00a0\u00a0for(i = 0; i &lt; 3; i++) {\r\n\u00a0\u00a0\u00a0\u00a0if(i == 2) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delay(200);              \/\/ Espera 200 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delay(1800);             \/\/ Espera 1800 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0}\u00a0else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(led, HIGH); \/\/ Atribui n\u00edvel l\u00f3gico alto ao pino do LED, acendendo-o\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(led, LOW);  \/\/ Atribui n\u00edvel l\u00f3gico baixo ao pino do LED, apagando-o\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0delay(1000);             \/\/ Espera 1000 milissegundos (um segundo)\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0}\r\n\u00a0\u00a0\r\n\u00a0\u00a0delay(5000);               \/\/ Espera 5 segundos para piscar o LED de novo\r\n<\/pre>\n<p>Aqui o que fazemos \u00e9, toda vez que vamos acender o LED, verificar se \u00e9 a terceira vez que isso acontece, por meio do comando <code>if<\/code> com a condi\u00e7\u00e3o <code>i == 2<\/code>. Se essa express\u00e3o for verdadeira, isso quer dizer que j\u00e1 acendemos o LED duas vezes e estamos prestes a acend\u00ea-lo pela terceira vez; nesse caso mudamos o tempo que o LED fica acaso para um valor menor, de 0,2 segundo (uma redu\u00e7\u00e3o de 0,8 segundo) e o tempo que ele fica apagado para um valor maior, de 1,8 segundos (aumento de 0,8 segundo).<\/p>\n<p>Mas e se essa n\u00e3o for a terceira vez que o LED est\u00e1 sendo acionado? \u00c9 a\u00ed que entra o <code>else<\/code>: se a condi\u00e7\u00e3o do <code>if<\/code> for verdadeira, o bloco de comandos entre <code>{<\/code> e <code>}<\/code> logo ap\u00f3s o <code>if<\/code> \u00e9 executado, <strong>caso contr\u00e1rio<\/strong>, o bloco entre <code>{<\/code> e <code>}<\/code> ap\u00f3s o <code>else<\/code> \u00e9 executado. Isso quer dizer que para a primeira, segunda e quarta &#8220;piscadas&#8221; ser\u00e1 usado o tempo padr\u00e3o de um segundo.<\/p>\n<\/div>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse19\"><span id=\"bibliotecas\"><\/span>Bibliotecas<\/h2>\n<div id=\"collapse19\" class=\"collapse in\">\n<p>As coisas que aprendemos nas se\u00e7\u00f5es anteriores s\u00e3o importantes para implementar a l\u00f3gica do seu programa no Arduino, mas normalmente voc\u00ea vai querer fazer mais coisas al\u00e9m de apenas acender um LED. Quando se faz tarefas mais complexas ou se utiliza algum outro circuito conectado ao seu Arduino, um recurso muito importante s\u00e3o as <strong>bibliotecas<\/strong>.<\/p>\n<p>Uma biblioteca \u00e9 basicamente composta de c\u00f3digo fonte adicional que voc\u00ea adiciona ao seu projeto por meio do comando <strong>include<\/strong>. Vejamos como adicionar, por exemplo, uma biblioteca para controle de um display de cristal liquido (LCD):<\/p>\n<pre>#include\u00a0&lt;LiquidCrystal.h&gt;\r\n<\/pre>\n<p>Uma biblioteca do Arduino se apresenta normalmente como uma ou mais <strong>classes<\/strong> que possuem fun\u00e7\u00f5es, os <strong>m\u00e9todos<\/strong>, para acionar dispositivos, configur\u00e1-los ou executar alguma outra tarefa. Continuando com o exemplo do display de cristal l\u00edquido, para us\u00e1-lo no seu programa, primeiro \u00e9 preciso inicializ\u00e1-lo. O que fazemos nesse caso \u00e9 criar um <strong>objeto<\/strong> para acessar o LCD (tecnicamente isso se chama <strong>instanciar<\/strong> um objeto). Vejamos como isso \u00e9 feito:<\/p>\n<pre>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);\r\n<\/pre>\n<p>Quando fazemos isso, <code>lcd<\/code> se torna um objeto da classe <code>LiquidCrystal<\/code>. Isso \u00e9 o equivalente a criar uma <a href=\"https:\/\/www.circuitar.com.br\/tutoriais\/programacao-para-arduino-primeiros-passos\/#variavel\">vari\u00e1vel<\/a> do tipo <code>LiquidCrystal<\/code>. Os par\u00e2metros que s\u00e3o passados entre par\u00eanteses servem para inicializar a configura\u00e7\u00e3o desse objeto, e nesse caso correspondem aos n\u00fameros dos pinos que foram utilizados para conectar o LCD ao Arduino.<\/p>\n<p>Quase sempre as bibliotecas de Arduino possuem um m\u00e9todo <code>begin()<\/code>, que serve para fazer a configura\u00e7\u00e3o inicial do dispositivo que est\u00e1 sendo controlado. Para chamar a fun\u00e7\u00e3o <code>begin()<\/code> do objeto <code>lcd<\/code> que criamos, fazemos o seguinte:<\/p>\n<pre>\u00a0\u00a0lcd.begin(16, 2);\r\n<\/pre>\n<p>Normalmente esse m\u00e9todo <code>begin()<\/code> \u00e9 chamado de dentro da fun\u00e7\u00e3o <code>setup()<\/code>, ou seja, durante a inicializa\u00e7\u00e3o do programa. Os par\u00e2metros do m\u00e9todo <code>begin()<\/code>, nesse caso, correspondem ao n\u00famero de colunas e o n\u00famero de linhas do LCD, respectivamente.<\/p>\n<p>Feitos esses passos, j\u00e1 podemos escrever texto no LCD. Fazemos isso usando o m\u00e9todo <code>print()<\/code> do objeto <code>lcd<\/code>, sempre que precisarmos ao longo do programa:<\/p>\n<pre>\u00a0\u00a0lcd.print(\"Oi!\");\r\n<\/pre>\n<p>O m\u00e9todo <code>print()<\/code> \u00e9 apenas um dos v\u00e1rios m\u00e9todos dispon\u00edveis na blblioteca <code>LiquidCrystal<\/code>. Para saber todos os m\u00e9todos fornecidos por uma determinada biblioteca, \u00e9 preciso consultar a documenta\u00e7\u00e3o fornecida com ela.<\/p>\n<p>Este \u00e9 o processo b\u00e1sico de utiliza\u00e7\u00e3o de bibliotecas no Arduino. Para mais informa\u00e7\u00f5es, leia a documenta\u00e7\u00e3o fornecida com a biblioteca que voc\u00ea est\u00e1 usando.<\/p>\n<p>Classes, objetos e m\u00e9todos s\u00e3o conceitos de <strong>programa\u00e7\u00e3o orientada a objetos<\/strong>. N\u00e3o vamos explicar tudo em detalhes aqui, mas se voc\u00ea quiser aprender mais sobre isso, siga os links relacionados no final da p\u00e1gina.<\/p>\n<\/div>\n<h2 class=\"section-heading anchor\" data-toggle=\"collapse\" data-target=\"#collapse20\"><span id=\"concluso\"><\/span>Conclus\u00e3o<\/h2>\n<div id=\"collapse20\" class=\"collapse in\">\n<p>Neste tutorial n\u00f3s vimos os conceitos b\u00e1sicos de programa\u00e7\u00e3o necess\u00e1rios para programar um Arduino ou mesmo outras plataformas de hardware embarcado. Mas isso \u00e9 s\u00f3 o come\u00e7o, e ainda h\u00e1 muitas coisas a se aprender, tanto na parte de hardware quanto na parte de software. Segue ent\u00e3o uma lista para outros artigos e tutoriais interessantes para que voc\u00ea possa aprender conceitos mais avan\u00e7ados e expandir as suas possibilidades:<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Conceitos iniciais de programa\u00e7\u00e3o para Arduino Autor: Lu\u00eds Fernando Chavier Neste tutorial vamos apresentar os conceitos b\u00e1sicos de programa\u00e7\u00e3o necess\u00e1rios para come\u00e7ar a utilizar o Arduino, e tamb\u00e9m outros tipos de de sistemas embarcados semelhantes. Para conhecer o que \u00e9 poss\u00edvel construir com esses sistemas, veja a nossa se\u00e7\u00e3o de projetos. Se quiser aprender mais [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2131,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[569,207],"tags":[],"class_list":["post-2126","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artigos","category-blog","entry","has-media","owp-thumbs-layout-horizontal","owp-btn-normal","owp-tabs-layout-horizontal","has-no-thumbnails","has-product-nav"],"_links":{"self":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts\/2126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/comments?post=2126"}],"version-history":[{"count":0,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/posts\/2126\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/media\/2131"}],"wp:attachment":[{"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/media?parent=2126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/categories?post=2126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduxop.com.br\/loja\/wp-json\/wp\/v2\/tags?post=2126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}