Curso Técnico em
Automação industrial
Programando Microcontroladores 3
Facilitador:
Alexandre de Melo
Funções mais utilizadas
• Documentação de Referência da Linguagem Arduino
• Entradas e Saídas Digitais • Interrupções Externas
• digitalRead() • attachInterrupt()
• digitalWrite() • detachInterrupt()
• pinMode() • Comunicação
• Entradas e Saídas Analógicas • Serial()
• analogRead() • Constantes
• analogReference() • HIGH | LOW
• analogWrite() • INPUT | OUTPUT | INPUT_PULLUP
• Funções Temporizadoras • LED_BUILTIN
• delay() • true | false
• millis()
[Link]
Entradas e saídas digitais
• Saída digital – liga led e blink Sinal digital, 5v 40mA
• Muito utilizada em acionamentos on/off, liga/desliga.
5v 1
const int LED = 3; // Criamos a variável LED
void setup() { 0v 0
pinMode(LED, OUTPUT); // configura o pino digital como uma saída
}
void loop() {
digitalWrite(LED, HIGH); // Acende o led
delay(1000); // Espera um Segundo = 1000ms
digitalWrite(LED, LOW); // Desliga o led
delay(1000); // Espera um Segundo = 1000ms
}
Entradas e saídas digitais
• Entrada e saída digital – liga/desliga led por botão Pin ardu
const int LED = 3; // Criamos a variável LED
const int BOTAO = 4; //criamos a variável BOTAO
boolean ValorBotao = 0; //criamos uma variável boleana 0 ou 1
void setup() {
pinMode(LED, OUTPUT); // configura o pino digital como uma saída
pinMode(BOTAO, INPUT); // configura o pino digital como uma entrada
}
void loop() {
ValorBotao = digitalRead (BOTAO);
if (ValorBotao==HIGH){
digitalWrite(LED, HIGH); // Acende o led
}
else {
digitalWrite(LED, LOW); // Desliga o led
}
}
Entradas e saídas digitais
• Entrada e saída digital – led ligado/desligado constantemente
const int LED = 3; // Criamos a variável LED
const int BOTAO = 4; //criamos a variável BOTAO
boolean ValorBotao = 0; //criamos uma variável boleana 0 ou 1
void setup() {
pinMode(LED, OUTPUT); // configura o pino digital como uma saída
pinMode(BOTAO, INPUT); // configura o pino digital como uma entrada
}
void loop() { if (ValorBotao ==HIGH){
if(digitalRead (BOTAO)){ digitalWrite(LED, HIGH); // Acende o led
ValorBotao = !ValorBotao; }
while (digitalRead(BOTAO)) { else {
delay(100); digitalWrite(LED, LOW); // Desliga o led
} }
} }
Saídas analógicas
• PWM – conversor D/A
• As saídas analógicas são saídas PWM, ou modulação por largura
de pulso;
• No UNO os pinos (11,10, 9, 6, 5, 3) podem ser configurados como
saídas para controle de velocidade de motores, brilho de leds, etc.
Usamos a respectiva função: analogWrite(LED, 0-255);
Saídas analógicas
• O conversor D/A do Atmega 328p possui 8 bits
• Logo o conversor D/A do Arduino tem a seguinte resolução:
5𝑉 5𝑉
• 𝑅𝑒𝑠𝑜𝑙𝑢çã𝑜 = = = 0,0196𝑉 ≅ 20𝑚𝑉
28 −1 255
const int LED = 3; // Criamos a variável LED
void setup() {
pinMode(LED, OUTPUT); // configura o pino digital como uma saída
}
void loop() {
for(int i = 0; i <= 255; i++){
analogWrite(LED, i);
delay(5);
}
}
Saídas analógicas
• Aumentando e diminuindo o brilho do led com PWM
const int LED = 3; // Criamos a variável LED
void setup() {
pinMode(LED, OUTPUT); // configura o pino digital como uma saída
}
void loop() {
for(int i = 0; i <= 255; i++){
analogWrite(LED, i);
delay(5);
}
for(int i = 255; i > 0; i--){
analogWrite (LED, i);
delay(5);
}
}
Entradas analógicas
• O conversor A/D do Atmega 328p possui 10 bits
• Ou seja, ele mapeia tensões de 0-5V em valores inteiros de 0-1023;
• Logo o Arduino uno tem a seguinte resolução:
5𝑉 5𝑉
• 𝑅𝑒𝑠𝑜𝑙𝑢çã𝑜 = = = 0,00488𝑉 ≅ 4,9𝑚𝑉;
210 1024
• No UNO os pinos (A0, A1, A2, A3, A4, A5) são as entradas analógicas.
Entradas analógicas
int potenciometro = A0; // terminal do meio de um potenciômetro conectado ao pino analógico 3
int val = 0; // variável para guardar o valor lido
void setup() {
[Link](9600); // configura a porta serial
}
void loop() {
val = analogRead(potenciometro); // lê o pino de entrada
[Link](val); // imprime o valor na porta serial
delay(100);
}
Entradas analógicas
int potenciometro = A0; // terminal do meio de um potenciômetro conectado ao pino analógico 3
int val = 0; // variável para guardar o valor lido
float tensao = 0;
void setup() {
[Link](9600); // configura a porta serial
}
void loop() {
val = analogRead(potenciometro); // lê o pino de entrada
tensao = (val*5.0)/1023;
[Link](tensao); // imprime o valor na porta serial
delay(100);
}