Go Down

Topic: Sony IR Remote Library (Read 3307 times) previous topic - next topic

KWaterston

Mar 07, 2010, 09:23 am Last Edit: Mar 07, 2010, 09:24 am by KWaterston Reason: 1
Hi I'm new to the arduino ( got it yesterday :) ) and after blinking a LED and playing with some CdS cells and a servo I got the arduino reading a sony remote.  The code worked great, it was giving me the codes when i pressed buttons on my remote.

Now I wanted to try and learn how to make my own libraries so I thought I would turn this one into a library using the tutorial on the arduino website, problem is I'm stuck.  Any help would be appreciated as I really want to know what I'm doing wrong.

First working code:
Quote
/*
Program that reads key presses of a sony remote control
Created by Kurtis Waterston, March 6 2010
Realesed into the public domain
*/

int irDet = 2;
int key = 0;
int data[12];
int state;

void setup() {
 Serial.begin(9600);                         //For debugging
 pinMode(irDet, INPUT);                      //IR detector connected to digital pin 2
}

void loop() {                                //Main loop
 if (pulseIn(irDet, LOW) > 2200) {          //Check for start pulse
   getIRkey();
   Serial.print("Key press is = ");
   Serial.println(key);
 }

}

int getIRkey() {                             //Read pulses
 data[0] = pulseIn(irDet, LOW);
 data[1] = pulseIn(irDet, LOW);
 data[2] = pulseIn(irDet, LOW);
 data[3] = pulseIn(irDet, LOW);
 data[4] = pulseIn(irDet, LOW);
 data[5] = pulseIn(irDet, LOW);
 data[6] = pulseIn(irDet, LOW);
 data[7] = pulseIn(irDet, LOW);
 data[8] = pulseIn(irDet, LOW);
 data[9] = pulseIn(irDet, LOW);
 data[10] = pulseIn(irDet, LOW);
 data[11] = pulseIn(irDet, LOW);

 for(int x = 0; x <= 11; x++) {              //Decide wether pulses are 1's or 0's
   if(data
  • > 1000) {
         data
  • = 1;
       }
       else {
         data
  • = 0;
       }
     }

     int result = 0;                            //Convert array into interger
     int seed = 1;
     for(int i=0;i<11;i++) {
       if(data == 1) {
         result += seed;
       }
       seed = seed * 2;
     }
     key = result;
     return result;
    }



Header file:
Quote
/*
IrRemote.h - A library for Sony tv remote control
Created by Kurtis Waterston, March 6 2010
Realeased into the public domain
*/

#ifndef IrRemote_h
#define IrRemote_h

#include "WProgram.h"

class IrRemote
{
public:
 IrRemote(int pin);
 int IrReady();
 int IrKey();
private:
 int _pin;
 int _data[12];
 int _seed;
 int _result;
};

#endif


CPP file:
Quote
/*
IrRemote.cpp - A library for sony tv remote control
Created by Kurtis Waterston, March 6 2010
Released into the public domain
*/

#include "WProgram.h"
#include "IrRemote.h"

IrRemote::IrRemote(int pin)
{
 pinMode(pin, INPUT);
 _pin = pin;
}

int IrRemote::IrReady()
{
 if(pulseIn(_pin, LOW) > 2200) {
   return 1;
 }
 else {
   return 0;
 }
}

int IrRemote::IrKey()
{
 _data[0] = pulseIn(_pin, LOW);
     _data[1] = pulseIn(_pin, LOW);
     _data[2] = pulseIn(_pin, LOW);
     _data[3] = pulseIn(_pin, LOW);
     _data[4] = pulseIn(_pin, LOW);
     _data[5] = pulseIn(_pin, LOW);
     _data[6] = pulseIn(_pin, LOW);
     _data[7] = pulseIn(_pin, LOW);
     _data[8] = pulseIn(_pin, LOW);
     _data[9] = pulseIn(_pin, LOW);
     _data[10] = pulseIn(_pin, LOW);
     _data[11] = pulseIn(_pin, LOW);
   
   for(int x = 0; x <= 11; x++) {
     if(_data
  • > 1000) {
           _data
  • = 1;
         }
         else {
           _data
  • = 0;
         }
       }
       
     _result = 0;
     _seed = 1;
     for(int i=0;i<11;i++) {
       if(_data == 1) {
         _result += _seed;
       }
       _seed = _seed * 2;
     }
     return _result;
    }


New Code using created library:
Quote
#include <IrRemote.h>

int key;
int State = 0;
IrRemote IrDet(2);

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

void loop() {
 State = IrRemote.IrReady();
 key = IrRemote.IrKey();
 Serial.print("Remote Key = ");
 Serial.println(key);
}


The problem is when I try and verify the new code I get this error:
Quote
In function 'void loop()':
error: expected primary-expression before '.' token


Again any help would be appreciated as I really want to learn how to work with this awesome tool and create more libraries.  Thanks in advance.

Nadir

Hi Curtis,

Use the instance of class in your skecth,

Code: [Select]
void loop() {
State = IrDet.IrReady();
key = IrDet.IrKey();
Serial.print("Remote Key = ");
Serial.println(key);
}

KWaterston

Thanks a lot Nadir I got it working now, although its still probably not the best way to do things, but that's why I'm still learning  ;D .

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy