Você está na página 1de 28

Prefácio

Este manual de apoio foi concebido com o intuito de preparar os estudantes da 11ª Classe
do Instituto Médio Industrial Simione Mucune (IMISM), do curso de Electrónica e
Telecomunicações e Electrónica Industrial e Automação. Para a criação de projectos com
arduinos, utilizando como ferramenta de programação a linguagem C e IDE DO
ARDUINO.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 1


História de Arduino
Arduino foi criado em 2005 pelo italiano Massimo Banzi e um grupo de colaboradores.
O intuito deles era criar uma plataforma de baixo custo que auxiliasse alunos e artistas a
conhecerem o mundo electrónico. Por causa da flexibilidade e fácil manuseio, a placa se
tornou conhecida internacionalmente, se tornando a principal plataforma usada em
criações de projectos de automação, robótica e outras áreas.
Arduino é uma plataforma de computação física (são sistemas digitais ligados a sensores
e actuadores, que permitem construir sistemas que percebam a realidade e respondem
com acções físicas), baseada em uma simples placa de Entrada/Saída microcontrolada e
desenvolvida sobre uma biblioteca que simplifica a escrita da programação em C/C++.

Estruturas do Arduino

O Arduino é baseado em um microcontrolador (ATMega), e dessa forma é logicamente


programável, ou seja, é possível a criação de programas, utilizando uma linguagem
própria baseada em C/C++, que, quando implementadas fazem com que o hardware
execute certas acções. Dessa forma, estamos configurando a etapa de processamento.
O grande diferencial desta ferramenta é que ela é desenvolvida e aperfeiçoada por uma
Comunidade que divulga os seus projetos e seus códigos de aplicação, pois a concepção
dela é open-source, ou seja, qualquer pessoa com conhecimento de programação pode
modificá-lo e ampliá-lo de acordo com a necessidade, visando sempre à melhoria dos
produtos que possam ser criados aplicando o Arduino.
Ele foi projectado com a finalidade de ser de fácil entendimento, programação e
aplicação, além de ser multiplataforma, ou seja, podemos configurá-lo em ambientes
Windows, GNU/Linux e Mac IOS. Assim sendo, pode ser perfeitamente utilizado como
ferramenta educacional sem se preocupar que o usuário tenha um conhecimento
específico de electrônica, mas pelo facto de ter o seu esquema e software de programação
open, acabou chamando a atenção dos técnicos de eletrônica, que começaram a
aperfeiçoá-la e a criar aplicações mais complexas.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 2


Efeito debouncing:
É um efeito mecânico de rebatimento que a tecla sofre logo após ser pressionada. O qual
provoca a leitura falsa, isto é, o rebatimento faz com a tecla seja lida mais de uma vez.
Ou seja há situações em que a leitura de uma porta digital pode sofrer flutuação entre
sinal (HIGH, Alto) e (LOW, Baixo). Pode indicar de forma equivocada que ocorreu
accionamento de uma porta digital, contudo, tal accionamento não ocorreu de facto.
Para resolver este problema utiliza-se técnica de Pull Up ou Pull Down, que é amplamente
utilizado em electrónicas embarcadas.
Pull Up: é um resistor de valor alto (10 KΩ a 50 KΩ ) garantido que sempre o valor
recebido na entrada digital esteja em nível lógico alto no momento em que o botão esteja
aberto, e quando o botão for pressionado leva o nível a zero. A não utilização de resistor
Pull Up possibilita o risco de entrada assumir nível lógico baixo sem que o botão esteja
pressionado.

Pull Down: o princípio é o mesmo do Pull Up, alterando apenas a lógica de


funcionamento. Mantém o estado lógico de entrada em zero no instante em que o botão
estiver aberto, garantido também que o estado lógico da entrada digital muda quando o
botão for pressionado.

Caso o técnico não quiser usar Pull Up e Pull Down Externo, os microcontroladores
ATMEGA já possuem resistores internos de Pull Up e Pull Down, dessa forma não é
necessário usar um resistor externo ligado ao circuito, bastando apenas programar o
mesmo.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 3


Corpo de um programa no Arduino
void setup (): esta função é de caracter obrigatório no programa, pois e nela onde são
configurados os dados iniciais do programa, tais como Pinos de entradas e saídas, estado
de um módulo etc.
Todo o dado contido dentro do void setup () será executado apenas uma vez pelo Arduino.
void loop(): É a função principal, é aqui que grande parte do código será programada.
Funções
As funções são linhas de comandos implementadas para executar uma tarefa específica.
A mesma pode ser usada varias vezes dentro de um programa.
pinMode(): permite configurar o modo de operação do pino do Arduino, como entrada
ou saída.
INPUT: configura o pino como entrada;
OUTPUT: configura o pino como saída;
Sintaxe : pinMode (pino,modo);
Exemplo.
void setup () {
pinMode (5, INPUT);
pinMode (7, OUTPUT);
}

digitalRead(): permite ler o valor do pino digital do Arduino e atribuí-lo a uma variável
para que seja tomada uma acção posteriormente.
Sintaxe: variável= digitalRead (pino)

Exemplo
void loop() {
int liga=digitalRead(3);
Serial.println (liga);
delay (100);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 4


digitalWrite(): permite escrever o estado do pino digital do Arduino. Tal estado pode
assumir dois (2) valores:
HIGH: o pino está ligado;
LOW: o pino está desligado;
Sintaxe : digitalWrite (pino, estado);
Exemplo

void loop() {

digitalWrite (5,HIGH);

digitalWrite (4,LOW);

analogRead(): permite ler o valor do pino analógico do Arduino e atribuí-lo a uma


variável para que seja tomada uma acção posteriormente.
Sintaxe: variável = analogRead (pino);
void loop() {
int pot=analogRead(A0);
Serial.println (pot);
delay (100);
}

analogWrite(): escreve um valor analógico no pino do Arduino.


Subrotinas: são trechos de programas que realizam uma determinada tarefa específica.
Exemplo
void subrotina (){

tempo = tempo+2;
}

void loop ()
{

int tempo;
}

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 5


Nota: devemos criar sub-rotinas para os seguintes casos:
Para permitir o reaproveitamento de código já construído por você ou por outros
programadores;
Para evitar que um trecho de código seja repetido várias vezes dentro de um mesmo
programa;
Para permitir a alteração de um trecho de código de uma forma mais rápida. Com o uso
de uma função, é preciso alterar apenas dentro da função que se deseja;
Para que os blocos do programa não fiquem grandes demais e, por consequência, mais
difíceis de entender;
Para facilitar a leitura do programa fonte de uma forma mais fácil,
Para separar o programa em partes (blocos) que possam ser logicamente compreendidas
de forma isolada.
Tipos de Dados
Os tipos de dados em C que vamos estudar são: caracter, inteiro, ponto flutuante, (float e
double) e sem valor. As palavras reservadas usadas para declarar variáveis desse tipo são
(char, int, float e double e void), respectivamente.

TIPO TAMANHO EM BITS INTERVALO


char 8 0 a 255
int 16 0 a 65535
float 32 3.4E-38 a 3.4E+38
void 0 nenhum valor

O tipo de dados char é utilizado para representação de caracteres ASCII de 8 bits. Cada
variável do tipo char pode representar um caracter ASCII, o tipo int é utilizado para
representar números inteiros de 16 bits (0 a 65535). Estes tipos de dados são amplamente
usados em programação C.
O tipo char e int representam números inteiros e não podem ser utilizados para representar
números fracionários. Para isso, deve ser utilizado o tipo float, também chamado de ponto
flutuante.
O tipo float deve ser evitado ao máximo e restrito apenas às operações que realmente
necessitarem de um tipo de dados como este.
Modificadores de tipos
Podemos utilizar comandos especiais do C para obter outros tipos de dados. Esses
comandos especiais são chamados de modificadores de tipo e são os seguintes:
Signed, unsigned, short, e long.
O modificador de tipo signed pode ser utilizado para modificar um tipo base de dados
para que ele possa representar um número positivo ou negativo.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 6


O modificador short é utilizado para definir uma variável com tamanho menor que o tipo
modificado, ou seja, uma versão reduzida do tipo especificado.
O modificador long é utilizado para ampliar a magnitude de representação do tipo
especificado.

TIPO TAMANHO EM BITS INTERVALO


(unsigned) char 8 0 á 255
signed char 8 "-128 á +127
(signed) short (int) 8 "-128 á +127
unsigned short (int) 8 0 á 255
(signed) int 16 "-32768 á 32767
unsigned int 16 0 à 65535
(signed) long int 32 "-214783648 à 2147483647
unsigned long int 32 0 á 4294967295
" +/- 1.17549435082E-38 á +/-
float 32 680564774407E38
double 32 6,81E+49
"+/- 1.17549435082E-38 á +/-
long double 32 6.80564774407E38
void nulo sem valor

Obs: tipos de float, double e long double são considerados do mesmo tipo.
Declaração de Variáveis
Definir uma variáveis é cria-la na memória (alocá-la), dar a ela um nome e especificar o
tipo de dado que nela vai armazenar variável, do ponto de vista da área de programação,
é uma região de memória previamente identificada que tem por finalidade armazer os
dados ou informações de um programa por um determinado espaço de tempo. Uma
variável e limita-se a armazenar apenas um valor por vez.
Sintaxe para criação de uma variável em C; <tipo> nome_variavel;
O tipo deve ser um tipo de dado válido em C tais como: char, int, float, com ou sem seus
modificadores, unsigned, signed, short e long. E nome_variavel é o nome da variável
adoptada pelo programador.
Em C, podemos declarar variáveis do mesmo tipo em uma única linha de programa,
bastando apenas separá-las por vírgulas e a ultima variável separa-lo por ponto e virgula.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 7


Exemplo
int soma;
unsigned char i, j, k ;
float salario;
unsigned int idade;
short int y;
long caminho, estado;
unsigned valor;

Outro aspecto importante da declaração das variáveis é o local onde são declaradas.
Basicamente, uma Variável pode ser declarada em dois pontos distintos do programa:
Variáveis globais e variáveis local.
Variáveis globais:
No corpo principal do programa: variáveis declaradas no corpo principal do programa
são variáveis globais que podem ser a cessadas por qualquer função do programa. Essas
variáveis estão fora de qualquer função do programa inclusive a função setup ().
Exemplos
1)
int contador;
char a;
void main ()
{
contador = contador +10;
}

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 8


2)

int contador;
char a ;

void subrotina ()

{
contador = contador -20;
a=100;
}
void loop ()
{
contador = contador +10;
a=50;

Variáveis Locais:
Ao contrário das variáveis globais, uma variável local somente existe dentro da função
em que foi declarada. Isto significa que uma variável somente existe enquanto a função
esta sendo executada.
No momento que ocorre o retorno da função, as variáveis locais são descartadas;

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 9


Exemplo
1)
void loop ()
{
int contador;
Contador = contador+10;
}
2)
void subrotina (){

tempo = tempo+2;
}

void loop ()

int tempo;

Nota: repare que avariável “ tempo” foi declarada unicamente dentro da função void loop
() e que seus dados estão sendo manipulados por outra função chamada subrotina (). Ao
compilarmos este programa, certamente o compilador apresentará um erro de compilação
nos informando que avariável “tempo” não foi definida. Esse é um erro comum que
muitos programadores inexperientes cometem na linguagem C, pois esquecem que uma
variável local somente tem validade dentro da função que a declarou.

Tipos de operadores

A linguagem C faz uso de diversos operadores. Podemos classificá-lo em algumas


categorias principais: Aritméticos, Relacionais, Lógicos bit a bit, outros.
Os operadores Aritméticos
Os operadores aritméticos são utilizados para efectuar determinadas operações
matemáticas entre dados e são classificados em duas categorias, sendo binário ou unário.
Os operadores binários actuam em operações de exponenciação, divisão, adição e
subtracção. Os unários actuam na inversão de valores, atribuído o sinal de positivo ou
negativo.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 10


OPERADOR ACÇÃO
+ Adição
- Subtracção ou menos unário
* Multiplicação
/ Divisão
% Resto da divisão
++ Incremento
-- Decremento

Adição e Subtracção
Os operadores de adição e subtracção são muito simples de serem utilizados.

Exemplo:

c=a+b;
d=d+b;
c=c-a;
a=d-a+c;

Multiplicação e Divisão

c= a*b;
d=d*d;
c=c/a;
a=(d*a)/c;

O operador %
O operador % é utilizado para retornar o resto de uma operação de divisão inteiro.

Exemplo

7/3=2, em uma divisão inteira, sendo o resto igual a 1, assim, o valor de 7/3=2 e o valor
de 7%3 = 1.

O operador de incremento ++ e decremento --:

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 11


O operador de Incremento e decremento são utilizados para somar 1 ou subtrair 1 de
uma variável.

Exemplo:
c=c+1;

No exemplo acima avariável c foi incrementada em uma unidade, podemos ter o mesmo
resultado da operação acima através do operador de Incremento que temos o mesmo
resultado;

C++;

c--;

variavel_a= variavel_b++;

Observe que o valor da variável variavel_b é atribuído a variável variavel_a, e logo após
isso, o valor da variavel_b é incrementado em 1 unidade;

Variavel_a = variavel_b--;

Devemos ter alguns cuidados em C com relação aos operadores de Incremento e


Decremento.

Variavel_a = variavel_b++; é diferente de: variavel_a = ++variavel_b;

Note que primeira linha comando, variavel_b é incrementada em 1 unidade é depois que
atribuí seu valor a variável variavel_a. Na segunda linha, o valor da variavel_b é
incrementada em 1 antes de atribuir seu valor a variavel_a;

Operadores Relacionais

Os operadores relacionais servem para comparar expressões e são muito utilizados para
comparar condições de controlo do fluxo de execução de programa.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 12


OPERADOR OPERAÇÃO REALIZADA
> Maior que
>= Maior ou igual a
< Menor que
<= Menor ou igual a
== Igual a
!= Diferente de

Estes operadores serão muito utilizados para construir expressões condicionais

Operadores Lógicos ou Booleanos

Os operadores lógicos ou booleanos são de grande importância para construções de


testes condicionais.

OPERADOR OPERAÇÃO REALIZADA


&& AND (E)
II OR (OU)
! NOT (NÃO)

Com esses operadores podemos relacionar diversas condições diferentes em um mesmo


teste lógico.

Exemplo:

if (c=10 && b=5) c=5;

if (c>0 II a==0) b=a;

if (!a) b=c;

Nota: operador de negação “!” NOT, por esse motivo avariável “a” assumirá o valor
verdadeiro, já que possui valor 0.

E de salientar que existem também operadores bit a bit, que são utilizados para realizar
operações lógicas entre elementos ou variáveis.

Operador de Deslocamento << >>

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 13


O operador >> desloca para a direita os bits de uma variável um determinado número de
vezes.

Exemplo

int a,b,c;

a=10;

b=10;

b=a>>2;

c=b<<5;

No exemplo acima, os valores dos bits da variável “a” foram deslocadas 2 vezes para a
direita, enquanto os bits da variável b foram deslocada 5 vezes para a esquerda.

Estruturas de Controlo

As estruturas de controlo são usadas nos programas em lugares em que necessitamos que
a máquina faça repetidas operações ou necessite de tomadas de decisão.

Comando if

O comando if é uma estrutura de tomada de decisão baseada no resultado lógico de um


teste.

A sua sintaxe é:

if (condição) comando;

Ou

if (condição) {blocos de comandos};

Na linguagem C, qualquer número diferente de zero é tido como verdadeiro. O que


significa que uma condição em C só é falsa, quando os resultados dos operadores que
aplicados for zero (0). Qualquer outro valor, mesmo negativo, é considerado como
verdadeiro ou não zero.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 14


No comando f, caso a condição seja verdadeira (diferente de zero), o comando, ou bloco
de comandos serão executados, caso contrário, quando a condição for falsa zero (0) o
comando será ignorado.

Exemplo

int botao=3;

void setup () {

pinMode(3,INPUT);

pinMode (4,OUTPUT);

void loop (){

if (botao==HIGH) {

digitalWrite (4, HIGH);

O comando if-else

A instrução if-else é uma das instruções de controlo de fluxo de linguagem C. permite


indicar quais as circunstâncias em que determinada instrução ou conjuntos de instruções
devem ser executadas.

A sua sintaxe é:

If (condição)

Comando1;

[else comando2;]

Como se pode observar a componente else do if é facultativa (parêntesis rectos).

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 15


Esta instrução permite a existência de instruções que não sejam executadas num
programa. Para tal basta que a condição necessária para a sua execução, nunca se
verifique.

Exemplo

int botao=3;

void setup () {

pinMode(3,INPUT);

pinMode (4,OUTPUT);

void loop (){

if (botao==HIGH) {

digitalWrite (4, HIGH);

else digitalWrite(4, LOW);

Instruções if-else encadeadas

Existem situações em que o teste de uma condição não é suficiente para tomar uma
decisão. Pode ser necessário testar mais do que uma condição.

if (condição1)

if (condição2)

if (condição3)

instrução1;

else

instrução2;

else

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 16


instrução3;

else

instrução4;

Estrutura if, else, if.

Podemos criar arranjos de comandos através da estrutura if, else, if. Os arranjos são
criados bastando colocar estruturas if alinhados com outras estruturas if.

Sintaxe é :

if (condição1) instrução1; else

if (condição2) instrução 2; else

if (condição3) instrução 3; else

if (condição4) instrução 4;

Exemplo

void setup () {

int contador=10;

int sinal=5;

void loop (){

if (Contador > sinal) sinal ++; else

if (Contador < sinal) sinal --; else

if (Contador == sinal) sinal = 0;

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 17


Caso queiramos adicionar chavetas no exemplo anterior fica:

void setup () {

int contador=10;

int sinal=5;

void loop (){

if (Contador > sinal) {

sinal ++;

contador=17;

else if (Contador < sinal) {

sinal --;

contador=15;

Else if (Contador == sinal) sinal = 0;

Comando switch

O comando switch adapta-se particularmente á tomada de decisões em que o número de


possibilidades é elevado (em geral maior que 2, senão usa-se o if-else), de forma a reduzir
a complexidade de if-else consecutivos e encadeados.

Sintaxe:

Switch (expressão)

case constante1: comando1; break;

case constante2: comando2; break;

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 18


case constante3: comando3; break;

case constanten: comandon; break;

[default:comando;]

Na sintaxe apresentada, expressão representa qualquer expressão cujo resultado seja um


valor numero dos tipos char , int ou long. A expressão é avaliada, e em seguida o switch
compara o resultado da expressão, com o valor de cada constante que segue cada um dos
case. O conjunto de todos valores possíveis para a expressão é colocado entre chavetas.

Exemplo:

void setup () {

int contador=10;

int sinal=5;

void loop (){

Switch (contador)

case constante2: sinal ++; break;

case constante1: sinal=2; break;

case constante10: Contador --; break;

case constanten: comandon; break;

default: sinal=0;

Estruturas de Repetição

Os laços de repetição servem para repetir uma ou mais vezes determinada instruções ou
blocos de instruções.

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 19


Existem três tipos de estruturas de repetição na linguagem C. (for, while e do - while)

A estrutura for (ou ciclo for ); adapta-se particularmente a situação em que o número de
iteração é conhecido à partida.

Sintaxe:

for ( inicialização; condição; pós-instrução(incremento ou decremento))

comando;

ou

for ( inicialização; condição; pós-instrução(incremento ou decremento))

Comando1;

Comando2;

Comandon;

Exemplo

int liga;

void setup () {

pinMode(4, OUTPUT);

void loop (){

for ( liga=0; liga==10; liga ++)

digitalWrite (4, HIGH);

delay(1000);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 20


digitalWrite (4, LOW);

delay(100);

Instrução while: é utilizado para repetição de um determinado conjunto de instrução


enquanto uma condição for verdadeira.

Sintaxe:

While (condição)

Instrução;

Exemplo

int a=20;

void setup () {

pinMode (3,OUTPUT);

Serial.begin(9600);

void loop (){

while (a>=5) {

a++;

Serial.println(" a " );

digitalWrite(3, HIGH);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 21


O laço do – while

O comando do – while forma uma estrutura de repetição diferente dos comandos while e
for a sua diferença fundamental com relação as outras tradicionais laços do loop while e
for está no facto da avaliação da condição de teste ser final do laço de repetição, contrário
dos outros laços que vimos, que testam as condições no início da cada ciclo.

Sintaxe

do

Comando1;

Comando2;

} while (condição de teste);

Exemplo

int a=0;

void setup () {

pinMode (3,OUTPUT);

Serial.begin(9600);

void loop (){

do

a++;

Serial.println(" a " );

digitalWrite(3, HIGH);

} while (a>=100);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 22


Exemplos de Aplicação

Controlar os pinos 2 e 3 para activar e desactivar os Leds, os mesmos foram


programados como saídas.

void setup() {

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

void loop() {

digitalWrite (2,HIGH);

digitalWrite (3,LOW);

delay(1000);

digitalWrite (2,LOW);

digitalWrite (3,HIGH);

delay(1000);

Usando variáveis globais.

int led1=2; // definição das variáveis globais como do tipo Inteiro.

int led2=3;

int tempo=1000;

void setup() {

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 23


}

void loop() {

digitalWrite (led1,HIGH);

digitalWrite (led2,LOW);

tempo;

digitalWrite (led1,LOW);

digitalWrite (led2,HIGH);

tempo;

Usando botão para Ligar e Desliga uma determinada saída que está conectado num
dado pino.

int led1=2;

int botao=5;

void setup() {

pinMode(2,OUTPUT);

pinMode(botao,INPUT_PULLUP);

void loop() {

if (digitalRead(botao)==0){

digitalWrite (led1,HIGH);

else

digitalWrite (led1,LOW);

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 24


Usando dois botões para Ligar e Desliga uma determinada saída que está conectado
num dado pino.

int led1=2;

int botao=5;

int botao1=7;

void setup() {

pinMode(2,OUTPUT);

pinMode(botao,INPUT_PULLUP);

pinMode(botao1,INPUT_PULLUP);

void loop() {

if (digitalRead(botao)==0 && digitalRead(botao1)==0){

digitalWrite (led1,HIGH);

else

digitalWrite (led1,LOW);

Usando LCD para Visualização das informações.

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 25


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

lcd.begin(16, 2);

lcd.print("Ola Angola");

void loop() {

Manipulando o botão para activar e desactivar uma determinada carga, e visualizar


a informação no LCD.

int BOTAO=7;

int led=9;

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

pinMode(7,INPUT_PULLUP);

pinMode(9,OUTPUT);

lcd.begin(16, 2);

lcd.print("=POR FAVOR =");

lcd.setCursor(0, 1);

lcd.print("PRESSIONE BOTAO ");

delay(1000);

void loop() {

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 26


lcd.clear();

lcd.print("= METODISTA =");

if (digitalRead(BOTAO)==0) {

digitalWrite(led,HIGH);

lcd.setCursor(0, 1);

lcd.print("CARGA ACTIVA");

delay(500);

} else {

digitalWrite(led,LOW);

lcd.setCursor(0, 1);

lcd.print("CARGA DESACTIVA");

delay(500);

// Mesmo exemplo, mas usando SOBREROTINA


#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
pinMode(7,INPUT_PULLUP);
pinMode(9,OUTPUT);
lcd.begin(16, 2);
lcd.print("=POR FAVOR =");
lcd.setCursor(0, 1);
lcd.print("PRESSIONE TECLA ");

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 27


delay(500);
}
void loop() {
liga();
}
void liga(){
lcd.clear();
lcd.print("= SISTEMA =");
if (digitalRead(7)==0) {
digitalWrite(9,HIGH);
lcd.setCursor(0, 1);
lcd.print("LAMPADA ACTIVA");
delay(500);
} else {
digitalWrite(9,LOW);
lcd.setCursor(0, 1);
lcd.print("LAMP DESACTIVA");
delay(500);
}
}

ELABORADO POR ENGº NELITO MUCONDO DE SOUSA 28

Você também pode gostar