Curso Técnico em
Automação industrial
Programando Microcontroladores
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 analógicas e saídas analógicas
• Aula anterior
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);
}
Entradas analógicas e saídas analógicas
• Para realizar o controle de uma saída analógica através da
entrada analógica iremos utilizar a função map();
• Ela permite efetuar o mapeamento de um intervalo numérico
em outro intervalo numérico desejado;
• É como se fizéssemos uma mudança de escala.
• Sintaxe:
map(variável de saída, 0 , 1023 , 0 , 255 );
Entradas analógicas e saídas analógicas
const int LED = 3;
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
int ValorMapeado = 0;
void setup() {
[Link](9600); // configura a porta serial
pinMode(LED, OUTPUT);
}
void loop() {
val = analogRead(potenciometro); // lê o pino de entrada
ValorMapeado = map(val,0,1023,0,255);
analogWrite(LED, ValorMapeado);
[Link](ValorMapeado); // imprime o valor na porta serial
delay(100); }
Interrupção
• A interrupção interrompe o
fluxo do código após
receber um sinal interno ou
externo, executando uma
função e depois retornando
ao fluxo normal do
programa
Interrupção
• attachInterrupt(digitalPinToInterrupt(interruptPin),
funcao, CHANGE);
• digitalPinToInterrupt – função que converte o pino em
interrupção;
• funcao – programa que vai ser executado quando acontecer a
interrupção;
• CHANGE – modo que a interrupção deverá ser ativada.
• LOW acionar a interrupção quando o estado do pino for LOW.
• CHANGE acionar a interrupção quando o sempre estado do pino mudar.
• RISING acionar a interrupção quando o estado do pino for de LOW para
HIGH apenas.
• FALLING acionar a interrupção quando o estado do pino for de HIGH
para LOW apenas.
Interrupção
const int LED = 3;
const int interruptPin = 2; // pino da interrupção Pin ardu
volatile bool estado = 0; // variável para mudar o estado do led
void setup() {
pinMode(LED, OUTPUT );
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), funcao, RISING);
}
void loop() {
digitalWrite(LED, estado);
}
void funcao() {
estado=!estado;
}
Temporização
• Função millis() – utiliza contador interno do Arduino assim que
a placa é energizada;
• Ele não trava a execução do microcontrolador;
Temporização
const int LED_VERDE= 2;
const int LED_VERMELHO = 3;
unsigned long TempoAtual=0;
long TempoDecor1 = 0;
long TempoDecor2= 0;
long TempoVerde =1000;
long TempoVerm= 100;
void setup() {
pinMode(LED_ VERDE, OUTPUT );
pinMode(LED_ VERMELHO, OUTPUT);
}
Temporização
void loop() {
TempoAtual = millis();
Pisca1(); Pisca2();
}
void Pisca1() {
if(TempoAtual - TempoDecor1 > TempoVerde) {
TempoDecor1 = TempoAtual;
digitalWrite(LED_VERDE, !digitalRead(LED_VERDE));
} }
void Pisca2() {
if(TempoAtual – TempoDecor2 > TempoVerm) {
TempoDecor2 = TempoAtual;
digitalWrite(LED_ VERMELHO, !digitalRead(LED_ VERMELHO));
} }