sexta-feira, 18 de janeiro de 2013

Controlando seu arduino via infra-red ! (1/2)

Hoje vamos falar como controlar o seu Arduino por controle remoto :
Voce vai precisar de :
1-Arduino
1-Protoboard
1-Receptor de infra-vermelho
1- controle
Jumpers
Voce encontra todos esses componentes pelo melhor preço AQUI .



Segundo o datasheet encontrado aqui , a pinagem correspondente ao receptor de infra vermelho é como na imagem ao lado .


A ligação ao arduino é feita da seguinte forma
Pino da esquerda , é ligado a porta digital numero 2 , o pino central ao GND e o pino da direita ligado ao +5v



Cada controle , envia um pulso de luz contendo um codigo que deverá ser interpretado pelo arduino , para depois poder ser implementado em algum outro algoritimo .

Feitas as ligações no arduino , é hora de programar o  arduino .




#define IRpin_PIN PIND
#define IRpin 2
#define MAXPULSE 65000
#define RESOLUTION 20
uint16_t pulses[100][2]; 
uint8_t currentpulse = 0; 
void setup(void) {
  Serial.begin(9600);
  Serial.println("Pronto para decodificar ");
}
void loop(void) {
  uint16_t highpulse, lowpulse; 
  highpulse = lowpulse = 0; 
    while (IRpin_PIN & (1 << IRpin)) {
     highpulse++;
     delayMicroseconds(RESOLUTION);
     if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
 pulses[currentpulse][0] = highpulse;
  while (! (IRpin_PIN & _BV(IRpin))) 
     lowpulse++;
     delayMicroseconds(RESOLUTION);
     if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
  pulses[currentpulse][1] = lowpulse;
  currentpulse++;

void printpulses(void) {
  Serial.println("\n\r\n\rReceived: \n\rOFF \tON");
  for (uint8_t i = 0; i < currentpulse; i++) {
    Serial.print(pulses[i][0] * RESOLUTION, DEC);
    Serial.print(" usec, ");
    Serial.print(pulses[i][1] * RESOLUTION, DEC);
    Serial.println(" usec");
  }
  Serial.println("int IRsignal[] = {");
  Serial.println("// ON, OFF (in 10's of microseconds)");
  for (uint8_t i = 0; i < currentpulse-1; i++) {
    Serial.print("\t"); 
    Serial.print(pulses[i][1] * RESOLUTION / 10, DEC);
    Serial.print(", ");
    Serial.print(pulses[i+1][0] * RESOLUTION / 10, DEC);
    Serial.println(",");
  }
  Serial.print("\t"); 
  Serial.print(pulses[currentpulse-1][1] * RESOLUTION / 10, DEC);
  Serial.print(", 0};");



Depois de programado o arduino , abra o monitor serial e acione o controle na frente do receptor , os codigos referentes ao controle que voce acionou são os que serão mostrados no monitor serial 

2 comentários:

  1. exit status 1
    'printpulses' was not declared in this scope
    oque pode ser feito a respeito disso

    ResponderExcluir
  2. Arduino: 1.6.8 (Windows 10), Placa:"Arduino/Genuino Uno"

    C:\Users\Marcio Jersak\Documents\Arduino\sketch_apr07a\sketch_apr07a.ino: In function 'void loop()':

    sketch_apr07a:18: error: 'printpulses' was not declared in this scope

    printpulses();

    ^

    sketch_apr07a:28: error: 'printpulses' was not declared in this scope

    printpulses();

    ^

    C:\Users\Marcio Jersak\Documents\Arduino\sketch_apr07a\sketch_apr07a.ino: At global scope:

    sketch_apr07a:33: error: 'pulses' does not name a type

    pulses[currentpulse][1] = lowpulse;

    ^

    sketch_apr07a:34: error: 'currentpulse' does not name a type

    currentpulse++;

    ^

    sketch_apr07a:35: error: expected declaration before '}' token

    }

    ^

    exit status 1
    'printpulses' was not declared in this scope

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.
    não roda

    ResponderExcluir