Monday, February 6, 2017

16. Entrada analógica analogRead e saída pseudoanalógica com analogWrite

Este experimento ilustra o uso da função analogRead() e
analogWrite() para controlar a intensidade de um led com
um potenciômetro.

Lição do curso:
Coursera: Electrones en Acción: Electrónica y Arduinos para tus propios Inventos 
Pontificia Universidad Católica de Chile

Simulação em Autodesk Circuits

int AnInput = 0;
int ledPin = 11; //Este pin tem PWM
int leitura = 0;
int aux = 0;

void setup() {
 Serial.begin(9600);
 delay(1000);
 pinMode(11,OUTPUT);
 }

void loop() {
 leitura = analogRead(AnInput);
 //Mapeia o valor  ADC entre 0 e 255
 aux = map(leitura, 0, 1023, 0, 255);
 analogWrite(ledPin,aux);
 }





15. analogRead - Potenciômetro

 Este experimento ilustra o  uso da função analogRead() para medir a voltagem de um divisor de tensão.

Lição do curso:
Coursera: Electrones en Acción: Electrónica y Arduinos para tus propios Inventos 
Pontificia Universidad Católica de Chile

Implementação em Autodesk Circuits

int btn1 = 2;
int AnInput = 0;
int leitura = 0;

void setup() {
 Serial.begin(9600);
 delay(1000);
 }

void loop() {
 lectura = analogRead(AnInput);
 if (digitalRead(btn1) == LOW) {
  //Imprime o valor digital
  Serial.println(leitura);
  }
else {
 //Imprime o equivalente en voltagem
 Serial.println(leitura * 0.0049);
 }

delay(1000);
}





Sunday, February 5, 2017

14. ISR

Esta experiência mostra o uso do ISR. Consiste em que ao pressionar o botão, sem importar o momento, o led mudará seu estado: se estiver aceso, se apagará, e vice versa.

Lição do curso:
Coursera: Electrones en Acción: Electrónica y Arduinos para tus propios Inventos 
Pontificia Universidad Católica de Chile

Implementação em Autodesk Circuits

int Btn0 = 2; // Pin ligado a int.0
int Btn1 = 3; // Pin ligado a int.1
int pinLed = 11;

void setup() {
 pinMode(Btn0, INPUT);
 pinMode(Btn1, INPUT);
 pinMode(pinLed, OUTPUT);
 attachInterrupt(0,apaga_led, RISING);
 attachInterrupt(1,acende_led, RISING);
 Serial.begin(9600);
 delay(2000);
}

void loop() {
 delay(2500);
 Serial.print("Passaram ");
 delay(2500);
 Serial.println("5 segundos");
 }

 /* A função de interrupção muda o presente estado do led */

 void apaga_led() {
 digitalWrite(pinLed, 0);
 }

 void acende_led() {
 digitalWrite(pinLed, 1);
 }


13. attachInterrupt

Este código ilustra o uso do comando attachInterrupt.

Lição do curso:
Coursera: Electrones en Acción: Electrónica y Arduinos para tus propios Inventos 
Pontificia Universidad Católica de Chile

Notamos que a simulação não funcionou no Autodesk Circuits. Implemente e teste diretamente este código no seu Arduino Uno. 

//Definimos o pino correspondente ao led

int ledPin = 11;

//Definimos o pino correpondente à interrupção  0

int intPin = 2;

void setup()
{
//Configuramos os pinos como saída
pinMode(2,OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(intPin, HIGH);


//Configuramos a interrupcao 0 para ativar-se quando temos 
//queda de tensão, executando a funcao acende_led

attachInterrupt(0, acende_led,FALLING);
}

void loop()
 {
 digitalWrite(ledPin, LOW);
 delay(300);
 digitalWrite(intPin, LOW);

 /* Neste momento se ativa o alerta e se
 executa a funcao acende_led */

 delay(500);
 }

void acende_led(){
  digitalWrite(ledPin, HIGH);
  digitalWrite(intPin, HIGH);
  }