hal/arduino/ArduinoTellstickDuo/ArduinoTellstickDuo.ino
Daniel Collin 1c23a7c360 Added oregon v2.1 support to ArduinoTellstick along with some code cleanup
Former-commit-id: d05ee71fa4f2f91afd6452e894385bbcd7020917
2016-01-29 14:14:21 +01:00

72 lines
1.9 KiB
C++

#include "usart.h"
#include "rf.h"
#include "buffer.h"
#include "config.h"
/*
* Timer2 interrupt in 16kHz. Samples the RF Rx data pin
*/
ISR(TIMER2_COMPA_vect) {
if ( !IS_RADIO_RECIEVER_ON() ) { //if no Radio Rx should be performed
return;
}
uint8_t bit = RX_PIN_READ();
//will store "lows" on even buffer addresses and "highs" on odd buffer addresses
if ( ( ((uintptr_t)bufferWriteP) & 0x1 ) != bit ) { //compare the bit and the buffer pointer address. true if one is odd and one is even.
//step the buffer pointer
if ( bufferWriteP+1 > RF_rxBufferEndP ) {
*RF_rxBufferStartP = 1; //reset the next data point before going there
bufferWriteP = RF_rxBufferStartP;
} else {
*(bufferWriteP+1) = 1; //reset the next data point before going there
++bufferWriteP;
}
} else {
if ( *bufferWriteP < 255 ) { //Do not step the value if it already is 255 (max value)
++(*bufferWriteP); //step the buffer value
}
}
};//end timer2 interrupt
void setup() {
Serial.begin(9600);
setupPins();
//setup timer2 interrupt at 16kHz for RF sampling
cli(); //stop interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
OCR2A = 124; // = ( (16000000Hz) / (16000Hz*8prescaler) ) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS21); // Set CS21 bit for 8 prescaler
TIMSK2 |= (1 << OCIE2A); // enable timer compare interrupt
sei(); //allow interrupts
//reset buffer just to be sure
for (uint8_t* p = RF_rxBufferStartP; p <= RF_rxBufferEndP; ++p) {
*p = 0;
}
Serial.println(F("+V2"));
ACTIVATE_RADIO_RECEIVER();
};//end setup
void loop() {
//Receive and execute command over serial
parseSerialForCommand();
//Receive signal over air and send it over serial
parseRadioRXBuffer();
};//end loop