Loading...
Pages: [1]   Go Down
Author Topic: sm0038 ir receiver giving different values without pressing remote  (Read 152 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hiii

iam using arduino uno and sm0038 ir receiver
it works good for the following code
Code:
#include <IRremote.h>
 int receiver = 7;
 IRrecv irrecv(receiver);
decode_results results;
void setup()
{
   Serial.begin(9600);
  irrecv.enableIRIn();
}
void loop()
  {
   

  if (irrecv.decode(&results))
  {
    Serial.println(results.value);
    irrecv.resume();
  }
}

i want to make a ball and bat game on 16x16 led matrix display using 4 shift registers (74hc595)

i want to move the bat using ir remote(bat=>3 leds glowing).so to check the motion of the bat moving in a coloumn
i wrote the following code
Code:
#include <SPI.h>
#include <IRremote.h>
int latchpin = 4;

int clockPin = 13;

int dataPin = 11;

 int receiver = 7; //pin going to output pin of sm0038
 IRrecv irrecv(receiver);
decode_results results;

unsigned long int bswitchvalue=0;
int batpos[3]={601,701,801};//601 represents the position of bat leds i.e 6th row and 1st coloumn
int batc,batr;              //of the byte array l1[]
                            //i wrote in such a way that i can use those 6 and 1 values in bitset(),bitclear()
byte x;

byte l1[8]=
  {
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B10000000,//here the three ones represent the bat position
  B10000000,
  B10000000
 
  };
 byte l2[8]={
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000
 
 };
 byte l3[8]={
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000
 
 };
 byte l4[8]={
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000
 
 };
void setup()
{
  pinMode(latchpin, OUTPUT);
  pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
   
  SPI.setBitOrder(LSBFIRST);
  SPI.begin();
  Serial.begin(9600);
  irrecv.enableIRIn();
}
void loop()
{
 
  if (irrecv.decode(&results)==true)
          {
           
         
         bswitchvalue =results.value; 
         Serial.println(results.value);
          irrecv.resume();
      if(bswitchvalue>0)
       {     
        switch(bswitchvalue)
         {
           case 3249147378:
                            batmotion1();
                           
                            bswitchvalue=0;
                            break;
            case 3249163698:
                             batmotion2();
                            bswitchvalue=0;
                             break;
         }
       
       
          }
         }
 disp();
}
 void batmotion1()   //function for corresponding button here bat moves up
         {
            if(batpos[0]>101)
              {
               
                 batr=batpos[2]/100;
              clearingbits(batr,1);
               for(int i=0;i<3;i++)
                 {
                    batpos[i]=batpos[i]-100;
                 }
               
                batr=batpos[0]/100;
               
              settingbits(batr,1);
             
           
                     
               
           }
           
          }
             
          void batmotion2()
                 {
            if(batpos[2]<1601)
              {
             
                 batr=batpos[0]/100;
              clearingbits(batr,1);
               for(int i=0;i<3;i++)
                 {
                    batpos[i]=batpos[i]+100;
                 }
             
                batr=batpos[2]/100;
             
              settingbits(batr,1);
             
               
           }
          }
           
             
     void settingbits(int R,int C)
          {
             if(R<9&&C<9)
               {
                 R=R-1;
                 C=8-C;
                  bitSet(l1[R],C);
               }
               
              if(R<9&&C>8)
                {
                  R=R-1;
                  C=16-C;
                    bitSet(l2[R],C);
                }
                if(R>8&&C<9)
                {
                  R=R-9;
                  C=8-C;
                    bitSet(l3[R],C);
                       
                   
                 
                }
                if(R>8&&C>8)
                {
                  R=R-9;
                   C=16-C;
                    bitSet(l4[R],C);
                 
                       
                }
          }
               
               
               
               
                   
       void clearingbits(int R,int C)
          {
             if(R<9&&C<9)
               {
                 R=R-1;
                  C=8-C;
                  bitClear(l1[R],C);
               }
               
              if(R<9&&C>8)
                {
                  R=R-1;
                   C=16-C;
                    bitClear(l2[R],C);
                }
                if(R>8&&C<9)
                {
                  R=R-9;
                   C=8-C;
                    bitClear(l3[R],C);
                }
                if(R>8&&C>8)
                { R=R-9;
                   C=16-C;
                    bitClear(l4[R],C);
                }
          }
         
         
     
     
    void disp()
       {
    int i;
 x=B10000000;
for(i=0;i<8;i++)
  {
    digitalWrite(latchpin,LOW);
   
  SPI.transfer(B11111111);
  SPI.transfer(~l1[i]);   
    SPI.transfer(B00000000);
   SPI.transfer(x);
   digitalWrite(latchpin,HIGH);
  delayMicroseconds(500);
  x=x>>1;
  }
 
  x=B10000000;
  for(i=0;i<8;i++)
  {
    digitalWrite(latchpin,LOW);
   
 
    SPI.transfer(~l2[i]);
   SPI.transfer(B11111111); 
   SPI.transfer(B00000000);
  SPI.transfer(x);
   
   
   digitalWrite(latchpin,HIGH);
   delayMicroseconds(500);
  x=x>>1;
  }
   
   x=B10000000;
   for(i=0;i<8;i++)
  {
    digitalWrite(latchpin,LOW);
   
 
   SPI.transfer(B11111111); 
   
  SPI.transfer(~l3[i]);
     SPI.transfer(x);
    SPI.transfer(B00000000);

   
   digitalWrite(latchpin,HIGH);
  delayMicroseconds(500);
 x=x>>1;
  }
   
   x=B10000000;
   for(i=0;i<8;i++)
  {
    digitalWrite(latchpin,LOW);
   
   SPI.transfer(~l4[i]);
  SPI.transfer(B11111111); 
   
 
     SPI.transfer(x);
    SPI.transfer(B00000000);

   
   digitalWrite(latchpin,HIGH);
   delayMicroseconds(500);
x=x>>1;
  }
 
 }
     

when i upload the above code values other than the remote are found in serial monitor. smiley-sad

iam getting values even without pressing the buttons on remote.

please help me with the reason why this happening.

thank you
Logged

Pages: [1]   Go Up
Print
 
Jump to: