Escolar Documentos
Profissional Documentos
Cultura Documentos
Arduino Simples e Divertido
Arduino Simples e Divertido
Divertido
Explore o potencial do Arduino
com
os módulos da GBK Robotics
Cláudio Vieira Oliveira e Humberto
Zanetti
Arduino Simples e
Divertido
Explore o potencial do Arduino
com
os módulos da GBK Robotics
Copyright © 2016, Cláudio Luís Vieira Oliveira e Humberto Augusto
Piovesana Zanetti
Capa:
Claudia Baptistella Oliveira
Humberto Zanetti
Sobre os Autores
Cláudio Luís Vieira Oliveira
Mestre em Sistemas de Computação pela
Pontifícia Universidade Católica de Campinas e
bacharel em Análise de Sistemas pela
Universidade Metodista de Piracicaba. Possui
mais de 25 anos de experiência na área de
Ciência da Computação. Coordenador de Curso e
Professor da Faculdade de Tecnologia de Jundiaí
(FATEC) e Professor na Faculdade de Tecnologia
de Bragança Paulista (FATEC).
Capítulo 1:
Introdução
O Arduino é uma versátil plataforma de
prototipagem eletrônica, de hardware e software
aberto, de baixo custo e muito fácil de usar,
mesmo para pessoas que possuem pouco ou
nenhum conhecimento de eletrônica. Quando
falamos em Arduino devemos ter em mente três
conceitos: hardware que é a placa que possui
como componente central um microcontrolador
da família ATmega; software que consiste em
uma linguagem de programação e um ambiente
de desenvolvimento derivados do Processing. O
terceiro conceito é a comunidade, composta por
um grande número de pessoas que
compartilham os seus conhecimentos e projetos
na Internet, disseminando a plataforma.
14
Arduino Simples e Divertido
O ambiente de desenvolvimento do
Arduino pode ser gratuitamente baixado dos
sites www.arduino.cc ou www.arduino.org. Nestes
sites e em muitos outros, também estão
disponíveis as instruções para realizar a
instalação em diversos sistemas operacionais,
além de fóruns para tirar dúvidas e obter maiores
informações.
15
Cláudio Vieira Oliveira e Humberto Zanetti
16
Arduino Simples e Divertido
17
Cláudio Vieira Oliveira e Humberto Zanetti
Itens Necessários
P5 – Extensão P7 – Sensor de
Luminosidade
18
Arduino Simples e Divertido
P12 - Sensor de
P11 – Display Simples Obstáculos
19
Cláudio Vieira Oliveira e Humberto Zanetti
20
Arduino Simples e Divertido
21
Cláudio Vieira Oliveira e Humberto Zanetti
22
Arduino Simples e Divertido
23
Cláudio Vieira Oliveira e Humberto Zanetti
// Isto é um comentário
24
Arduino Simples e Divertido
Constantes e Variáveis
25
Cláudio Vieira Oliveira e Humberto Zanetti
Estruturas Condicionais
27
Cláudio Vieira Oliveira e Humberto Zanetti
if (expressao) {
comando 1;
comando 2;
...
}
if (expressao) {
comando 1;
comando 2;
...
}
else {
comando 1;
comando 2;
...
}
28
Arduino Simples e Divertido
if (expressao) {
comando 1;
comando 2;
...
}
else if {
comando 1;
comando 2;
...
}
else {
comando 1;
comando 2;
...
}
switch (variavel) {
case valor1:
comando 1;
comando 2;
...
break;
case valor2:
comando 1;
comando 2;
...
break;
...
case valorN:
comando 1;
comando 2;
...
break;
default:
comando 1;
30
Arduino Simples e Divertido
comando 2;
...
break;
}
Estruturas de Repetição
31
Cláudio Vieira Oliveira e Humberto Zanetti
while (expressao) {
comando 1;
comando 2;
...
}
do {
comando 1;
comando 2;
...
} while (expressao);
32
Arduino Simples e Divertido
Vetores e Matrizes
33
Cláudio Vieira Oliveira e Humberto Zanetti
int vetor[5];
35
Cláudio Vieira Oliveira e Humberto Zanetti
int matriz[3][5];
Operadores
36
Arduino Simples e Divertido
++ incremento
-- decremento
37
Cláudio Vieira Oliveira e Humberto Zanetti
38
>
Arduino Simples e Divertido
Capítulo 2:
Saídas Digitais
Como já mencionado anteriormente o
Arduino possui um conjunto de pinos que são
utilizados como entradas ou saídas digitais
(Figura 2.1).
39
Cláudio Vieira Oliveira e Humberto Zanetti
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
41
Cláudio Vieira Oliveira e Humberto Zanetti
Projeto 1: PISCA-PISCA
43
Cláudio Vieira Oliveira e Humberto Zanetti
44
Arduino Simples e Divertido
void setup() {
// Definir o pino como saída:
pinMode(LED, OUTPUT);
}
void loop() {
// Acender o LED:
digitalWrite(LED, HIGH);
// Apagar o LED:
digitalWrite(LED, LOW);
45
Cláudio Vieira Oliveira e Humberto Zanetti
46
Arduino Simples e Divertido
Projeto 2: SEMÁFORO
// Semáforo
void setup() {
pinMode(VERM, OUTPUT);
pinMode(AMAR, OUTPUT);
pinMode(VERD, OUTPUT);
}
void loop() {
digitalWrite(VERM, HIGH);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, LOW);
delay(2000);
digitalWrite(VERM, LOW);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, HIGH);
delay(3000);
digitalWrite(VERM, LOW);
digitalWrite(AMAR, HIGH);
digitalWrite(VERD, LOW);
delay(1000);
}
50
Arduino Simples e Divertido
53
Cláudio Vieira Oliveira e Humberto Zanetti
// Sequencial de LEDs
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
delay(200);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
delay(200);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(200);
digitalWrite(LED1, LOW);
54
Arduino Simples e Divertido
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
delay(200);
}
55
Cláudio Vieira Oliveira e Humberto Zanetti
56
Arduino Simples e Divertido
57
Cláudio Vieira Oliveira e Humberto Zanetti
int digito[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
{ LOW, HIGH, LOW }, // 2
{ LOW, HIGH, HIGH }, // 3
{ HIGH, LOW, LOW }, // 4
{ HIGH, LOW, HIGH }, // 5
{ HIGH, HIGH, LOW }, // 6
{ HIGH, HIGH, HIGH } // 7
};
59
Cláudio Vieira Oliveira e Humberto Zanetti
int num = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
digitalWrite(LED1, digito[num][0]);
digitalWrite(LED2, digito[num][1]);
digitalWrite(LED3, digito[num][2]);
num++;
if (num > 7)
num = 0;
delay (1000);
}
int digito[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
{ LOW, HIGH, LOW }, // 2
{ LOW, HIGH, HIGH }, // 3
{ HIGH, LOW, LOW }, // 4
{ HIGH, LOW, HIGH }, // 5
{ HIGH, HIGH, LOW }, // 6
60
Arduino Simples e Divertido
void loop() {
digitalWrite(LED1, digito[num][0]);
digitalWrite(LED2, digito[num][1]);
digitalWrite(LED3, digito[num][2]);
num++;
if (num > 7)
num = 0;
delay (1000);
}
61
Cláudio Vieira Oliveira e Humberto Zanetti
62
Arduino Simples e Divertido
// Semáforo completo
int VERMV = 9;
int AMARV = 10;
int VERDV = 11;
int VERMP = 12;
int VERDP = 13;
void setup() {
pinMode(VERMV, OUTPUT);
pinMode(AMARV, OUTPUT);
pinMode(VERDV, OUTPUT);
63
Cláudio Vieira Oliveira e Humberto Zanetti
pinMode(VERMP, OUTPUT);
pinMode(VERDP, OUTPUT);
}
void loop() {
digitalWrite(VERMV, HIGH);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, LOW);
digitalWrite(VERMP, LOW);
digitalWrite(VERDP, HIGH);
delay(3000);
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, HIGH);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
delay(1000);
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, HIGH);
digitalWrite(VERDV, LOW);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
delay (2000);
}
int i = 0;
int estado[15][6] = {
{1, 0, 0, 0, 1, 3000},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 1, 0, 0, 4000},
{0, 1, 0, 1, 0, 2000}
};
void setup() {
pinMode(ledVerdPed, OUTPUT);
pinMode(ledVermPed, OUTPUT);
pinMode(ledVerdCar, OUTPUT);
pinMode(ledAmarCar, OUTPUT);
pinMode(ledVermCar, OUTPUT);
}
void loop() {
digitalWrite(ledVerdPed, estado[i][0]);
digitalWrite(ledVermPed, estado[i][1]);
digitalWrite(ledVerdCar, estado[i][2]);
digitalWrite(ledAmarCar, estado[i][3]);
65
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(ledVermCar, estado[i][4]);
delay(estado[i][5]);
i++;
if (i > 14)
i = 0;
}
int estado[15][6] = {
{1, 0, 0, 0, 1, 3000},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 0, 0, 1, 200},
{0, 0, 0, 0, 1, 200},
{0, 1, 1, 0, 0, 4000},
{0, 1, 0, 1, 0, 2000}
};
66
Arduino Simples e Divertido
void loop() {
digitalWrite(ledVerdPed, estado[i][0]);
digitalWrite(ledVermPed, estado[i][1]);
digitalWrite(ledVerdCar, estado[i][2]);
digitalWrite(ledAmarCar, estado[i][3]);
digitalWrite(ledVermCar, estado[i][4]);
delay(estado[i][5]);
i++;
if (i > 14)
i = 0;
}
67
Cláudio Vieira Oliveira e Humberto Zanetti
Projeto 6: BUZZER
68
Arduino Simples e Divertido
int BUZZER = 9;
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
// Define pino e a frequência:
tone(BUZZER, 1200);
delay(500);
// Silencia o buzzer:
noTone(BUZZER);
delay(500);
}
69
Cláudio Vieira Oliveira e Humberto Zanetti
int BUZZER = 9;
void setup() {
pinMode(BUZZER, OUTPUT);
}
70
Arduino Simples e Divertido
void loop() {
// Define o pino, a frequência e a duração:
tone(BUZZER, 1200, 500);
delay(1000);
}
int BUZZER = 9;
int numNotas = 10;
/*
* Notas: C C# D D# E F F# G G# A
* C=Dó D=Ré E=Mi F=Fá G=Sol A=Lá B=Si
* As notas sem o “#”, são as notas naturais
* (fundamentais).
* Aquelas com o “#”, são chamadas “notas
* sustenidas” (por exemplo: C#=Dó Sustenido).
*/
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
for (int i = 0; i < numNotas; i++) {
tone(BUZZER, notas[i]);
71
Cláudio Vieira Oliveira e Humberto Zanetti
delay(500);
}
noTone(BUZZER);
}
72
Arduino Simples e Divertido
73
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
for (i = 0; i < TAM; i++) {
pinMode(LED[i], OUTPUT);
}
pinMode(OLHOE, OUTPUT);
pinMode(OLHOD, OUTPUT);
pinMode(BUZZER, OUTPUT);
74
Arduino Simples e Divertido
i = 0;
}
void loop() {
digitalWrite(OLHOE, HIGH);
digitalWrite(OLHOD, HIGH);
digitalWrite(LED[i], HIGH);
// Define o pino, a frequência e a duração:
tone(BUZZER, 5800, 100);
delay(200);
digitalWrite(LED[i], LOW);
i++;
if (i == TAM)
i = 0;
delay(800);
}
75
>
Cláudio Vieira Oliveira e Humberto Zanetti
Capítulo 3:
Comunicação Serial
A comunicação serial permitirá que o
Arduino envie e receba dados dos outros
dispositivos. A forma mais simples de
implementação consiste em utilizar a própria
conexão USB realizada entre o computador e o
Arduino para realizar a troca de dados. O próprio
ambiente de desenvolvimento do Arduino provê
acesso à comunicação serial através do botão
“Monitor Serial” (Figura 3.1).
76
Arduino Simples e Divertido
void setup() {
Serial.begin(9600);
77
Cláudio Vieira Oliveira e Humberto Zanetti
void loop() {
// Verificar se há bytes a serem lidos na
// entrada serial
if (Serial.available() > 0) {
// Ler o byte que está na entrada serial
int entrada = Serial.read();
}
}
78
Arduino Simples e Divertido
79
Cláudio Vieira Oliveira e Humberto Zanetti
80
Arduino Simples e Divertido
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println("Digite 1 para acender o led ou 0 para
apagar:");
}
void loop() {
81
Cláudio Vieira Oliveira e Humberto Zanetti
if (Serial.available() > 0) {
// Ler o byte que está na entrada serial
entrada = Serial.read();
82
Arduino Simples e Divertido
83
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
Serial.begin(9600);
pinMode(OLHOE, OUTPUT);
pinMode(OLHOD, OUTPUT);
pinMode(VERMELHO, OUTPUT);
pinMode(AMARELO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(NARIZ, OUTPUT);
Serial.println("1. Abrir os olhos");
Serial.println("2. Fechar os olhos");
Serial.println("3. Abrir olho esquerdo");
Serial.println("4. Abrir olho direito");
Serial.println("5. Piscar olho esquerdo");
Serial.println("6. Piscar olho direito");
Serial.println("7. Espirrar");
Serial.println("8. Feliz");
}
void loop() {
if (Serial.available() > 0) {
// Ler o byte que está na entrada serial
entrada = Serial.read();
switch (entrada) {
case '1':
digitalWrite(OLHOE, HIGH);
digitalWrite(OLHOD, HIGH);
84
Arduino Simples e Divertido
break;
case '2':
digitalWrite(OLHOE, LOW);
digitalWrite(OLHOD, LOW);
break;
case '3':
digitalWrite(OLHOE, HIGH);
break;
case '4':
digitalWrite(OLHOD, HIGH);
break;
case '5':
for (int i = 0; i < 5; i++) {
digitalWrite(OLHOE, LOW);
delay (100);
digitalWrite(OLHOE, HIGH);
delay (100);
}
break;
case '6':
for (int i = 0; i < 5; i++) {
digitalWrite(OLHOD, LOW);
delay (100);
digitalWrite(OLHOD, HIGH);
delay (100);
}
break;
case '7':
digitalWrite(NARIZ, HIGH);
delay(200);
digitalWrite(NARIZ, LOW);
break;
case '8':
for (int i = 0; i < 10; i++) {
digitalWrite(VERMELHO, HIGH);
delay (100);
digitalWrite(VERMELHO, LOW);
85
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(AMARELO, HIGH);
delay (100);
digitalWrite(AMARELO, LOW);
digitalWrite(VERDE, HIGH);
delay (100);
digitalWrite(VERDE, LOW);
}
break;
default:
Serial.println("Opção não reconhecida!");
}
}
delay (500);
}
86
Arduino Simples e Divertido
87
>
Cláudio Vieira Oliveira e Humberto Zanetti
Capítulo 4:
Saídas PWM
Os pinos digitais 3, 5, 6, 9, 10 e 11, que são
identificados pelo símbolo ~ (til) (Figura 4.1),
também podem ser utilizados como saída PWM
(Pulse Width Modulation). Quando usamos este
tipo de saída é possível trabalhar com um
conjunto de valores inteiros entre 0 e 255 ao
invés de apenas 0 (LOW) ou 1 (HIGH). Desta
forma, é possível controlar a velocidade de um
motor, a intensidade luminosa de um LED, entre
outras possíveis aplicações.
88
Arduino Simples e Divertido
89
Cláudio Vieira Oliveira e Humberto Zanetti
90
Arduino Simples e Divertido
// LED pulsante
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
for (int i = 0; i < 180; i++) {
seno = sin(i * (3.1416 / 180));
intensidade = int(seno * 255);
analogWrite (LED, intensidade);
delay (20);
}
}
91
Cláudio Vieira Oliveira e Humberto Zanetti
92
Arduino Simples e Divertido
93
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
Serial.begin(9600);
pinMode(OLHOD, OUTPUT);
pinMode(OLHOE, OUTPUT);
}
void loop() {
for (int i = 0; i < 180; i++) {
seno = sin(i * (3.1416 / 180));
94
Arduino Simples e Divertido
95
Cláudio Vieira Oliveira e Humberto Zanetti
96
Arduino Simples e Divertido
// LED RGB
int VERMELHO = 9, VERDE = 10, AZUL = 11;
void setup() {
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
}
void loop() {
iVermelho = random(256);
iVerde = random(256);
iAzul = random(256);
analogWrite(VERMELHO, iVermelho);
analogWrite(VERDE, iVerde);
analogWrite(AZUL, iAzul);
97
Cláudio Vieira Oliveira e Humberto Zanetti
delay(500);
}
98
>
Arduino Simples e Divertido
Capítulo 5:
Entradas Digitais
Os pinos digitais 0 a 13 do Arduino podem
ser configurados como entrada, ou seja, podem
receber um valor 0 (LOW) ou 1 (HIGH) de um
dispositivo sensor, por exemplo, um botão ou um
sensor de obstáculos, entre outros.
void setup() {
pinMode(2, INPUT);
}
void loop() {
// Obtém LOW (0) - botão não pressionado
// ou HIGH (1) – botão pressionado
int valor = digitalRead(2);
}
99
Cláudio Vieira Oliveira e Humberto Zanetti
100
Arduino Simples e Divertido
102
Arduino Simples e Divertido
// Botão Liga-Desliga
void setup() {
pinMode(LED, OUTPUT);
pinMode(BOTAO, INPUT);
}
103
Cláudio Vieira Oliveira e Humberto Zanetti
void loop() {
// Obtém LOW (botão não pressionado)
// ou HIGH (pressionado)
valor = digitalRead(BOTAO);
digitalWrite(LED, valor);
delay (100);
}
104
Arduino Simples e Divertido
void loop() {
valor = digitalRead(BOTAO);
if (valor == HIGH && anterior == LOW) {
estado = !estado;
}
digitalWrite(LED, estado);
anterior = valor;
delay (50);
}
105
Cláudio Vieira Oliveira e Humberto Zanetti
106
Arduino Simples e Divertido
107
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
pinMode(OLHOE, OUTPUT);
pinMode(OLHOD, OUTPUT);
pinMode(VERMELHO, OUTPUT);
pinMode(AMARELO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(NARIZ, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
botao = digitalRead(BOTAO);
if (botao == HIGH && anterior == LOW) {
funcao++;
switch (funcao) {
case 1:
digitalWrite(OLHOE, HIGH);
digitalWrite(OLHOD, HIGH);
break;
108
Arduino Simples e Divertido
case 2:
digitalWrite(OLHOE, HIGH);
digitalWrite(OLHOD, LOW);
break;
case 3:
digitalWrite(OLHOE, LOW);
digitalWrite(OLHOD, HIGH);
break;
case 4:
for (int i = 0; i < 5; i++) {
digitalWrite(OLHOE, LOW);
delay (100);
digitalWrite(OLHOE, HIGH);
delay (100);
}
break;
case 5:
for (int i = 0; i < 5; i++) {
digitalWrite(OLHOD, LOW);
delay (100);
digitalWrite(OLHOD, HIGH);
delay (100);
}
break;
case 6:
digitalWrite(NARIZ, HIGH);
delay(200);
digitalWrite(NARIZ, LOW);
break;
case 7:
for (int i = 0; i < 10; i++) {
digitalWrite(VERMELHO, HIGH);
delay (100);
digitalWrite(VERMELHO, LOW);
digitalWrite(AMARELO, HIGH);
delay (100);
digitalWrite(AMARELO, LOW);
109
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(VERDE, HIGH);
delay (100);
digitalWrite(VERDE, LOW);
}
break;
default:
digitalWrite(OLHOE, LOW);
digitalWrite(OLHOD, LOW);
funcao = 0;
}
}
anterior = botao;
delay (50);
}
110
Arduino Simples e Divertido
111
Cláudio Vieira Oliveira e Humberto Zanetti
112
Arduino Simples e Divertido
int botao;
int anterior = LOW;
int contador = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
botao = digitalRead(BOTAO);
if (botao == HIGH && anterior == LOW) {
contador++;
114
Arduino Simples e Divertido
if (contador > 6)
contador = 0;
mostrarDado(contador);
}
anterior = botao;
delay (50);
}
115
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 4) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 5) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 6) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
}
}
116
Arduino Simples e Divertido
117
Cláudio Vieira Oliveira e Humberto Zanetti
118
Arduino Simples e Divertido
// Dado Eletrônico
int botao;
int anterior = LOW;
void setup() {
randomSeed(analogRead(A0));
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
botao = digitalRead(BOTAO);
119
Cláudio Vieira Oliveira e Humberto Zanetti
// Durante 2 segundos
delay(2000);
120
Arduino Simples e Divertido
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
}
else if (valor == 3) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 4) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 5) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
}
else if (valor == 6) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
121
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
}
}
randomSeed(analogRead(A0));
botao = digitalRead(BOTAO);
if (botao == HIGH anterior == LOW) {
// Exibir o valor sorteado (entre 1 e 6)
mostrarDado(random(1, 7));
// Continua...
}
122
Arduino Simples e Divertido
123
Cláudio Vieira Oliveira e Humberto Zanetti
// Tiro ao Alvo
124
Arduino Simples e Divertido
int LED5 = 9;
int LED6 = 8;
int LED7 = 7;
int botao;
int anterior = LOW;
int alvo;
int led;
unsigned long tempo;
int placar;
bool sortear;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(A0));
placar = 0;
sortear = true;
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
if (sortear) {
alvo = random(7, 14);
sortear = false;
mostrar(alvo);
125
Cláudio Vieira Oliveira e Humberto Zanetti
}
led = random(7, 14);
digitalWrite(led, HIGH);
tempo = random (50, 500);
unsigned long inicio = millis();
while (millis() <= (inicio + tempo)) {
botao = digitalRead(BOTAO);
if (botao == HIGH && anterior == LOW) {
if (led == alvo) {
acerto();
sortear = true;
break;
}
else {
erro();
}
}
anterior = botao;
}
digitalWrite(led, LOW);
if (led == alvo && sortear == false) {
erro();
}
}
void apagar() {
digitalWrite(LED1, LOW);
126
Arduino Simples e Divertido
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
}
void acerto() {
placar++;
Serial.print("Placar: ");
Serial.println(placar);
for (int i = 0; i < 3; i++) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
delay(250);
apagar();
delay (250);
}
delay (500);
}
void erro() {
placar--;
if (placar < 0)
placar = 0;
Serial.print("Placar: ");
Serial.println(placar);
}
127
Cláudio Vieira Oliveira e Humberto Zanetti
129
Cláudio Vieira Oliveira e Humberto Zanetti
130
Arduino Simples e Divertido
131
Cláudio Vieira Oliveira e Humberto Zanetti
int botao;
int anterior = LOW;
int alvo;
int led;
unsigned long tempo;
int placar;
bool sortear;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
placar = 0;
sortear = true;
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
132
Arduino Simples e Divertido
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
if (sortear) {
alvo = random(7, 14);
sortear = false;
mostrar(alvo);
}
led = random(7, 14);
digitalWrite(led, HIGH);
tempo = random (50, 500);
unsigned long inicio = millis();
while (millis() <= (inicio + tempo)) {
botao = digitalRead(BOTAO);
if (botao == HIGH && anterior == LOW) {
if (led == alvo) {
acerto();
sortear = true;
break;
}
else {
erro();
}
}
anterior = botao;
}
digitalWrite(led, LOW);
if (led == alvo && sortear == false) {
erro();
}
}
133
Cláudio Vieira Oliveira e Humberto Zanetti
void apagar() {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
}
void acerto() {
placar++;
Serial.print("Placar: ");
Serial.println(placar);
for (int i = 0; i < 3; i++) {
tone(BUZZER, 5800, 200);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
delay(250);
apagar();
delay (250);
134
Arduino Simples e Divertido
}
delay (500);
}
void erro() {
tone(BUZZER, 800, 100);
placar--;
if (placar < 0)
placar = 0;
Serial.print("Placar: ");
Serial.println(placar);
}
135
Cláudio Vieira Oliveira e Humberto Zanetti
136
Arduino Simples e Divertido
137
Cláudio Vieira Oliveira e Humberto Zanetti
138
Arduino Simples e Divertido
No ambiente de desenvolvimento do
Arduino digite o seguinte sketch (programa):
int digito[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
{ LOW, HIGH, LOW }, // 2
{ LOW, HIGH, HIGH }, // 3
{ HIGH, LOW, LOW }, // 4
{ HIGH, LOW, HIGH }, // 5
140
Arduino Simples e Divertido
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
botao = digitalRead(BOTAO);
if (botao == HIGH && anterior == LOW) {
num++;
if (num > 7)
num = 0;
}
anterior = botao;
digitalWrite(LED1, digito[num][0]);
digitalWrite(LED2, digito[num][1]);
digitalWrite(LED3, digito[num][2]);
delay (50);
}
141
Cláudio Vieira Oliveira e Humberto Zanetti
142
Arduino Simples e Divertido
144
Arduino Simples e Divertido
145
Cláudio Vieira Oliveira e Humberto Zanetti
146
Arduino Simples e Divertido
147
Cláudio Vieira Oliveira e Humberto Zanetti
#include <RotaryEncoder.h>
int digito[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
149
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
150
Arduino Simples e Divertido
void loop() {
static int pos = 0;
int novaPos = encoder.getPosition();
if (pos != novaPos) {
Serial.println(novaPos);
pos = novaPos;
if (pos >= 0 && pos <= 7) {
digitalWrite(LED1, digito[pos][0]);
digitalWrite(LED2, digito[pos][1]);
digitalWrite(LED3, digito[pos][2]);
}
}
}
151
Cláudio Vieira Oliveira e Humberto Zanetti
152
>
Arduino Simples e Divertido
Capítulo 6:
Entradas Analógicas
O Arduino apresenta um conjunto de 6
pinos que podem receber um sinal analógico
entre 0 e 5 Volts e converter para um valor
numérico entre 0 e 1023. Nestes pinos podemos
conectar sensores analógicos como sensores de
temperatura, luz ou infravermelho, entre
diversos outros tipos.
153
Cláudio Vieira Oliveira e Humberto Zanetti
154
Arduino Simples e Divertido
155
Cláudio Vieira Oliveira e Humberto Zanetti
No ambiente de desenvolvimento do
Arduino e implemente o seguinte sketch:
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
int entrada = analogRead(LDR);
Serial.println(entrada);
if (entrada < 200)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
delay(100);
}
156
Arduino Simples e Divertido
157
Cláudio Vieira Oliveira e Humberto Zanetti
158
Arduino Simples e Divertido
159
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
int entrada = analogRead(LDR);
int nivel = map(entrada, 0, 1023, 0, 3);
Serial.print(entrada);
Serial.print(" -> ");
Serial.print(nivel);
switch(nivel) {
case 0:
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
break;
case 1:
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
break;
case 2:
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
160
Arduino Simples e Divertido
break;
case 3:
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
break;
}
delay(100);
}
161
Cláudio Vieira Oliveira e Humberto Zanetti
162
Arduino Simples e Divertido
163
Cláudio Vieira Oliveira e Humberto Zanetti
164
Arduino Simples e Divertido
void setup() {
Serial.begin(9600);
pinMode(OLHOD, OUTPUT);
pinMode(OLHOE, OUTPUT);
}
void loop() {
int entrada = analogRead(LDR);
Serial.println(entrada);
if (entrada > 200) {
digitalWrite(OLHOD, HIGH);
digitalWrite(OLHOE, HIGH);
}
else {
digitalWrite(OLHOD, LOW);
digitalWrite(OLHOE, LOW);
}
delay(100);
}
165
Cláudio Vieira Oliveira e Humberto Zanetti
166
Arduino Simples e Divertido
167
Cláudio Vieira Oliveira e Humberto Zanetti
168
Arduino Simples e Divertido
169
Cláudio Vieira Oliveira e Humberto Zanetti
#include <Thermistor.h>
void setup() {
Serial.begin(9600);
}
void loop() {
temperatura = TERM.getTemp();
Serial.print("Temperatura = ");
Serial.print(temperatura);
Serial.print(char(176));
Serial.println("C");
delay (2000);
}
#include <Thermistor.h>
170
Arduino Simples e Divertido
temperatura = TERM.getTemp();
Exercícios
171
Cláudio Vieira Oliveira e Humberto Zanetti
172
Arduino Simples e Divertido
173
Cláudio Vieira Oliveira e Humberto Zanetti
#include <Thermistor.h>
174
Arduino Simples e Divertido
void setup() {
pinMode(RELE, OUTPUT);
}
void loop() {
temperatura = TERM.getTemp();
if (temperatura < 25.0) {
// Acionar o relé
digitalWrite(RELE, HIGH);
}
else {
// Desligar o relé
digitalWrite(RELE, LOW);
}
delay (2000);
}
175
>
Cláudio Vieira Oliveira e Humberto Zanetti
Capítulo 7:
Display de LED
Os displays de LED de 7 segmentos
consistem de uma alternativa muito barata para
exibir informações, principalmente numéricas,
em um projeto desenvolvido com Arduino. Este
tipo de display pode ser do tipo ânodo comum ou
cátodo comum.
176
Arduino Simples e Divertido
177
Cláudio Vieira Oliveira e Humberto Zanetti
178
Arduino Simples e Divertido
int SEG_A = 2;
int SEG_B = 3;
int SEG_C = 4;
int SEG_D = 5;
int SEG_E = 6;
int SEG_F = 7;
int SEG_G = 8;
int PONTO = 9;
int ESPERA = 1000;
void setup() {
for (int pino= SEG_A; pino <= PONTO; pino++) {
pinMode(pino, OUTPUT);
digitalWrite(pino, HIGH);
}
}
void loop() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
delay(ESPERA);
}
179
Cláudio Vieira Oliveira e Humberto Zanetti
int SEG_A = 2;
int SEG_B = 3;
int SEG_C = 4;
int SEG_D = 5;
int SEG_E = 6;
int SEG_F = 7;
int SEG_G = 8;
int PONTO = 9;
void setup() {
for (int pino= SEG_A; pino <= PONTO; pino++) {
pinMode(pino, OUTPUT);
digitalWrite(pino, HIGH);
}
}
void loop() {
for (int pino = SEG_A; pino < SEG_G; pino++) {
digitalWrite(pino, LOW);
if (pino > SEG_A) {
digitalWrite(pino - 1, HIGH);
}
else {
digitalWrite(SEG_F, HIGH);
}
delay(ESPERA);
}
}
No ambiente de desenvolvimento do
Arduino e digite o seguinte sketch que irá exibir,
no módulo P11 – Display Simples, uma contagem
regressiva de nove até zero.
180
Arduino Simples e Divertido
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pontoDecimal(false);
}
181
Cláudio Vieira Oliveira e Humberto Zanetti
}
pontoDecimal(false);
}
void limpar() {
byte pino = 2;
for (int seg = 0; seg < 7; seg++) {
digitalWrite(pino, HIGH);
pino++;
}
}
void loop() {
for (int cont = 9; cont >= 0; cont--) {
escrever(cont);
boolean ponto = true;
for (int i = 0; i < 4; i++) {
delay(250);
pontoDecimal(ponto);
ponto = !ponto;
}
}
limpar();
delay(1000);
}
182
Arduino Simples e Divertido
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,0,0,1,1 } // = 9
};
183
Cláudio Vieira Oliveira e Humberto Zanetti
184
Arduino Simples e Divertido
185
Cláudio Vieira Oliveira e Humberto Zanetti
186
Arduino Simples e Divertido
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
188
Arduino Simples e Divertido
void limpar() {
byte pino = 2;
for (int seg = 0; seg < 7; seg++) {
digitalWrite(pino, HIGH);
pino++;
}
}
void loop() {
int entrada = analogRead(LDR);
int nivel = map(entrada, 0, 1023, 0, 9);
escrever(nivel);
delay(1000);
limpar();
}
189
Cláudio Vieira Oliveira e Humberto Zanetti
190
Arduino Simples e Divertido
191
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
randomSeed(analogRead(0));
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(BOTAO, INPUT);
}
192
Arduino Simples e Divertido
digitalWrite(pino, !digitos[digito][seg]);
pino++;
}
}
void limpar() {
byte pino = 2;
for (int seg = 0; seg < 7; seg++) {
digitalWrite(pino, HIGH);
pino++;
}
}
void loop() {
valor = digitalRead(BOTAO);
if (valor == HIGH && anterior == LOW) {
escrever(random(1, 7));
}
anterior = valor;
delay (50);
}
193
Cláudio Vieira Oliveira e Humberto Zanetti
194
Arduino Simples e Divertido
195
Cláudio Vieira Oliveira e Humberto Zanetti
#include <RotaryEncoder.h>
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
196
Arduino Simples e Divertido
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
limpar();
}
void limpar() {
byte pino = 2;
for (int seg = 0; seg < 7; seg++) {
digitalWrite(pino, HIGH);
pino++;
}
// Desligar ponto decimal:
digitalWrite(9, HIGH);
}
void loop() {
197
Cláudio Vieira Oliveira e Humberto Zanetti
198
Arduino Simples e Divertido
199
Cláudio Vieira Oliveira e Humberto Zanetti
200
Arduino Simples e Divertido
201
Cláudio Vieira Oliveira e Humberto Zanetti
202
Arduino Simples e Divertido
int binario[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
{ LOW, HIGH, LOW }, // 2
{ LOW, HIGH, HIGH }, // 3
{ HIGH, LOW, LOW }, // 4
{ HIGH, LOW, HIGH }, // 5
{ HIGH, HIGH, LOW }, // 6
{ HIGH, HIGH, HIGH } // 7
};
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
204
Arduino Simples e Divertido
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(BOTAO, INPUT);
}
void limpar() {
byte pino = 2;
for (int seg = 0; seg < 7; seg++) {
digitalWrite(pino, HIGH);
pino++;
}
}
void loop() {
valor = digitalRead(BOTAO);
if (valor == HIGH && anterior == LOW) {
num++;
if (num > 7)
num = 0;
digitalWrite(LED1, binario[num][0]);
digitalWrite(LED2, binario[num][1]);
digitalWrite(LED3, binario[num][2]);
205
Cláudio Vieira Oliveira e Humberto Zanetti
escrever(num);
}
anterior = valor;
delay (50);
}
digitalWrite(LED1, binario[num][0]);
digitalWrite(LED2, binario[num][1]);
digitalWrite(LED3, binario[num][2]);
escrever(num);
206
>
Arduino Simples e Divertido
Capítulo 8:
Infravermelho
Sensores de infravermelho apresentam
baixo custo e são muito úteis e versáteis. Nos
projetos deste capítulo iremos mostrar como
podemos utilizar, com facilidade, sinais de
infravermelho para detectar obstáculos e
também realizar o acionamento a distância
através de controle remoto.
207
Cláudio Vieira Oliveira e Humberto Zanetti
208
Arduino Simples e Divertido
209
Cláudio Vieira Oliveira e Humberto Zanetti
210
Arduino Simples e Divertido
211
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
pinMode(LED, OUTPUT);
pinMode(SENSOR, INPUT);
}
void loop() {
212
Arduino Simples e Divertido
digitalWrite(LED, valor);
delay (100);
}
213
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
Serial.begin(9600);
214
Arduino Simples e Divertido
pinMode(LED, OUTPUT);
}
void loop() {
// Obter o valor do sensor (entre 0 e 1023)
valor = analogRead(SENSOR);
Serial.print("Valor: ");
Serial.println(valor);
if (valor > limiar)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
delay (500);
}
215
Cláudio Vieira Oliveira e Humberto Zanetti
216
Arduino Simples e Divertido
int VERMV = 9;
217
Cláudio Vieira Oliveira e Humberto Zanetti
void setup() {
pinMode(VERMV, OUTPUT);
pinMode(AMARV, OUTPUT);
pinMode(VERDV, OUTPUT);
pinMode(VERMP, OUTPUT);
pinMode(VERDP, OUTPUT);
}
void loop() {
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, HIGH);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
valor = analogRead(SENSOR);
if (valor < 500) {
delay (1000);
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, HIGH);
digitalWrite(VERDV, LOW);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
delay (2000);
digitalWrite(VERMV, HIGH);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, LOW);
digitalWrite(VERMP, LOW);
digitalWrite(VERDP, HIGH);
218
Arduino Simples e Divertido
delay(3000);
}
}
219
Cláudio Vieira Oliveira e Humberto Zanetti
220
Arduino Simples e Divertido
221
Cláudio Vieira Oliveira e Humberto Zanetti
222
Arduino Simples e Divertido
// Sensor de distância
void setup() {
Serial.begin(9600);
pinMode(VERM, OUTPUT);
pinMode(AMAR, OUTPUT);
pinMode(VERD, OUTPUT);
}
void loop() {
// Obter o valor do sensor (entre 0 e 1023)
valor = analogRead(SENSOR);
Serial.print("Valor: ");
Serial.println(valor);
int distancia = map(valor, 0, 1023, 0, 4);
switch (distancia) {
case 0:
digitalWrite(VERM, HIGH);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, LOW);
break;
case 1:
223
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(VERM, LOW);
digitalWrite(AMAR, HIGH);
digitalWrite(VERD, LOW);
break;
case 2:
digitalWrite(VERM, LOW);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, HIGH);
break;
default:
digitalWrite(VERM, LOW);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, LOW);
break;
}
delay (100);
}
valor = analogRead(SENSOR);
224
Arduino Simples e Divertido
225
Cláudio Vieira Oliveira e Humberto Zanetti
226
Arduino Simples e Divertido
227
Cláudio Vieira Oliveira e Humberto Zanetti
228
Arduino Simples e Divertido
void setup() {
Serial.begin(9600);
pinMode(VERM, OUTPUT);
229
Cláudio Vieira Oliveira e Humberto Zanetti
pinMode(AMAR, OUTPUT);
pinMode(VERD, OUTPUT);
pinMode(BUZZER, OUTPUT);
}
void loop() {
// Obter o valor do sensor (entre 0 e 1023)
valor = analogRead(SENSOR);
Serial.print("Valor: ");
Serial.println(valor);
int distancia = map(valor, 0, 1023, 0, 4);
switch (distancia) {
case 0:
tone(BUZZER, 4800, 50);
digitalWrite(VERM, HIGH);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, LOW);
delay(50);
break;
case 1:
tone(BUZZER, 4800, 50);
digitalWrite(VERM, LOW);
digitalWrite(AMAR, HIGH);
digitalWrite(VERD, LOW);
delay(150);
break;
case 2:
tone(BUZZER, 4800, 50);
digitalWrite(VERM, LOW);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, HIGH);
delay(250);
break;
default:
digitalWrite(VERM, LOW);
digitalWrite(AMAR, LOW);
digitalWrite(VERD, LOW);
230
Arduino Simples e Divertido
break;
}
delay (100);
}
231
Cláudio Vieira Oliveira e Humberto Zanetti
232
Arduino Simples e Divertido
234
Arduino Simples e Divertido
235
Cláudio Vieira Oliveira e Humberto Zanetti
#include "IRremote.h"
int RECEPTOR = 7;
int LED = 12;
IRrecv controle(RECEPTOR);
decode_results resultado;
int estado = LOW;
236
Arduino Simples e Divertido
void setup() {
Serial.begin(9600);
// Iniciar a recepção
controle.enableIRIn();
pinMode(LED, OUTPUT);
}
void loop() {
if (controle.decode(&resultado)) {
if (resultado.decode_type == NEC) {
Serial.print("NEC: ");
}
else if (resultado.decode_type == SONY) {
Serial.print("SONY: ");
}
else if (resultado.decode_type == RC5) {
Serial.print("RC5: ");
}
else if (resultado.decode_type == RC6) {
Serial.print("RC6: ");
}
else if (resultado.decode_type == UNKNOWN) {
Serial.print("Desconhecido ");
}
Serial.println(resultado.value, HEX);
if (resultado.value == 0x8B7D22D) {
// Alterar e colocar o valor da tecla que
// irá apagar o LED
estado = LOW;
}
else if (resultado.value == 0x8B752AD) {
237
Cláudio Vieira Oliveira e Humberto Zanetti
#include "IRremote.h"
int RECEPTOR = 7;
IRrecv controle(RECEPTOR);
decode_results resultado;
238
Arduino Simples e Divertido
controle.enableIRIn();
controle.blink13(true);
if (controle.decode(&resultado)) {
if (resultado.decode_type == NEC) {
Serial.print("NEC: ");
}
}
if (resultado.value == 0x8B7D22D) {
// Alterar e colocar o valor da tecla que
// irá apagar o LED
estado = LOW;
}
controle.resume();
240
Arduino Simples e Divertido
241
Cláudio Vieira Oliveira e Humberto Zanetti
242
Arduino Simples e Divertido
#include "IRremote.h"
int RECEPTOR = 7;
IRrecv controle(RECEPTOR);
decode_results resultado;
void setup() {
// Iniciar a recepção
controle.enableIRIn();
pinMode(OLHOE, OUTPUT);
pinMode(OLHOD, OUTPUT);
pinMode(VERMELHO, OUTPUT);
pinMode(AMARELO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(NARIZ, OUTPUT);
}
void loop() {
if (controle.decode(&resultado)) {
if (resultado.value == 0x8B752AD) {
// Tecla seta para cima
243
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(OLHOE, HIGH);
digitalWrite(OLHOD, HIGH);
}
else if (resultado.value == 0x8B7D02F) {
// Tecla seta para esquerda
digitalWrite(OLHOE, HIGH);
}
else if (resultado.value == 0x8B710EF) {
// Tecla seta para direita
digitalWrite(OLHOD, HIGH);
}
else if (resultado.value == 0x8B7D22D) {
// Tecla seta para baixo
digitalWrite(OLHOE, LOW);
digitalWrite(OLHOD, LOW);
}
else if (resultado.value == 0x8B76897) {
// Tecla Back
digitalWrite(NARIZ, HIGH);
delay(200);
digitalWrite(NARIZ, LOW);
}
else if (resultado.value == 0x8B7A857) {
// Tecla OK
for (int i = 0; i < 10; i++) {
digitalWrite(VERMELHO, HIGH);
delay (100);
digitalWrite(VERMELHO, LOW);
digitalWrite(AMARELO, HIGH);
delay (100);
digitalWrite(AMARELO, LOW);
digitalWrite(VERDE, HIGH);
delay (100);
digitalWrite(VERDE, LOW);
}
}
244
Arduino Simples e Divertido
245
Cláudio Vieira Oliveira e Humberto Zanetti
246
>
Arduino Simples e Divertido
Capítulo 9:
ATtiny85
O ATtiny85 (Figura 9.1) é um versátil
microcontrolador de baixo custo, que pode ser a
alternativa ideal para substituir o Arduino em
projetos relativamente simples.
247
Cláudio Vieira Oliveira e Humberto Zanetti
• pinMode ()
• digitalWrite ()
• digitalRead ()
• analogRead ()
• analogWrite ()
• shiftOut ()
• pulseIn ()
• millis ()
• micros ()
• delay ()
• delayMicroseconds ()
248
Arduino Simples e Divertido
249
Cláudio Vieira Oliveira e Humberto Zanetti
250
Arduino Simples e Divertido
251
Cláudio Vieira Oliveira e Humberto Zanetti
https://raw.githubusercontent.com/damellis/attin
y/ide-1.6.x-boards-
manager/package_damellis_attiny_index.json e
clique no botão OK.
252
Arduino Simples e Divertido
253
Cláudio Vieira Oliveira e Humberto Zanetti
254
Arduino Simples e Divertido
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LED, LOW);
delay(100);
}
255
Cláudio Vieira Oliveira e Humberto Zanetti
256
Arduino Simples e Divertido
258
Arduino Simples e Divertido
No ambiente de desenvolvimento do
Arduino digite o seguinte sketch:
void setup() {
pinMode(VERMV, OUTPUT);
pinMode(AMARV, OUTPUT);
pinMode(VERDV, OUTPUT);
pinMode(VERMP, OUTPUT);
pinMode(VERDP, OUTPUT);
}
void loop() {
digitalWrite(VERMV, HIGH);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, LOW);
259
Cláudio Vieira Oliveira e Humberto Zanetti
digitalWrite(VERMP, LOW);
digitalWrite(VERDP, HIGH);
delay(3000);
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, LOW);
digitalWrite(VERDV, HIGH);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
delay(1000);
digitalWrite(VERMV, LOW);
digitalWrite(AMARV, HIGH);
digitalWrite(VERDV, LOW);
digitalWrite(VERMP, HIGH);
digitalWrite(VERDP, LOW);
delay (2000);
}
260
Arduino Simples e Divertido
261
Cláudio Vieira Oliveira e Humberto Zanetti
#include <Thermistor.h>
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
temperatura = TERM.getTemp();
if (temperatura < 25.0)
digitalWrite(LED, HIGH);
else
262
Arduino Simples e Divertido
digitalWrite(LED, LOW);
delay (2000);
}
263
Cláudio Vieira Oliveira e Humberto Zanetti
264
Arduino Simples e Divertido
265
Cláudio Vieira Oliveira e Humberto Zanetti
#include <Thermistor.h>
266
Arduino Simples e Divertido
float temperatura;
int RELE = 0;
void setup() {
pinMode(RELE, OUTPUT);
}
void loop() {
temperatura = TERM.getTemp();
if (temperatura < 25.0) {
// Acionar o relé
digitalWrite(RELE, HIGH);
}
else {
// Desligar o relé
digitalWrite(RELE, LOW);
}
delay (2000);
}
267
Cláudio Vieira Oliveira e Humberto Zanetti
268