2

I'm having trouble with some arduino code. im using an Ethernet tutorial code i found and some IR emitter and receiver code i found, and im trying to combine them.

http://www.ladyada.net/learn/sensors/ir.html

http://g33k.blogspot.com/2010/09/arduino-data-webserver-sample-web.html

Both codes work fine by themselves.

The code compiles but when i call the following void IRDetector() , it doesn't work. I have debugged it and so far ive found when i use the variable uint8_t or uint16_t (ive tried replacing them with ints and longs). Do i have to import and libraries to use uint8_t ? Any thoughts?

Any help would be appreciated.

 uint16_t pulses[100][2];  // pair is high and low pulse 
   uint8_t currentpulse = 0; // index for pulses we're storing

    uint8_t highpulse, lowpulse;  // temporary storage timing

      void IRDetectCode(void)
   {
    while(true){

highpulse = lowpulse = 0; // start out with no pulse length

while (IRpin_PIN & (1 << IRpin)) {
  // pin is still HIGH

  // count off another few microseconds
  highpulse++;
  delayMicroseconds(RESOLUTION);

  // If the pulse is too long, we 'timed out' - either nothing
  // was received or the code is finished, so print what
  // we've grabbed so far, and then reset
  if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
     Serial.print(" usec, ");
  //  printpulses();
    //currentpulse=0;
    return;
  }
}
// we didn't time out so lets stash the reading
pulses[currentpulse][0] = highpulse;

// same as above
while (! (IRpin_PIN & _BV(IRpin))) {
  // pin is still LOW
   Serial.print(" usec, ");
  lowpulse++;
  delayMicroseconds(RESOLUTION);
  if ((lowpulse >= MAXPULSE)  && (currentpulse != 0)) {
  //  printpulses();
  //  currentpulse=0;
    return;
  }
}
//pulses[currentpulse][1] = lowpulse;

          // we read one high-low pulse successfully, continue!
       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");
           }

         // print it in a 'array' format
     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"); // tab
             Serial.print(pulses[i][1] * RESOLUTION / 10, DEC);
             Serial.print(", ");
            Serial.print(pulses[i+1][0] * RESOLUTION / 10, DEC);
           Serial.println(",");
        }
          Serial.print("\t"); // tab
     Serial.print(pulses[currentpulse-1][1] * RESOLUTION / 10, DEC);
      Serial.print(", 0};");
        }
1
  • 2
    uint8_t (and similar types) are defined in stdint.h. There's nothing special, it's just a typedef to something like unsigned char. Commented May 4, 2012 at 23:28

1 Answer 1

5

The uint8_t is a unsigned integer on 8 bits. In Arduino, it's called a "byte", so you can use it like that:

for (byte i = 0; i < currentpulse; i++) {....

It's far better than using the Arduino's "int" type (== int16_t) or "unsigned int" (== uint16_t) because the ATmega328 is 8-bit. So handling an 8-bit var is faster (a lot).

I hope it can help.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.