Post on 25-Jul-2020
Arduino DescomplicadoComo Elaborar Projetos de Eletrônica
Cláudio Luís Vieira Oliveira Humberto Augusto Piovesana Zanetti
São Paulo
2015 – Editora Érica Ltda.
Respostas dos Exercícios
2 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
Capítulo 1
1.
Especificações Uno Mega Leonardo
Microcontrolador ATmega328 ATmega2560 ATmega32U4
Tensão de operação 5 V 5 V 5 V
Pinos de I/O digitais 14 (6 com saída PWM) 54 (14 com saída PWM) 20 (7 com saída PWM)
Pinos analógicos 6 16 12
Memória Flash 32 KB 256 KB 32 KB
SRAM 2 KB 8 KB 2,5 KB
EEPROM 1 KB 4 KB 1 KB
Velocidade do clock 16 MHz 16 MHz 16 MHz
2.
Wiring é uma linguagem de programação open-source para microcontroladores, baseada na linguagem Processing. Essa linguagem permite escrever códigos-fonte para controlar dispositivos conectados a uma série de placas com microcontroladores (como o Arduino). Foi toda escrita em linguagem C++, e o projeto iniciou-se em 2003, no mesmo instituto em que foi criado o Arduino. Tornou-se a linguagem padrão desde o início do projeto Arduino.
3.
Ao pressionar o botão “Reset” localizado na placa, você faz com que o sketch se reinicie, como no momento em que acaba de dar upload desse sketch na placa. É possível notar também que há um pino “Reset” próximo ao de 5 V, para que você possa colocar um botão “Reset” externo à placa, por exemplo, colocando um botão na protoboard para reiniciar o sketch.
Capítulo 2
1.
a) LEDs: displays em outdoors animados, indicadores em painéis (LED que indica ligado) em um rádio.
b) Diodos: som automotivo, para isolar a bateria do carro da bateria do módulo de som.
c) Capacitores: funcionam como uma pequena bateria, muito utilizados em antenas de rádio, no circuito ressonante utilizado para captar diferentes estações.
d) Resistores: um dos componentes mais utilizados em circuitos eletrônicos para limitar a corrente elétrica. Em alguns casos, pode transformar energia elétrica em térmica, como em um chuveiro elétrico.
3 Respostas dos Exercícios
e) Transistores: em um microfone, para transformar um sinal fraco em um mais forte (amplificando).
2.
a) 220 Ω: vermelho, vermelho, marrom.
b) 330 Ω: laranja, laranja, marrom.
c) 1 kΩ: preto, marrom, vermelho.
d) 10 kΩ: preto, marrom, laranja.
3.
V = R x I.
V = 10 k x 100 m.
V = 10.000 x 0,1.
V = 1.000 volts.
4.
R = V / I.
R = 50 / 1.
R = 50 Ω.
5.
I = V / R.
I = 100 / 200.
I = 0,5 A ou 500 mA.
Capítulo 3
1. int LED = 13;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(4000);
digitalWrite(LED, LOW);
delay(1000);
}
4 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
2.
Esquema:
Sketch:
int LED1 = 12;
int LED2 = 13;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(1000);
}
3. int LED1 = 12;
int LED2 = 13;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
5 Respostas dos Exercícios
void loop() {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(1000);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
delay(1000);
}
Capítulo 4
1.
Figura 4.12 – Circuito proposto para o Exercício 1.
int VERMELHO = 13;
int VERDE = 12;
int AZUL = 11;
int BOTAO = 2;
int valor = LOW;
int valorAnterior = LOW;
int cor = 0;
6 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void setup() {
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
pinMode (BOTAO, INPUT);
}
void loop() {
valor = digitalRead(BOTAO);
if ((valor == HIGH) && (valorAnterior == LOW)) {
delay (10);
cor++;
if (cor > 3)
cor = 0;
}
switch (cor) {
case 0:
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, LOW);
break;
case 1:
digitalWrite(VERMELHO, HIGH);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, LOW);
break;
case 2:
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, HIGH);
digitalWrite(AZUL, LOW);
break;
case 3:
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, HIGH);
break;
}
valorAnterior = valor;
delay(500);
}
7 Respostas dos Exercícios
2.
Esquema:
Sketch:
int VERMELHO = 11;
int VERDE = 10;
int AZUL = 9;
int BOTAO = 2;
int POTENCIÔMETRO = A0;
int valor = LOW;
int valorAnterior = LOW;
int cor = 0;
int intensidade;
void setup() {
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
pinMode (BOTAO, INPUT);
pinMode (POTENCIÔMETRO, INPUT);
}
8 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop() {
valor = digitalRead(BOTAO);
if ((valor == HIGH) && (valorAnterior == LOW)) {
delay (10);
cor++;
if (cor > 3)
cor = 0;
}
intensidade = analogRead(POTENCIôMETRO);
switch (cor) {
case 0:
analogWrite(VERMELHO, LOW);
analogWrite(VERDE, LOW);
analogWrite(AZUL, LOW);
break;
case 1:
analogWrite(VERMELHO, intensidade / 4);
analogWrite(VERDE, LOW);
analogWrite(AZUL, LOW);
break;
case 2:
analogWrite(VERMELHO, LOW);
analogWrite(VERDE, intensidade / 4);
analogWrite(AZUL, LOW);
break;
case 3:
analogWrite(VERMELHO, LOW);
analogWrite(VERDE, LOW);
analogWrite(AZUL, intensidade / 4);
break;
}
valorAnterior = valor;
delay(500);
}
9 Respostas dos Exercícios
3.
Esquema:
Sketch:
int VERMELHO = 13;
int VERDE = 12;
int AZUL = 11;
int BOTAOR = 4;
int BOTAOG= 3;
int BOTAOB = 2;
int valorR = LOW;
int valorAnteriorR = LOW;
int estadoR = LOW;
int valorG = LOW;
int valorAnteriorG = LOW;
int estadoG = LOW;
int valorB = LOW;
int valorAnteriorB = LOW;
int estadoB = LOW;
void setup() {
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
pinMode (BOTAOR, INPUT);
pinMode (BOTAOG, INPUT);
pinMode (BOTAOB, INPUT);
}
10 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop() {
valorR = digitalRead(BOTAOR);
if ((valorR == HIGH) && (valorAnteriorR == LOW)) {
estadoR = 1 - estadoR;
delay (10);
}
valorG = digitalRead(BOTAOG);
if ((valorG == HIGH) && (valorAnteriorG == LOW)) {
estadoG = 1 - estadoG;
delay (10);
}
valorB = digitalRead(BOTAOB);
if ((valorB == HIGH) && (valorAnteriorB == LOW)) {
estadoB = 1 - estadoB;
delay (10);
}
digitalWrite(VERMELHO, estadoR);
digitalWrite(VERDE, estadoG);
digitalWrite(AZUL, estadoB);
valorAnteriorR = valorR;
valorAnteriorG = valorG;
valorAnteriorB = valorB;
delay(500);
}
4.
Sketch:
int LEDvermelhocarro = 4;
int LEDamarelocarro = 7;
int LEDverdecarro = 8;
int LEDvermelhoped = 12;
int LEDverdeped = 13;
void setup() {
pinMode(LEDvermelhocarro, OUTPUT);
pinMode(LEDamarelocarro, OUTPUT);
pinMode(LEDverdecarro, OUTPUT);
pinMode(LEDvermelhoped, OUTPUT);
pinMode(LEDverdeped, OUTPUT);
}
11 Respostas dos Exercícios
void loop() {
digitalWrite(LEDvermelhocarro, HIGH);
digitalWrite(LEDverdeped, HIGH);
delay(10000);
digitalWrite(LEDverdeped, LOW);
delay(500);
digitalWrite(LEDverdeped, HIGH);
delay(500);
digitalWrite(LEDverdeped, LOW);
delay(500);
digitalWrite(LEDverdeped, HIGH);
digitalWrite(LEDverdeped, LOW);
digitalWrite(LEDvermelhocarro, LOW);
digitalWrite(LEDverdecarro, HIGH);
digitalWrite(LEDvermelhoped, HIGH);
delay(10000);
digitalWrite(LEDverdecarro, LOW);
digitalWrite(LEDamarelocarro, HIGH);
delay(2000);
digitalWrite(LEDamarelocarro, LOW);
digitalWrite(LEDvermelhoped, LOW);
}
Capítulo 5
1.
int LED = 9;
int entrada;
int intensidade = 0;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println(“Digite ‘A’ para aumentar a intensidade luminosa do LED,
‘D’ para reduzir ou ‘R’ para apagar:”);
}
void loop() {
if (Serial.available() > 0) {
entrada = Serial.read();
if (entrada == ‘A’ || entrada == ‘a’) {
intensidade += 10;
if (intensidade > 255)
intensidade = 255;
}
12 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
else if (entrada == ‘D’ || entrada == ‘d’) {
intensidade -= 10;
if (intensidade < 0)
intensidade = 0;
}
else if (entrada == ‘R’ || entrada == ‘r’) {
intensidade = 0;
}
else {
Serial.println(“Por favor, digite apenas ‘A’, ‘D’ ou ‘R’!”);
}
analogWrite(LED, intensidade);
delay (100);
}
}
2.
int LED = 9;
int entrada;
int intensidade = 0;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println(“Digite ‘A’ para aumentar a intensidade luminosa do LED,
‘D’ para reduzir ou ‘R’ para apagar:”);
}
void loop() {
if (Serial.available() > 0) {
entrada = Serial.read();
// Exibir (na saída serial) o valor da intensidade do LED
Serial.print(“Intensidade: “);
Serial.println(intensidade, DEC);
if (entrada == ‘A’ || entrada == ‘a’) {
intensidade += 10;
if (intensidade > 255)
intensidade = 255;
}
13 Respostas dos Exercícios
else if (entrada == ‘D’ || entrada == ‘d’) {
intensidade -= 10;
if (intensidade < 0)
intensidade = 0;
}
else if (entrada == ‘R’ || entrada == ‘r’) {
intensidade = 0;
}
else {
Serial.println(“Por favor, digite apenas ‘A’, ‘D’ ou ‘R’!”);
}
analogWrite(LED, intensidade);
delay (100);
}
}
Capítulo 6
1.
Esquema:
Sketch:
int BUZZER = 8;
int POT = A0;
int duracao;
14 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void setup(){
pinMode(BUZZER, OUTPUT);
pinMode(POT, INPUT);
}
void loop() {
duracao = analogRead(POT);
tone(BUZZER, 1200);
delay (duracao);
tone(BUZZER, 3600);
delay (duracao);
}
2.
Esquema:
Sketch:
int LED = 8;
int PIEZO = A0;
int limiar = 50;
int valor_piezo;
void setup() {
pinMode(LED, OUTPUT);
pinMode(PIEZO, INPUT);
}
15 Respostas dos Exercícios
void loop() {
valor_piezo = analogRead(PIEZO);
if (valor_piezo >= limiar)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
delay(500);
}
3.
Esquema:
Figura 6.4 – Teclado musical.
Sketch:
int BotaoC = 13;
int BotaoD = 12;
int BotaoE = 11;
int BotaoF = 10;
int BotaoG = 9;
int BotaoA = 8;
int BotaoB = 7;
int BUZZER = 4;
void setup() {
pinMode(BUZZER, OUTPUT);
}
16 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop() {
if (BotaoC == HIGH){
tone(BUZZER, 261); // 261 é a nota Dó
delay(500);
} else if (BotaoD == HIGH){
tone(BUZZER, 294); // 294 é a nota Ré
delay(500);
} else if (BotaoE == HIGH){
tone(BUZZER, 330); // 330 é a nota Mi
delay(500);
} else if (BotaoF == HIGH){
tone(BUZZER, 349); // 349 é a nota Fá
delay(500);
} else if (BotaoG == HIGH){
tone(BUZZER, 392); // 392 é a nota Sol
delay(500);
} else if (BotaoA == HIGH){
tone(BUZZER, 440); // 440 é a nota Lá
delay(500);
} else if (BotaoB == HIGH){
tone(BUZZER, 494); // 494 é a nota Si
delay(500);
}
noTone(BUZZER);
}
Capítulo 7
1.
Figura 7.10 – Circuito básico para uso do LCD.
17 Respostas dos Exercícios
#include <LiquidCrystal.h>
#define TEMPO_ATUALIZACAO 500
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
void setup() {
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
lcd.begin (16, 2);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Claudio Luis”);
lcd.setCursor(0, 1);
lcd.print(“Vieira Oliveira”);
delay(TEMPO_ATUALIZACAO);
}
2.
#include <LiquidCrystal.h>
#define TEMPO_ATUALIZACAO 1500
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
void setup() {
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
lcd.begin (16, 2);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“ABCDEFGHIJKLMNOP”);
lcd.setCursor(0, 1);
lcd.print(“QRSTUVWXYZ”);
delay(TEMPO_ATUALIZACAO);
18 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“abcdefghijklmnop”);
lcd.setCursor(0, 1);
lcd.print(“qrstuvwxyz”);
delay(TEMPO_ATUALIZACAO);
}
3.
Figura 7.11 – Utilização de matriz de LEDs.
#include <avr/pgmspace.h>
#include “LEDControl.h”
#include “FonteMatriz.h”
const int NUM_MATRIZ = 1;
const int ATRASO = 1000;
LEDControl lc=LEDControl(6, 5, 4, NUM_MATRIZ);
void setup() {
Serial.begin(9600);
for (int i = 0; i < NUM_MATRIZ; i++) {
lc.shutdown(i, false);
lc.setIntensity(i, 2);
lc.clearDisplay(i);
}
}
void loop() {
String texto = “CLAUDIO”;
exibirMensagem(texto);
}
19 Respostas dos Exercícios
void exibirMensagem(String mensagem) {
int contador = 0;
int caractere = 0;
do {
caractere = mensagem.charAt(contador);
if (caractere != 0) {
exibirCaractere(caractere);
delay(ATRASO);
}
contador++;
}
while (caractere != 0);
}
void exibirCaractere(int ascii) {
if (ascii >= 0x20 && ascii <= 0x7f) {
for (int i = 0; i < 7; i++) {
intlinha =
pgm_read_byte_near(fonte5x7 + ((ascii - 0x20) * 8) + i);
lc.setColumn(0, 7 - i, linha);
}
}
}
Capítulo 8
1.
Esquema:
20 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
Sketch:
int LED1 = 11;
int LED2 = 12;
int LED3 = 13;
const int LM35 = A0;
const int ATRASO = 5000;
const float BASE_CELSIUS = 0.4887585532746823069403714565;
float temperatura;
void setup() {
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
}
void loop() {
temperatura = lerTemperatura();
if (temperatura <= 20) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
else if (temperatura <= 30) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
}
else {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
}
delay(ATRASO);
}
float lerTemperatura() {
return (analogRead(LM35) * BASE_CELSIUS);
}
21 Respostas dos Exercícios
2.
Esquema:
Sketch:
#include <LiquidCrystal.h>
#define TEMPO_ATUALIZACAO 500
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
int buzzer = 9;
int echoPino = 10;
int trigPino = 13;
int ledvermelho = 7;
int ledverde = 6;
int ledamarelo = 8;
long duracao = 0;
long distancia = 0;
int atraso;
void setup(){
Serial.begin(9600);
lcd.begin (16, 2); // inicia o LCD com dimensões 16x2(Colunas x Linhas)
pinMode(echoPino, INPUT); // define o pino 12 como entrada (recebe)
pinMode(trigPino, OUTPUT); // define o pino 13 como saida (envia)
pinMode(buzzer,OUTPUT);
pinMode(ledvermelho, OUTPUT);
pinMode(ledverde, OUTPUT);
pinMode(ledamarelo, OUTPUT);
}
22 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop(){
digitalWrite(trigPino, LOW); // delay de 10 microssegundos
delayMicroseconds(10); //pino trigger com pulso HIGH (ligado)
digitalWrite(trigPino, HIGH); //delay de 10 microssegundos
delayMicroseconds(10); //pino trigger com um pulso baixo LOW (desligado)novamente
digitalWrite(trigPino, LOW);
duracao = pulseIn(echoPino,HIGH); //cálculo baseado em: distância = duração/58.
//a função pulseIn verifica o tempo que o pino ECHO ficou HIGH
//calculando assim a duração do tráfego do sinal
distancia = duracao/58;
if (distancia < 5){
lcd.clear();
lcd.print(“CUIDADO:”);
lcd.print(distancia);
lcd.print(“ cm”);
digitalWrite(LEDvermelho,HIGH);
digitalWrite(LEDverde,LOW);
digitalWrite(LEDamarelo,LOW);
} else if (distancia >= 5 && distancia <= 10){
lcd.clear();
lcd.print(“ATENCAO:”);
lcd.print(distancia);
lcd.print(“ cm”);
digitalWrite(LEDvermelho,LOW);
digitalWrite(LEDverde,LOW);
digitalWrite(LEDamarelo,HIGH);
} else if (distancia > 10){
lcd.clear();
lcd.print(“SEGURO:”);
lcd.print(distancia);
lcd.print(“ cm”);
digitalWrite(LEDvermelho,LOW);
digitalWrite(LEDverde,HIGH);
digitalWrite(LEDamarelo,LOW);
}
if (distancia < 10){
atraso = 100*distancia;
tone (buzzer, 1200, atraso);
delay (2*atraso);
} else {
delay(10);
}
}
23 Respostas dos Exercícios
3.
Esquema:
Sketch:
int LEDVermelho = 13;
int LEDVerde = 12;
int LEDAmarelo = 11;
int LDR = A0;
int BUZZER = 8;
int botao = 7;
int entrada = 0;
int max = 0;
int teste = 0;
int estadobotao = LOW;
void setup(){
Serial.begin(9600);
pinMode(LEDVermelho,OUTPUT);
pinMode(LDR,INPUT);
pinMode(LEDVerde,OUTPUT);
pinMode(LEDAmarelo,OUTPUT);
pinMode(botao, INPUT);
}
24 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop(){
if (estadobotao == LOW){
while (estadobotao == LOW) estadobotao = digitalRead(btn);
delay (500);
tone (BUZZER, 1200, 300);
} else if (estadobotao == HIGH){
while (teste != 5){
entrada = analogRead(LDR);
Serial.println(entrada);
if (entrada > max) {
max = entrada;
}
teste++;
Serial.println(max);
delay(1000);
}
delay (2000);
entrada = analogRead(LDR);
Serial.println(entrada);
delay(500);
if (entrada > (0.8*max)){
digitalWrite(LEDVermelho,HIGH);
digitalWrite(LEDAmarelo,LOW);
digitalWrite(LEDVerde,LOW);
delay(500);
tone (BUZZER, 1200, 300);
delay(500);
tone (BUZZER, 1200, 300);
delay(500);
tone (BUZZER, 1200, 300);
} else if (entrada < (0.8*max) && entrada > (0.5*max)){
digitalWrite(LEDVermelho,LOW);
digitalWrite(LEDAmarelo,HIGH);
digitalWrite(LEDVerde,LOW);
delay(500);
tone (BUZZER, 1200, 300);
delay(500);
tone (BUZZER, 1200, 300);
} else if (entrada < (0.5*max)){
digitalWrite(LEDVermelho,LOW);
digitalWrite(LEDAmarelo,LOW);
digitalWrite(LEDVerde,HIGH);
delay(500);
tone (buzzer, 1200, 300);
}
25 Respostas dos Exercícios
if (estadobotao == HIGH && digitalRead(btn) == HIGH){
estadobotao = LOW;
digitalWrite(LEDVermelho,LOW);
digitalWrite(LEDAmarelo,LOW);
digitalWrite(LEDVerde,LOW);
tone (BUZZER, 1200, 1000);
}
}
delay(2000);
}
Capítulo 9
1.
Esquema:
Sketch:
#include “IRremote.h”
int RECEPTOR = 9;
int VERMELHO = 13;
int VERDE = 12;
int AZUL = 11;
IRrecv controle(RECEPTOR);
26 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
decode_results resultado;
int estadoVerm = LOW;
int estadoVerd = LOW;
int estadoAzul = LOW;
void setup() {
Serial.begin(9600);
controle.enableIRIn();
controle.blink13(false);
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
}
void loop() {
if (controle.decode(&resultado)) {
Serial.println(resultado.value, HEX);
if (resultado.value == 0xFF6897) // Tecla 1
if (estadoVerm == LOW)
estadoVerm = HIGH;
else
estadoVerm = LOW;
else if (resultado.value == 0xFF30CF) // Tecla 2
if (estadoVerd == LOW)
estadoVerd = HIGH;
else
estadoVerd = LOW;
else if (resultado.value == 0xFF30CF) // Tecla 3
if (estadoAzul == LOW)
estadoAzul = HIGH;
else
estadoAzul = LOW;
digitalWrite(VERMELHO, estadoVerm);
digitalWrite(VERDE, estadoVerd);
digitalWrite(AZUL, estadoAzul);
controle.resume();
}
}
27 Respostas dos Exercícios
2.
Esquema:
Sketch:
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include “IRremote.h”
#define TEMPO_ATUALIZACAO 1000
int RECEPTOR = 9;
IRrecv controle(RECEPTOR);
decode_results resultado;
RTC_DS1307 RTC;
LiquidCrystal LCD (12, 11, 5, 4, 3, 2);
const int LM35 = A0;
28 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
// Base de conversão para Graus Celsius ((5/1023) * 100)
const float BASE_CELSIUS = 0.4887585532746823069403714565;
int dia, mês, ano, hora, minuto, segundo, dia_semana;
char semana[][4] = {“DOM”, “SEG”, “TER”, “QUA”, “QUI”, “SEX”, “SAB”};
float temperatura;
// Opções que serão selecionadas pelo botão: 0-Celsius,
// 1-Fahrenheit, 2-Kelvin,
int opção = 0;
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println(“O RTC não está executando!”);
}
// RTC.adjust(DateTime(__DATE__, __TIME__));
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
lcd.begin (16, 2);
controle.enableIRIn();
controle.blink13(false);
}
void loop () {
DateTime now = RTC.now();
dia = now.day();
mes = now.month();
ano = now.year();
hora = now.hour();
minuto = now.minute();
segundo = now.second();
dia_semana = now.dayOfWeek();
lcd.clear();
if (dia < 10)
lcd.print(“0”);
lcd.print(dia, DEC);
lcd.print(“/”);
29 Respostas dos Exercícios
if (mes < 10)
lcd.print(“0”);
lcd.print(mes, DEC);
lcd.print(“/”);
lcd.print(now.year(), DEC);
lcd.setCursor(13, 0); // Coluna, Linha
lcd.print(semana[dia_semana]);
lcd.setCursor(0, 1); // Coluna, Linha
if (hora < 10)
lcd.print(“0”);
lcd.print(hora, DEC);
lcd.print(“:”);
if (minuto < 10)
lcd.print(“0”);
lcd.print(minuto, DEC);
lcd.print(“:”);
if (segundo < 10)
lcd.print(“0”);
lcd.print(segundo, DEC);
temperatura = lerTemperatura();
if (controle.decode(&resultado)) {
Serial.println(resultado.value, HEX);
if (resultado.value == 0xFF6897) // Tecla +
opção++;
if (opção > 2)
opção = 0;
else if (resultado.value == 0xFF18E7) // Tecla -
opção--;
if (opção < 0)
opção = 2;
controle.resume();
}
// Exibir a temperatura
if (opção == 0) {
lcd.print(“Temperatura: “);
lcd.setCursor(0, 1);
lcd.print(temperatura);
lcd.write(B11011111);
lcd.print(“Celsius”);
}
else if (opção == 1) {
temperatura = (temperatura * 9)/ 5 + 32;
lcd.print(“Temperatura: “);
lcd.setCursor(0, 1);
30 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
lcd.print(temperatura);
lcd.write(B11011111);
lcd.print(“Fahrenheit”);
}
else if (opção == 2) {
temperatura = temperatura + 273.15;
lcd.print(“Temperatura: “);
lcd.setCursor(0, 1);
lcd.print(temperatura);
lcd.print(“Kelvin”);
}
delay(TEMPO_ATUALIZACAO);
}
float lerTemperatura() {
return (analogRead(LM35) * BASE_CELSIUS);
}
Capítulo 10
1.
Esquema:
Sketch:
#include “Servo.h”
Servo servo;
31 Respostas dos Exercícios
int LM 35 = A0;
int SERVO = 6;
float temperatura;
const float BASE_CELSIUS = 0.4887585532746823069403714565;
int angulo = 0;
void setup(){
servo.attach(SERVO);
}
void loop(){
temperatura = lerTemperatura();
angulo = map(angulo, 0, 50, 0, 180);
servo.write (angulo);
delay(100);
}
float lerTemperatura() {
return (analogRead(LM35) * BASE_CELSIUS);
}
2.
Esquema:
32 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
Sketch:
int MOTOR = 9;
int POT = A0;
int BotaoMais = 13;
int BotaoMenos = 12;
int BotaoParada = 11;
int velocidade = 0;
void setup() {
pinMode(MOTOR, OUTPUT);
pinMode(BotaoMais, INPUT);
pinMode(BotaoMenos, INPUT);
pinMode(BotaoParada, INPUT);
}
void loop() {
if (BotaoMais == HIGH && velocidade <= 250){ // limita o valor até 255
velocidade += 5;
delay(50);
} else if(BotaoMenos == HIGH && velocidade >=5){// limita o valor até 0
velocidade -= 5;
delay(50);
} else if(BotaoParada == HIGH){
velocidade = 0;
delay(50);
}
analogWrite(MOTOR, velocidade);
delay(50);
}
Capítulo 11
1.
fill(0, 0, 255);
rect(10, 10, 50, 80);
2.
fill(255, 0, 0);
stroke(255, 0, 0);
rect(35, 0, 30, 100);
rect(0, 35, 100, 30);
33 Respostas dos Exercícios
3.
triangle(0, 0, 50, 100, 100, 0);
triangle(10, 10, 50, 90, 90, 10);
triangle(20, 20, 50, 80, 80, 20);
4.
Esquema:
Sketch (Arduino):
int VERMELHO = 11;
int VERDE = 10;
int AZUL = 9;
int vermelho = 0;
int verde = 0;
int azul = 0;
String dado;
void setup() {
Serial.begin(9600);
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
}
34 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void loop() {
if (Serial.available() > 0) {
// Ler o byte que está na entrada serial
dado = Serial.readStringUntil(‘;’);
if (dado != “”)
vermelho = dado.toInt();
dado = Serial.readStringUntil(‘;’);
if (dado != “”)
verde = dado.toInt();
dado = Serial.readStringUntil(‘\n’);
if (dado != “”)
azul = dado.toInt();
}
analogWrite(VERMELHO, vermelho);
analogWrite(VERDE, verde);
analogWrite(AZUL, azul);
delay(500);
}
Sketch (Processing):
import processing.serial.*;
import g4p_controls.*;
Serial porta;
GKnob knobR;
GKnob knobG;
GKnob knobB;
GImageButton botao;
String[] imagens;
int valorR = 0;
int valorG = 0;
int valorB = 0;
void setup() {
frame.setTitle (“Controle do LED”);
size (600, 480);
knobR = new GKnob(this, 20, 150, 180, 180, 0.8);
knobR.setTurnRange(110.0, 70.0);
knobR.setTurnMode(GKnob.CTRL_ANGULAR);
knobR.setValue(0.0);
35 Respostas dos Exercícios
knobG = new GKnob(this, 210, 150, 180, 180, 0.8);
knobG.setTurnRange(110.0, 70.0);
knobG.setTurnMode(GKnob.CTRL_ANGULAR);
knobG.setValue(0.0);
knobB = new GKnob(this, 400, 150, 180, 180, 0.8);
knobB.setTurnRange(110.0, 70.0);
knobB.setTurnMode(GKnob.CTRL_ANGULAR);
knobB.setValue(0.0);
imagens = new String[] {“botao.png”, “botao.png”, “botao-press.png” };
botao = new GImageButton(this, 243, 400, imagens);
println(“Portas seriais disponíveis:”);
println(Serial.list());
// Alterar para a porta disponível no computador: 1, 2, etc.
String nomePorta = Serial.list()[0];
porta = new Serial(this, nomePorta, 9600);
}
void draw(){
background(200);
fill(0);
textFont(createFont(“SansSerif”, 36));
text(“Controle da Luminosidade do LED”, 10, 40);
textFont(createFont(“SansSerif”, 18));
text(“Valores: R=” + valorR + “, G=” + valorG + “, B=” + valorB, 10, 80);
}
public void handleKnobEvents(GValueControl controle, GEvent evento) {
valorR = int(knobR.getValueF() * 255);
valorG = int(knobG.getValueF() * 255);
valorB = int(knobB.getValueF() * 255);
}
public void handleButtonEvents(GImageButton controle, GEvent evento) {
if (controle == botao) {
println(“Enviando: “ + valorR + “; “ + valorG + “; “ + valorB);
porta.write(valorR +”;” + valorG + “;” valorB + “\n”);
}
}
36 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
5.
Esquema:
Sketch (Arduino):
#include <avr/pgmspace.h>
#include “LEDControl.h”
#include “FonteMatriz.h”
const int NUM_MATRIZ = 2;
LEDControl lc=LEDControl(6, 5, 4, NUM_MATRIZ);
String linha = “”;
char comando = ‘R’;
String mensagem = “Envie um texto.”;
int atraso = 500;
void setup() {
Serial.begin(9600);
for (int i = 0; i < NUM_MATRIZ; i++) {
lc.shutdown(i, false);
lc.setIntensity(i, 2);
lc.clearDisplay(i);
}
}
boolean obterComando() {
linha = “”;
while (Serial.available() > 0) {
// Ler o byte que está na entrada serial
linha += (char) Serial.read();
}
37 Respostas dos Exercícios
if (!linha.equals(“”)) {
comando = linha.charAt(0);
if (comando == ‘R’) {
if (linha.substring(1, linha.length()).toInt() > 0)
atraso = linha.substring(1, linha.length()).toInt();
}
else if (comando == ‘T’) {
if (!linha.substring(1, linha.length()).equals(“”))
mensagem = linha.substring(1, linha.length());
}
return (true);
}
else
return (false);
}
void loop() {
int contador = 0;
int caractere = 0;
int caractereAnterior = 0;
do {
// Verificar a porta serial
if (obterComando() && comando == ‘T’)
break;
if (comando != ‘P’) {
// Obtém cada caractere que compõe a mensagem
caractere = mensagem.charAt(contador);
if (caractere != 0) {
exibirCaractere(1, caractere);
exibirCaractere(0, caractereAnterior);
caractereAnterior = caractere;
delay(atraso);
}
contador++;
}
}
while (caractere != 0);
lc.clearDisplay(0);
}
38 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
void exibirCaractere(int matriz, int ascii) {
if (ascii >= 0x20 && ascii <= 0x7f) {
// Exibe as sete linhas que compõem o caractere
for (int i = 0; i < 7; i++) {
// Busca na tabela de caracteres uma linha
int linha =
pgm_read_byte_near(fonte5x7 + ((ascii - 0x20) * 8) + i);
lc.setColumn(matriz, 7 - i, linha);
}
}
}
Sketch (Processing):
import processing.serial.*;
import g4p_controls.*;
import java.awt.Font;
Serial porta;
GLabel título;
GLabel txtTexto;
GLabel txtVelocidade;
GTextField texto;
GSlider velocidade;
GImageButton enviar;
GImageButton rolar;
GImageButton pausar;
GImageButton resetar;
String[] imagens;
int valorAnalogico = 0;
void setup() {
frame.setTitle (“Display de LEDs”);
size (600, 400);
titulo = new GLabel(this, (width / 2) - 200, 10, 400, 44);
titulo.setText(“Display de LEDs”);
titulo.setFont (new Font(“SansSerif”, Font.BOLD, 36));
titulo.setTextAlign(GAlign.CENTER, null);
txtTexto = new GLabel(this, 20, 90, 400, 24);
txtTexto.setText(“Digite o texto a ser enviado para o display:”);
txtTexto.setFont (new Font(“SansSerif”, Font.BOLD, 18));
txtTexto.setTextAlign(GAlign.LEFT, null);
39 Respostas dos Exercícios
texto = new GTextField(this, 20, 120, 560, 32);
texto.setFont (new Font(“SansSerif”, Font.PLAIN, 18));
txtVelocidade = new GLabel(this, 20, 190, 400, 24);
txtVelocidade.setText(“Velocidade da rolagem:”);
txtVelocidade.setFont (new Font(“SansSerif”, Font.BOLD, 18));
txtVelocidade.setTextAlign(GAlign.LEFT, null);
velocidade = new GSlider(this, 20, 220, 560, 20, 15);
velocidade.setLocalColorScheme(6);
velocidade.setValue(0.750);
imagens = new String[] {“enviar-texto.png”, “enviar-texto.png”,
“enviar-texto-press.png”};
enviar = new GImageButton(this, 118, 290, imagens);
enviar.tag = “Enviar o texto”;
imagens = new String[] {“play.png”, “play.png”,
“play-press.png”};
rolar = new GImageButton(this, 218, 290, imagens);
rolar.tag = “Rolar o texto”;
imagens = new String[] {“pause.png”, “pause.png”,
“pause-press.png”};
pausar = new GImageButton(this, 318, 290, imagens);
pausar.tag = “Pausar”;
imagens = new String[] {“reset.png”, “reset.png”,
“reset-press.png”};
resetar = new GImageButton(this, 418, 290, imagens);
resetar.tag = “Resetar”;
println(“Portas seriais disponíveis:”);
println(Serial.list());
// Alterar para a porta disponível no computador: 1, 2, etc.
String nomePorta = Serial.list()[0];
porta = new Serial(this, nomePorta, 9600);
}
void draw() { }
40 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
public void handleButtonEvents(GImageButton controle, GEvent evento) {
if (controle == enviar && !texto.getText().equals(“”)) {
println(“Enviando: “ + texto.getText());
porta.write(“T” + texto.getText() + “ \n”);
}
else if (controle == rolar) {
int atraso = (int) (2000 - (velocidade.getValueF() * 2000));
println(“Enviando: R” + atraso);
porta.write(“R” + atraso + “\n”);
}
else if (controle == pausar) {
println(“Enviando: P”);
porta.write(“P\n”);
}
else if (controle == resetar) {
println(“Enviando: Envie um texto.”);
porta.write(“TEnvie um texto.\n”);
delay (100);
println(“Enviando: R500”);
porta.write(“R500\n”);
}
}
Capítulo 12
1.
Esquema:
41 Respostas dos Exercícios
Sketch (Arduino):
int VERMELHO = 9;
int VERDE = 10;
int AZUL = 11;
int vermelho = 0;
int verde = 0;
int azul = 0;
String dado;
void setup() {
Serial.begin(9600);
pinMode (VERMELHO, OUTPUT);
pinMode (VERDE, OUTPUT);
pinMode (AZUL, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
// Ler o byte que está na entrada serial
dado = Serial.readStringUntil(‘;’);
if (dado != “”)
vermelho = dado.toInt();
dado = Serial.readStringUntil(‘;’);
if (dado != “”)
verde = dado.toInt();
dado = Serial.readStringUntil(‘\n’);
if (dado != “”)
azul = dado.toInt();
}
digitalWrite(VERMELHO, vermelho);
digitalWrite(VERDE, verde);
digitalWrite(AZUL, azul);
delay(500);
}
Aplicativo Android
Arquivo activity_main.xml (Android):
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
42 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:paddingBottom=”@dimen/activity_vertical_margin”
android:paddingLeft=”@dimen/activity_horizontal_margin”
android:paddingRight=”@dimen/activity_horizontal_margin”
android:paddingTop=”@dimen/activity_vertical_margin”
tools:context=”com.example.controleledrgb.MainActivity” >
<TextView
android:id=”@+id/textView1”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/hello_world”
android:textSize=”28dp” />
<Switch
android:id=”@+id/vermelho”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/textView1”
android:layout_below=”@+id/textView1”
android:layout_marginTop=”60dp”
android:onClick=”interruptorClicked”
android:text=”@string/vermelho” />
<Switch
android:id=”@+id/verde”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignRight=”@+id/vermelho”
android:layout_below=”@+id/vermelho”
android:layout_marginTop=”35dp”
android:onClick=”interruptorClicked”
android:text=”@string/verde” />
<Switch
android:id=”@+id/azul”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignRight=”@+id/verde”
android:layout_below=”@+id/verde”
android:layout_marginTop=”35dp”
android:onClick=”interruptorClicked”
android:text=”@string/azul” />
43 Respostas dos Exercícios
<Spinner
android:id=”@+id/dispositivo”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentBottom=”true”
android:layout_centerHorizontal=”true”
android:layout_marginBottom=”36dp” />
<TextView
android:id=”@+id/textView2”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_above=”@+id/dispositivo”
android:layout_alignLeft=”@+id/dispositivo”
android:text=”@string/dispositivos” />
</RelativeLayout>
Arquivo strings.xml (Android):
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<string name=”app_name”>LED RGB</string>
<string name=”hello_world”>Controle de LED RGB</string>
<string name=”action_settings”>Configurações</string>
<string name=”verde”>Verde (G)</string>
<string name=”vermelho”>Vermelho (R)</string>
<string name=”azul”>Azul (B)</string>
<string name=”dispositivos”>Dispositivos pareados:</string>
</resources>
Arquivo MainActivity.java (Android):
package com.example.controleledrgb;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;
import com.example.controleledrgb.R;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
44 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = “MainActivity”;
private Switch vermelho;
private Switch verde;
private Switch azul;
private Spinner dispositivo;
private BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
private BluetoothSocket soquete = null;
private OutputStream saida = null;
private Set<BluetoothDevice> dispositivosPareados;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, “Início do aplicativo...”);
vermelho = (Switch) findViewById(R.id.vermelho);
verde = (Switch) findViewById(R.id.verde);
azul = (Switch) findViewById(R.id.azul);
dispositivo = (Spinner) findViewById(R.id.dispositivo);
ArrayAdapter<String> dados = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item);
dados.add(“Selecione um dispositivo”);
// Verificar se o aparelho tem suporte a Bluetooth
if (bt != null) {
// Se o Bluetooth não estiver ligado, criar uma intent para ativá-lo
if (!bt.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
int REQUEST_ENABLE_BT = 1;
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
45 Respostas dos Exercícios
dispositivosPareados = bt.getBondedDevices();
if (dispositivosPareados.size() > 0) {
for (BluetoothDevice item : dispositivosPareados) {
dados.add(item.getName());
}
}
}
dados.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
dispositivo.setAdapter(dados);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void interruptorClicked(View v) {
String dados = “0;”;
if (vermelho.isChecked()) {
dados = “1;”;
}
if (verde.isChecked()) {
dados += “1”;
}
else {
dados += “0;”;
}
if (azul.isChecked()) {
dados += “1\n”;
}
46 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
else {
dados += “0\n”;
}
Log.v(TAG, “Enviando para “ + dispositivo.getSelectedItem().toString() + “: “
+ dados);
Toast mensagem = Toast.makeText(this.getApplicationContext(),
“Enviando para “ +
dispositivo.getSelectedItem().toString() + “: “ + dados,
Toast.LENGTH_LONG);
mensagem.show();
if (dispositivosPareados.size() > 0) {
for (BluetoothDevice item : dispositivosPareados) {
if (dispositivo.getSelectedItem().toString().equalsIgnoreCase(item.getName())) {
try {
BluetoothDevice dispositivoRemoto = bt.getRemoteDevice(item.getAddress());
soquete = criarSoqueteBluetooth(dispositivoRemoto);
soquete.connect();
// Cancelar a descoberta, pois torna a conexão mais lenta
bt.cancelDiscovery();
saída = soquete.getOutputStream();
byte[] buffer = dados.getBytes();
saída.write(buffer);
saída.close();
soquete.close();
}
catch (IOException erro) {
Log.v(TAG, “Erro: “ + erro.toString());
}
}
}
}
}
private BluetoothSocket criarSoqueteBluetooth(BluetoothDevice dispositivo)
throws IOException {
Method método;
BluetoothSocket tmpSoquete = null;
try {
método = dispositivo.getClass().getMethod(“createRfcommSocket”, new Class[]
{int.class});
tmpSoquete = (BluetoothSocket) método.invoke(dispositivo, 1);
}
47 Respostas dos Exercícios
catch (SecurityException e) {
Log.v(TAG, “Erro: “, e);
}
catch (NoSuchMethodException e) {
Log.v(TAG, “Erro: “, e);
}
catch (IllegalArgumentException e) {
Log.v(TAG, “Erro: “, e);
}
catch (IllegalAccessException e) {
Log.v(TAG, “Erro: “, e);
}
catch (InvocationTargetException e) {
Log.v(TAG, “Erro: “, e);
}
return tmpSoquete;
}
}
2.
Esquema:
Sketch (Arduino):
#include <avr/pgmspace.h>
#include “LEDControl.h”
#include “FonteMatriz.h”
48 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
const int NUM_MATRIZ = 2;
LEDControl lc=LEDControl(6, 5, 4, NUM_MATRIZ);
String linha = “”;
char comando = ‘R’;
String mensagem = “Envie um texto.”;
int atraso = 500;
void setup() {
Serial.begin(9600);
for (int i = 0; i < NUM_MATRIZ; i++) {
lc.shutdown(i, false);
lc.setIntensity(i, 2);
lc.clearDisplay(i);
}
}
boolean obterComando() {
linha = “”;
while (Serial.available() > 0) {
// Ler o byte que está na entrada serial
linha += (char) Serial.read();
}
if (!linha.equals(“”)) {
comando = linha.charAt(0);
if (comando == ‘R’) {
if (linha.substring(1, linha.length()).toInt() > 0)
atraso = linha.substring(1, linha.length()).toInt();
}
else if (comando == ‘T’) {
if (!linha.substring(1, linha.length()).equals(“”))
mensagem = linha.substring(1, linha.length());
}
return (true);
}
else
return (false);
}
void loop() {
int contador = 0;
int caractere = 0;
int caractereAnterior = 0;
49 Respostas dos Exercícios
do {
// Verificar a porta serial
if (obterComando() && comando == ‘T’)
break;
if (comando != ‘P’) {
// Obtém cada caractere que compõe a mensagem
caractere = mensagem.charAt(contador);
if (caractere != 0) {
exibirCaractere(1, caractere);
exibirCaractere(0, caractereAnterior);
caractereAnterior = caractere;
delay(atraso);
}
contador++;
}
}
while (caractere != 0);
lc.clearDisplay(0);
}
void exibirCaractere(int matriz, int ascii) {
if (ascii >= 0x20 && ascii <= 0x7f) {
// Exibe as sete linhas que compõem o caractere
for (int i = 0; i < 7; i++) {
// Busca na tabela de caracteres uma linha
int linha =
pgm_read_byte_near(fonte5x7 + ((ascii - 0x20) * 8) + i);
lc.setColumn(matriz, 7 - i, linha);
}
}
}
Aplicativo Android
Arquivo activity_main.xml (Android):
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:paddingBottom=”@dimen/activity_vertical_margin”
android:paddingLeft=”@dimen/activity_horizontal_margin”
50 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
android:paddingRight=”@dimen/activity_horizontal_margin”
android:paddingTop=”@dimen/activity_vertical_margin”
tools:context=”com.example.matrizledreset.MainActivity” >
<TextView
android:id=”@+id/textView1”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:text=”@string/msg_enviar”
android:textSize=”18sp” />
<EditText
android:id=”@+id/texto”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/textView1”
android:layout_alignRight=”@+id/textView1”
android:layout_below=”@+id/textView1”
android:layout_centerHorizontal=”true”
android:ems=”10”
android:inputType=”textMultiLine”
android:minLines=”3” />
<TextView
android:id=”@+id/textView3”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/texto”
android:layout_below=”@+id/texto”
android:layout_marginTop=”28dp”
android:text=”@string/msg_velocidade”
android:textSize=”18sp” />
<SeekBar
android:id=”@+id/velocidade”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/textView3”
android:layout_below=”@+id/textView3”
android:max=”2000”
android:progress=”1500” />
51 Respostas dos Exercícios
<TextView
android:id=”@+id/textView2”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/velocidade”
android:layout_alignLeft=”@+id/velocidade”
android:layout_marginTop=”28dp”
android:text=”@string/msg_dispositivo”
android:textSize=”18sp” />
<Spinner
android:id=”@+id/dispositivo”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/textView2”
android:layout_alignLeft=”@+id/textView2” />
<ImageButton
android:id=”@+id/enviar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/dispositivo”
android:layout_alignTop=”@+id/rolar”
android:background=”@android:color/background_light”
android:contentDescription=”@string/msg_enviar”
android:onClick=”enviarClicked”
android:src=”@drawable/botao_texto” />
<ImageButton
android:id=”@+id/rolar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/dispositivo”
android:layout_marginLeft=”8dp”
android:layout_marginTop=”28dp”
android:layout_toRightOf=”@+id/enviar”
android:background=”@android:color/background_light”
android:contentDescription=”@string/msg_rolar”
android:onClick=”rolarClicked”
android:src=”@drawable/botao_rolar” />
<ImageButton
android:id=”@+id/pausar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
52 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
android:layout_alignTop=”@+id/rolar”
android:layout_marginLeft=”8dp”
android:layout_toRightOf=”@+id/rolar”
android:background=”@android:color/background_light”
android:contentDescription=”@string/msg_pausar”
android:onClick=”pausarClicked”
android:src=”@drawable/botao_pausar” />
<ImageButton
android:id=”@+id/resetar”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentRight=”true”
android:layout_marginLeft=”8dp”
android:layout_alignTop=”@+id/pausar”
android:background=”@android:color/background_light”
android:contentDescription=”@string/msg_resetar”
android:onClick=”resetarClicked”
android:src=”@drawable/botao_reset” />
</RelativeLayout>
Arquivo strings.xml (Android):
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<string name=”app_name”>Matriz de LEDs</string>
<string name=”msg_enviar”>Por favor, digite o texto que deseja exibir na matriz
de LEDs:</string>
<string name=”action_settings”>Configurações</string>
<string name=”msg_dispositivo”>Dispositivos pareados:</string>
<string name=”msg_velocidade”>Velocidade:</string>
<string name=”msg_texto”>Enviar o texto</string>
<string name=”msg_rolar”>Rolar</string>
<string name=”msg_pausar”>Pausar</string>
<string name=”msg_resetar”>Resetar</string>
</resources>
Arquivo MainActivity.java (Android):
package com.example.matrizledreset;
import java.io.IOException;
import java.io.OutputStream;
53 Respostas dos Exercícios
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;
import com.example.matrizledreset.R;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = “MatrizLEDs”;
private EditText texto;
private SeekBar velocidade;
private Spinner dispositivo;
private BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
private BluetoothSocket soquete = null;
private OutputStream saída = null;
private Set<BluetoothDevice> dispositivosPareados;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, “Início do aplicativo...”);
texto = (EditText) findViewById(R.id.texto);
dispositivo = (Spinner) findViewById(R.id.dispositivo);
velocidade = (SeekBar) findViewById(R.id.velocidade);
54 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
ArrayAdapter<String> dados =
new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
dados.add(“Selecione um dispositivo”);
// Verificar se o aparelho tem suporte a Bluetooth
if (bt != null) {
// Se o Bluetooth não estiver ligado, criar uma intent para ativá-lo
if (!bt.isEnabled()) {
Intent enableBtIntent =
new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
int REQUEST_ENABLE_BT = 1;
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
dispositivosPareados = bt.getBondedDevices();
if (dispositivosPareados.size() > 0) {
for (BluetoothDevice item : dispositivosPareados) {
dados.add(item.getName());
}
}
}
dados.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
dispositivo.setAdapter(dados);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
55 Respostas dos Exercícios
public void enviarClicked(View v) {
enviarDadosBluetooth (“T” + texto.getText().toString());
}
public void rolarClicked(View v) {
enviarDadosBluetooth (“R” + (velocidade.getMax() - velocidade.getProgress()));
}
public void pausarClicked(View v) {
enviarDadosBluetooth (“P”);
}
public void resetarClicked(View v) {
enviarDadosBluetooth (“TEnvie um texto.”);
enviarDadosBluetooth (“R500”);
}
private void enviarDadosBluetooth(String dados) {
Log.v(TAG, “Enviando para “ + dispositivo.getSelectedItem().toString() + “:” +
dados);
Toast mensagem = Toast.makeText(this.getApplicationContext(), “Enviando para “ +
dispositivo.getSelectedItem().toString(), Toast.LENGTH_LONG);
mensagem.show();
if (dispositivosPareados.size() > 0) {
for (BluetoothDevice item : dispositivosPareados) {
if (dispositivo.getSelectedItem().toString()
.equalsIgnoreCase(item.getName())) {
try {
BluetoothDevice dispositivoRemoto = bt.getRemoteDevice(item.getAddress());
soquete = criarSoqueteBluetooth(dispositivoRemoto);
soquete.connect();
// Cancelar a descoberta, pois torna a conexão mais lenta
bt.cancelDiscovery();
saída = soquete.getOutputStream();
byte[] buffer = dados.getBytes();
saída.write(buffer);
saída.close();
soquete.close();
}
catch (IOException erro) {
Log.v(TAG, “Erro: “ + erro.toString());
}
}
}
}
}
56 Arduino Descomplicado: Como Elaborar Projetos de Eletrônica
private BluetoothSocket criarSoqueteBluetooth(BluetoothDevice dispositivo)
throws IOException {
Method método;
BluetoothSocket tmpSoquete = null;
try {
método = dispositivo.getClass().getMethod(“createRfcommSocket”, new Class[]
{int.class});
tmpSoquete = (BluetoothSocket) metodo.invoke(dispositivo, 1);
}
catch (SecurityException e) {
Log.v(TAG, “Erro: “, e);
}
catch (NoSuchMethodException e) {
Log.v(TAG, “Erro: “, e);
}
catch (IllegalArgumentException e) {
Log.v(TAG, “Erro: “, e);
}
catch (IllegalAccessException e) {
Log.v(TAG, “Erro: “, e);
}
catch (InvocationTargetException e) {
Log.v(TAG, “Erro: “, e);
}
return tmpSoquete;
}
}
Capítulo 13
1.
Abrir o arquivo Capítulo 13 – Exercício 1.fzz no Fritzing.
2.
Abrir o arquivo Capítulo 13 – Exercício 2.fzz no Fritzing.