Pessoal,
Conforme prometido na Aula 14 do Curso Arduino Advanced, segue o código do Dimmer Digital AC com TRIAC:
int UP = 7;
int DOWN = 8;
int LAMP = 3;
int dimming = 128;
int counts = 7;
int dimmer[7] = { 1, 105, 100, 75, 50, 25, 10 };
int i = 0;
void setup()
{
//Serial.begin(9600);
//delay(1000);
pinMode(UP, INPUT);
pinMode(DOWN, INPUT);
pinMode(LAMP, OUTPUT);
digitalWrite(UP, HIGH);
digitalWrite(DOWN, HIGH);
attachInterrupt(0, zero_crosss_int, RISING);
}
void loop()
{
if (!digitalRead(UP) || !digitalRead(DOWN))
{
if (verifica_botao(UP))
{
if (i < (counts - 1)) i++;
//Serial.print("UP: ");
//Serial.println(i, DEC);
}
else if (verifica_botao(DOWN))
{
if (i > 0) i--;
//Serial.print("DOWN: ");
//Serial.println(i, DEC);
}
}
//Serial.print("VALOR: ");
// Serial.println(i, DEC);
dimming = dimmer[i];
delay(100);
}
void zero_crosss_int()
{
int dimtime = (65 * dimming);
delayMicroseconds(dimtime);
digitalWrite(LAMP, HIGH);
delayMicroseconds(8.33);
digitalWrite(LAMP, LOW);
}
byte verifica_botao(byte botao)
{
if (!digitalRead(botao))
{
unsigned long tempo = millis() + (150 - dimming);
while(tempo > millis())
{
if (digitalRead(botao)) return LOW;
}
return HIGH;
}
else
return LOW;
}
terça-feira, 31 de julho de 2012
quarta-feira, 27 de junho de 2012
Codigo Fonte Aula 13 - Optoacopladores
Conforme Aula 13 do Curso Arduino Advanced, seguem os códigos apresentados:
Acendendo uma lâmpada pelo Arduino - Parte 1
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
}
void loop() {
byte ok = 0;
if (digitalRead(8) == LOW)
{
unsigned long tempo = millis();
while(tempo + 500 > millis());
if (digitalRead(8) == LOW) ok = 1;
}
if (ok)
digitalWrite(13, !digitalRead(13));
delay(500);
}
Verificando no Arduino se um dispositivo foi acionado - Parte2
Acendendo uma lâmpada pelo Arduino - Parte 1
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
}
void loop() {
byte ok = 0;
if (digitalRead(8) == LOW)
{
unsigned long tempo = millis();
while(tempo + 500 > millis());
if (digitalRead(8) == LOW) ok = 1;
}
if (ok)
digitalWrite(13, !digitalRead(13));
delay(500);
}
Verificando no Arduino se um dispositivo foi acionado - Parte2
byte LED = 13;
byte DETECT = 2;
volatile unsigned long contador;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(DETECT, INPUT);
digitalWrite(DETECT, HIGH);
contador = 0;
attachInterrupt(0, detect, FALLING);
}
void loop()
{
unsigned long contador_loop = contador;
unsigned long mark = millis() + 100;
while (mark > millis());
if (contador > contador_loop)
{
// ligado
digitalWrite(LED, HIGH);
}
else
{
// desligado
contador = 0;
digitalWrite(LED, LOW);
}
//delay(100);
}
void detect()
{
contador++;
}
byte DETECT = 2;
volatile unsigned long contador;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(DETECT, INPUT);
digitalWrite(DETECT, HIGH);
contador = 0;
attachInterrupt(0, detect, FALLING);
}
void loop()
{
unsigned long contador_loop = contador;
unsigned long mark = millis() + 100;
while (mark > millis());
if (contador > contador_loop)
{
// ligado
digitalWrite(LED, HIGH);
}
else
{
// desligado
contador = 0;
digitalWrite(LED, LOW);
}
//delay(100);
}
void detect()
{
contador++;
}
segunda-feira, 4 de junho de 2012
Código Fonte Aula 11 do Curso Arduino Advanced
Pessoal,
Segue o código fonte da Aula 11 do Curso Arduino Advanced, sobre EEPROM e SD Card.
#include
#include
File arquivo;
byte inicio_ok;
void setup()
{
inicio_ok = 1;
Serial.begin(9600);
if(!SD.begin(4))
{
Serial.println("Erro ao iniciar cartao SD!");
inicio_ok = 0;
return;
}
Serial.println("Iniciacao Ok!");
}
void loop()
{
if (inicio_ok)
{
int opcao = Serial.read();
if (opcao == 'c')
{
Serial.println("Opcao Configuracao Selecionada!");
opcao = Serial.read();
while(opcao == -1)
{
opcao = Serial.read();
}
int valorConfig = opcao - 48;
EEPROM.write(0, valorConfig);
Serial.print("Valor gravado com sucesso: ");
Serial.println(valorConfig);
}
else if (opcao == 'w')
{
while(opcao != 'x')
{
int leituraSensor = analogRead(0);
arquivo = SD.open("sensor.txt", FILE_WRITE);
if(arquivo)
{
arquivo.print("Valor do sensor em ");
arquivo.print(millis());
arquivo.print(" ms: ");
arquivo.println(leituraSensor);
arquivo.close();
delay(1000 * EEPROM.read(0));
Serial.print("Feita leitura do sensor em ");
Serial.print(EEPROM.read(0), DEC);
Serial.println(" segs.");
}
else
{
Serial.println("Erro ao abrir o arquivo para escrita!");
}
opcao = Serial.read();
}
Serial.println("Terminando leitura do sensor!");
}
else if (opcao == 'r')
{
arquivo = SD.open("sensor.txt");
if (arquivo)
{
while(arquivo.available())
{
Serial.write(arquivo.read());
}
arquivo.close();
Serial.println("Termino do arquivo");
}
else
{
Serial.println("Erro ao abrir arquivo para leitura!");
}
}
else if (opcao == 'e')
{
SD.remove("sensor.txt");
if (!SD.exists("sensor.txt"))
{
Serial.println("Arquivo apagado com sucesso!");
}
else
{
Serial.println("Erro ao apagar arquivo!");
}
}
}
}
Segue o código fonte da Aula 11 do Curso Arduino Advanced, sobre EEPROM e SD Card.
#include
#include
File arquivo;
byte inicio_ok;
void setup()
{
inicio_ok = 1;
Serial.begin(9600);
if(!SD.begin(4))
{
Serial.println("Erro ao iniciar cartao SD!");
inicio_ok = 0;
return;
}
Serial.println("Iniciacao Ok!");
}
void loop()
{
if (inicio_ok)
{
int opcao = Serial.read();
if (opcao == 'c')
{
Serial.println("Opcao Configuracao Selecionada!");
opcao = Serial.read();
while(opcao == -1)
{
opcao = Serial.read();
}
int valorConfig = opcao - 48;
EEPROM.write(0, valorConfig);
Serial.print("Valor gravado com sucesso: ");
Serial.println(valorConfig);
}
else if (opcao == 'w')
{
while(opcao != 'x')
{
int leituraSensor = analogRead(0);
arquivo = SD.open("sensor.txt", FILE_WRITE);
if(arquivo)
{
arquivo.print("Valor do sensor em ");
arquivo.print(millis());
arquivo.print(" ms: ");
arquivo.println(leituraSensor);
arquivo.close();
delay(1000 * EEPROM.read(0));
Serial.print("Feita leitura do sensor em ");
Serial.print(EEPROM.read(0), DEC);
Serial.println(" segs.");
}
else
{
Serial.println("Erro ao abrir o arquivo para escrita!");
}
opcao = Serial.read();
}
Serial.println("Terminando leitura do sensor!");
}
else if (opcao == 'r')
{
arquivo = SD.open("sensor.txt");
if (arquivo)
{
while(arquivo.available())
{
Serial.write(arquivo.read());
}
arquivo.close();
Serial.println("Termino do arquivo");
}
else
{
Serial.println("Erro ao abrir arquivo para leitura!");
}
}
else if (opcao == 'e')
{
SD.remove("sensor.txt");
if (!SD.exists("sensor.txt"))
{
Serial.println("Arquivo apagado com sucesso!");
}
else
{
Serial.println("Erro ao apagar arquivo!");
}
}
}
}
sábado, 26 de maio de 2012
Códigos Fontes da Aula 10 (Expansor de Porta) do Curso Arduino
Pessoal,
Segue os códigos fontes utilizados na Aula 10 do Curso Arduino Advanced. E conforme prometido segue o código também do contador regressivo.
Código #1
Segue os códigos fontes utilizados na Aula 10 do Curso Arduino Advanced. E conforme prometido segue o código também do contador regressivo.
Código #1
#include
#define expansor1 0x38
void setup()
{
Wire.begin();
Wire.beginTransmission( expansor1);
Wire.send(0xFF);
Wire.endTransmission();
}
void loop()
{
Wire.beginTransmission( expansor1);
Wire.send(B10000001);
Wire.endTransmission();
delay(1000);
Wire.beginTransmission( expansor1);
Wire.send(B01111101);
Wire.endTransmission();
delay(1000);
}
Código #2
#include
#define expansor1 0x38
#define expansor2 0x39
void setup()
{
Wire.begin();
comunica(expansor1, 0xFF);
comunica(expansor2, 0xFF);
}
void loop()
{
comunica(expansor1, B10000001);
comunica(expansor2, B01111101);
delay(1000);
comunica(expansor2, B10000001);
comunica(expansor1, B01111101);
delay(1000);
}
void comunica(byte endereco, byte digito)
{
Wire.beginTransmission( endereco);
Wire.send(digito);
Wire.endTransmission();
}
Código Extra do Contador Regressivo
#include
#define expansor1 0x38
#define expansor2 0x39
void setup()
{
Wire.begin();
EscreveDigito(expansor1, 0xFF);
EscreveDigito(expansor2, 0xFE);
}
void loop()
{
for(int i = 99; i >= 0; i--)
{
byte a = i / 10;
byte b = i - (a * 10);
if (i < 10) a = 0;
EscreveDigito(expansor2, ConverteDigito(a));
EscreveDigito(expansor1, ConverteDigito(b));
delay(1000);
}
}
byte ConverteDigito(byte decimal)
{
switch(decimal)
{
case 0:
return B00010001;
case 1:
return B01111101;
case 2:
return B00100011;
case 3:
return B00101001;
case 4:
return B01001101;
case 5:
return B10001001;
case 6:
return B10000001;
case 7:
return B00111101;
case 8:
return B00000001;
case 9:
return B00001001;
default:
return B11101111;
}
}
void EscreveDigito(byte endereco, byte digito)
{
Wire.beginTransmission(endereco);
Wire.send(digito);
Wire.endTransmission();
}
#define expansor1 0x38
#define expansor2 0x39
void setup()
{
Wire.begin();
EscreveDigito(expansor1, 0xFF);
EscreveDigito(expansor2, 0xFE);
}
void loop()
{
for(int i = 99; i >= 0; i--)
{
byte a = i / 10;
byte b = i - (a * 10);
if (i < 10) a = 0;
EscreveDigito(expansor2, ConverteDigito(a));
EscreveDigito(expansor1, ConverteDigito(b));
delay(1000);
}
}
byte ConverteDigito(byte decimal)
{
switch(decimal)
{
case 0:
return B00010001;
case 1:
return B01111101;
case 2:
return B00100011;
case 3:
return B00101001;
case 4:
return B01001101;
case 5:
return B10001001;
case 6:
return B10000001;
case 7:
return B00111101;
case 8:
return B00000001;
case 9:
return B00001001;
default:
return B11101111;
}
}
void EscreveDigito(byte endereco, byte digito)
{
Wire.beginTransmission(endereco);
Wire.send(digito);
Wire.endTransmission();
}
Abraços,
Renato Aloi
terça-feira, 22 de maio de 2012
Códigos do Material Adicional da Aula 8 (Ponte H)
Pessoal,
Segue abaixo os códigos do Material Adicional da Aula 8 (Ponte H) publicado no Youtube.
Código do Motor de Passo:
#include
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup() {
myStepper.setSpeed(60);
Serial.begin(9600);
}
void loop() {
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
Código do Blink com dois motores:
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
delay(1000);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(1000);
}
Segue abaixo os códigos do Material Adicional da Aula 8 (Ponte H) publicado no Youtube.
Código do Motor de Passo:
#include
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup() {
myStepper.setSpeed(60);
Serial.begin(9600);
}
void loop() {
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
Código do Blink com dois motores:
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
delay(1000);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(1000);
}
sábado, 5 de maio de 2012
Código Fonte Arduino para Ponte H via PWM
Pessoal,
Segue o código do exemplo de acionamento da Ponte H via PWM, conforme o vídeo abaixo:
int portaH1 = 9;
int portaH2 = 10;
int potpin = 0;
int val;
int val1;
int val2;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(potpin);
val1 = map(val, 0, 511, 255, 0);
val2 = map(val, 512, 1023, 0, 255);
if (val > 511) val1 = 0;
else val2 = 0;
Serial.print("Val: ");
Serial.print(val, DEC);
Serial.print(" Val1: ");
Serial.print(val1, DEC);
Serial.print(" Val2: ");
Serial.println(val2, DEC);
analogWrite(portaH1, val1);
analogWrite(portaH2, val2);
}
Segue o código do exemplo de acionamento da Ponte H via PWM, conforme o vídeo abaixo:
int portaH1 = 9;
int portaH2 = 10;
int potpin = 0;
int val;
int val1;
int val2;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(potpin);
val1 = map(val, 0, 511, 255, 0);
val2 = map(val, 512, 1023, 0, 255);
if (val > 511) val1 = 0;
else val2 = 0;
Serial.print("Val: ");
Serial.print(val, DEC);
Serial.print(" Val1: ");
Serial.print(val1, DEC);
Serial.print(" Val2: ");
Serial.println(val2, DEC);
analogWrite(portaH1, val1);
analogWrite(portaH2, val2);
}
segunda-feira, 23 de abril de 2012
Código Fonte RTC+LCD - Curso Arduino Advanced - Aula 7
Pessoal,
Segue abaixo o código fonte utilizado na Aula 7 do Curso Arduino Advanced, sobre o Relógio em Tempo Real com Display LCD 16x2.
#include
#include
#include
RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(16, 2);
if (!RTC.isrunning())
{
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop()
{
DateTime agora = RTC.now();
String relogio_data = "DT: ";
String relogio_hora = "HR: ";
int dia = agora.day();
int mes = agora.month();
int ano = agora.year();
relogio_data += ArrumaZero(dia);
relogio_data += "/";
relogio_data += ArrumaZero(mes);
relogio_data += "/";
relogio_data += ano;
int hora = agora.hour();
int minuto = agora.minute();
int segundo = agora.second();
relogio_hora += ArrumaZero(hora);
relogio_hora += ":";
relogio_hora += ArrumaZero(minuto);
relogio_hora += ":";
relogio_hora += ArrumaZero(segundo);
lcd.setCursor(0, 0);
lcd.print(relogio_data);
lcd.setCursor(0, 1);
lcd.print(relogio_hora);
delay(500);
}
String ArrumaZero(int i)
{
String ret;
if (i < 10) ret += "0";
ret += i;
return ret;
}
Abraços,
Renato
Assinar:
Postagens (Atom)