0% acharam este documento útil (0 voto)
15 visualizações17 páginas

Aula 06

Enviado por

arthurxt01
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
15 visualizações17 páginas

Aula 06

Enviado por

arthurxt01
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 17

Leitura Serial

Prof. Leonardo
Monitoramento Serial

 Projeto 1: monitorar um botão responsável por acender ou não um led


const byte botao = 2;
const byte led = 13;
boolean estado;
void setup() {
// Inicializa a comunicação serial a 9600 bits por segundo
Serial.begin(9600);
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
estado = digitalRead(botao);
if (estado == 1) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
// imprime o estado do botão
Serial.println(estado);
delay(1); // delay entre leituras (em milissegundos)
}
Alguns testes

 Abra o Monitor Serial, configurando-o com a mesma velocidade


programada via código (9600)
 Modifique o delay para 1s (1000ms) e verifique a diferença do intervalo de
leitura
Leitura de uma Entrada Analógica

 Projeto 2:
 Leitura de um pino analógico (sinal de um potenciômetro)
 A leitura de um pino analógico gera um valor de 0 a 1023 (resolução de 10
bits nas entradas analógicas)
 Mapeamento da leitura analógica para o intervalo de 0 a 255 dos pinos
PWM (resolução de 8 bits)
 Uso do resultado obtido para definir a modulação PWM do pino de saída
para acender ou não um led com potenciômetro
Potenciômetro

 Resistência variável (de 0 ao valor


no seu corpo)
 Quando 2 terminais são utilizados:
resistor único variável
 Quando tensões diferentes são
aplicadas nas extremidades, temos
um divisor de tensão
 Existência de 2 resistores:
 R1: Uma extremidade ao centro
 R2: Outra extremidade ao centro
 Quando um aumenta o outro
diminui
PWM (Pulse Width Modulation)

 Técnica utilizada para obter resultados analógicos por meios digitais


 Nesses pinos, o Arduino envia uma onda quadrada, ligando e desligando
o pino muito rapidamente
 O padrão de ligado/desligado pode simular uma voltagem variando entre
0Ve5V
 Isso é feito alterando a quantidade de tempo em que a saída permanece
alta (ligada) e baixa (desligada)
 A duração do tempo em que ela permanece ligada é conhecida como a
largura do pulso.
PWM (Pulse Width Modulation)
 Resolução de 8 bits (0-255)
 Valor médio
Circuito
Código

const byte pot = A0;


const byte led = 11;
int sensorValue = 0; // leitura do potenciômetro
byte outputValue = 0; // saida PWM (analógica)

void setup() {
pinMode(led, OUTPUT);
// inicializa a comunicação serial
Serial.begin(9600);
}
void loop() {
// faz a leitura da entrada analógica
sensorValue = analogRead(pot);
// mapeia o resultado da entrada analógica dentro do intervalo de 0 a 255
outputValue = map(sensorValue, 0, 1023, 0, 255);
// escreve o valor de saída (“analógico”)
analogWrite(led, outputValue);
// imprime o resultado no monitor serial:
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
// Aguarda 2 milissegundos antes do próximo loop:
delay(2);
}
Importante

 Entradas analógicas tem resolução de 10 bits (0 - 1023)


 Saídas analógicas por PWM tem resolução de 8 bits (0-255)
 Necessidade de mapear valores (função map)
 A placa Arduino Uno possui pinos específicos para saídas PWM e são
indicados pelo caracter ‘~’ na frente de seu número
Projeto 3

 Usar o potenciômetro para programar o tempo em que o led ficará aceso


e apagado
const byte pot = A0;
const byte led = 11;
int tempo = 0;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
Exemplo 3

void loop() {

tempo = analogRead(pot);

digitalWrite(led, HIGH);
delay(tempo);
digitalWrite(led, LOW);
delay(tempo);
Serial.println(tempo);
}
Exemplo 4
const byte leds[] = {9,10,11};
const byte ledDelay = 500;
byte direction = 1;
byte currentLed = 0;
unsigned long changeTime;

void setup() {
for(int i = 0; i <= 2;i++){ //laço de inicialização dos leds como saídas
pinMode(leds[i],OUTPUT);
}
changeTime = millis(); //retorna quantos ms desde que a execução começou
Serial.begin(9600);
Serial.println(changeTime);
}
Exemplo 4

void loop() {
if((millis() - changeTime) > ledDelay) {
changeLed();
changeTime = millis();
Serial.println(changeTime);
}
}
void changeLed() { //Função responsável por alterar o estado dos leds
for(int i = 0; i <= 2; i++){ //Apaga todos os leds
digitalWrite(leds[i],LOW);
}
digitalWrite(leds[currentLed], HIGH); //Acende apenas o led “da vez”
currentLed += direction;
if(currentLed == 2) { //Se o último led for alcançado, a direção deve mudar
direction = -1;
}

if(currentLed == 0) {//Se o primeiro led for alcançado, a direção deve mudar


direction = 1;
}
}

Você também pode gostar