(Should be) Simple IR LED Beam Break Sensor Coding

First of all, I know there are probably 50 different threads on this topic, but I can't find one that addresses my problem. I am trying to make a simple break beam sensor using an Arduino Uno, a 950 nm IR LED, and a TSOP 38238 sensor ( IR (Infrared) Receiver Sensor [TSOP38238] : ID 157 : $1.95 : Adafruit Industries, Unique & fun DIY electronics and kits ). I have it wired with the proper resistor, and I know that the sensor and LED are both working and making contact with each other. I know that the LED needs to be PWM'd at 38khz in order for the sensor to read it properly, and I think I found a chunk of code that will let me do that.

/* Code to pulse pin 3 with a modulated signal
* Can be used to drive an IR LED to keep a TSOP IR reciever happy
* This allows you to use a modulated reciever and a continious beam detector
* By Mike Cook Nov 2011 - Released under the Open Source licence
*/
volatile byte pulse = 0;

ISR(TIMER2_COMPB_vect){  // Interrupt service routine to pulse the modulated pin 3
    pulse++;
  if(pulse >= 8) { // change number for number of modulation cycles in a pulse
    pulse =0;
    TCCR2A ^= _BV(COM2B1); // toggle pin 3 enable, turning the pin on and off
  }
}

void setIrModOutput(){  // sets pin 3 going at the IR modulation rate
  pinMode(3, OUTPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 51; // defines the frequency 51 = 38.4 KHz, 54 = 36.2 KHz, 58 = 34 KHz, 62 = 32 KHz
  OCR2B = 26;  // deines the duty cycle - Half the OCR2A value for 50%
  TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
}

void setup(){
  setIrModOutput();
  TIMSK2 = _BV(OCIE2B); // Output Compare Match B Interrupt Enable
}

void loop(){
// do something here
}

My problem is reading this code. I found a stock code for reading IR remotes, but I'm really struggling to adapt it to reading my LED.

/* Raw IR decoder sketch!
This sketch/program uses the Arduno and a PNA4602 to
decode IR received. This can be used to make a IR receiver
(by looking for a particular code)
or transmitter (by pulsing an IR LED at ~38KHz for the
durations detected
Code is public domain, check out www.ladyada.net and adafruit.com
for more tutorials!
*/
 
// We need to use the 'raw' pin reading methods
// because timing is very important here and the digitalRead()
// procedure is slower!
//uint8_t IRpin = 2;
// Digital pin #2 is the same as Pin D2 see
// http://arduino.cc/en/Hacking/PinMapping168 for the 'raw' pin mapping
#define IRpin_PIN PIND
#define IRpin 2
// for MEGA use these!
//#define IRpin_PIN PINE
//#define IRpin 4
 
// the maximum pulse we'll listen for - 65 milliseconds is a long time
#define MAXPULSE 65000
 
// what our timing resolution should be, larger is better
// as its more 'precise' - but too large and you wont get
// accurate timing
#define RESOLUTION 20
 
// we will store up to 100 pulse pairs (this is -a lot-)
uint16_t pulses[100][2]; // pair is high and low pulse
uint8_t currentpulse = 0; // index for pulses we're storing
 
void setup(void) {
  Serial.begin(9600);
  Serial.println("Ready to decode IR!");
}
 
void loop(void) {
  uint16_t highpulse, lowpulse; // temporary storage timing
  highpulse = lowpulse = 0; // start out with no pulse length
  
  
// while (digitalRead(IRpin)) { // this is too slow!
    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)) {
       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
     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};");
}

I want to write the code so that if a person walks through my sensor, i simply get an output that says "Broken" in the serial monitor. I am eventually going to time stamp every time the sensor is broken, but that is a different animal for another day. It is also probably worth noting that I am a mechanical engineering student, and this is my first big coding project. I'm working on learning the code, but sort of C++ illiterate right now. Any help would be appreciated.

atb9:
My problem is reading this code. I found a stock code for reading IR remotes, but I'm really struggling to adapt it to reading my LED.

You just connect the output of the TSOP decoder to an Arduino input, then you read the state of this input in your sketch. Such like:

void loop()
{
  Serial.println(digitalRead(TSOP_PIN));
  delay(50);
}

The Vishay TSOP38238 is a decoder that will change the state when the 38 kHz IR signal is broken or not.

So you do NOT have to read the signal with an 38 kHz frequency when using a TSOP decoder.
You just have to generate a 38 kHz IR signal with the IR LED and then read the TSOP decoder whether it is HIGH or LOW in times as you like.

Unfortunately the TSOP 38238 is only intended for IR remote operation and not for light barrier applications sending a continous 38 kHz signal. So the following may happen: You send continous 38 kHz IR signal, but the TSOP receiver from time to time (two seconds or so?) may show a short break while there is no signal break.

So for light barrier applications you better use TSOP decoders that are made for light barrier applications, like the Vishay TSOP4038. Please look up the datasheet details of your TSOP decoder for full details and whether it is suitable for light barrier application!

Of course you also can use other TSOP decoders, but if the signal output is not stable while the 38 kHz signal is stable, you need some low-pass software filtering to detect "real signal break" from "phantom signal break" due to using the wrong TSOP decoder in the circuit.