terça-feira, 31 de julho de 2012

Código Dimmer Digital AC - Aula 14

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;
}

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

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++;
}

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!");
      }
    }
  }
}

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

#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();
}
 
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);             
}

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); 
}

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