Just for curiosity i tried to read byte by byte rather than nibble by nibble but it does not read the data at all. Can anybody indicate where i am doing wrong.
const int CLOCK_PIN = 2;
const int DATA_PIN = 4;
const int PACKET_BITS = 1024;
const int PREAMBLE_LEN = 3;
const int DATA_LEN = ((PACKET_BITS / 8) - PREAMBLE_LEN);
enum {
PRE_0, PRE_1, PRE_2, PRE_3, PRE_4, PRE_5, DATA
} states;
byte preamble [] = {0xCA,0xAC,0x1F};
char hexAsciiVals[] = "0123456789ABCDEF0123456789ABCDEF";
byte state = PRE_0;
byte nibble;
int nibble_count = 0;
byte firstval;
//const char header = "CAAC1F";
void setup() {
pinMode(CLOCK_PIN, INPUT);
pinMode(DATA_PIN, INPUT);
Serial.begin(57600);
}
void loop() {
nibble = getNibble();
//nibble_count++;
switch (state) {
case PRE_0:
// if (nibble_count > PREAMBLE_LEN + DATA_LEN) {
// // we've read 32 bytes and still not found a match
// // for the preamble so skip a clock pulse
// while (digitalRead(CLOCK_PIN) == LOW);
// while (digitalRead(CLOCK_PIN) == HIGH);
// nibble_count = 0;
// } else
// {
// firstval = 12;
// Serial.write(hexAsciiVals[firstval]);
state = (nibble == preamble[0]) ? PRE_1 : PRE_0;
// Serial.write(hexAsciiVals[nibble]);
// }
break;
case PRE_1:
// Serial.write (hexAsciiVals[firstval]);
// Serial.print(hexAsciiVals[12]);
// Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[1]) ? PRE_2 : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
case PRE_2:
// Serial.print(hexAsciiVals[nibble]);
state = (nibble == preamble[2]) ? DATA : PRE_0;
//Serial.write (hexAsciiVals[nibble]);
break;
// case PRE_3:
// // Serial.print(hexAsciiVals[nibble]);
// state = (nibble == preamble[3]) ? PRE_4 : PRE_0;
// // Serial.write (hexAsciiVals[nibble]);
// break;
//
// case PRE_4:
// // Serial.print(hexAsciiVals[nibble]);
// state = (nibble == preamble[4]) ? PRE_5 : PRE_0;
// // Serial.write (hexAsciiVals[nibble]);
// break;
//
// case PRE_5:
// // Serial.print(hexAsciiVals[nibble]);
// // Serial.print(202, HEX);
// // Serial.print(172, HEX);
// // Serial.println();
// state = (nibble == preamble[5]) ? DATA : PRE_0;
// Serial.print("$");
// // nibble_count = 0;
// break;
case DATA:
// Serial.print("CAAC1F");
Serial.print(nibble, HEX);
if (nibble_count == DATA_LEN) {
// all done, start again
state = PRE_0;
nibble_count = 0;
// Serial.print("\n");
// Serial.print(hexAsciiVals[12]);
}
nibble_count++;
//Serial.println();
break;
}
// delay(10);
}
byte getNibble() {
byte val = 0;
for (byte bit_count = 0; bit_count < 8; bit_count++) {
while (digitalRead(CLOCK_PIN) == HIGH);
while (digitalRead(CLOCK_PIN) == LOW);
val <<= 1;
val |= digitalRead(DATA_PIN);
}
return (val &= 0xFF);
}