#define hzclk 7
|
|
#define hzbinary 6
|
|
#define sigLED 11
|
|
|
|
|
|
uint8_t hzclkval = 0;
|
|
uint8_t hzbinval[30];
|
|
uint8_t clkval = 0;
|
|
uint32_t milliscompare = 0;
|
|
uint8_t readyet = 0;
|
|
uint8_t x = 0;
|
|
uint16_t mainsfreq = 0;
|
|
|
|
struct {
|
|
unsigned int mainstwo : 14; //pesky binary wants a struct of
|
|
} bitfieldA; //only exact amt of bits
|
|
|
|
int temp = 0;
|
|
|
|
void setup() {
|
|
// put your setup code here, to run once:
|
|
|
|
|
|
pinMode(hzclk, INPUT);
|
|
pinMode(hzbinary, INPUT);
|
|
pinMode(sigLED, OUTPUT);
|
|
|
|
Serial.begin(115200);
|
|
}
|
|
|
|
void loop() {
|
|
|
|
|
|
if(digitalRead(hzbinary) == LOW){
|
|
//this handles one clk cycle each
|
|
//need to read 20 cycles
|
|
clkval = 0;
|
|
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
|
|
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
|
|
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
|
|
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
|
|
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
checkCLKandBIN();
|
|
//Serial.println(clkval); //outputs 19 or 20
|
|
ConvertArraytoBin();
|
|
mainsfreq = 0;
|
|
bitfieldA.mainstwo = 0;
|
|
}
|
|
delayMicroseconds(100); //must be lower than 1 millisecond, so mic
|
|
/*if hzbinary is low
|
|
*
|
|
* while clk high, do nothing
|
|
* clk++
|
|
* sample hzbinary
|
|
* while clk low do nothing
|
|
*/
|
|
/*
|
|
* //serial print is very slow, and breaks timing
|
|
* the below is not usable
|
|
* (DMA anyone? second processor anyone?)
|
|
Serial.println("hzbinval 1 - 20:");
|
|
for(x=0;x<21;x++){
|
|
Serial.println(hzbinval[x]);
|
|
}
|
|
Serial.print("\n\n\n\n");
|
|
*/
|
|
|
|
|
|
|
|
//sample on falling edge (middle of bit)
|
|
}
|
|
void checkCLKandBIN(void){
|
|
/*
|
|
* while clk high, do nothing
|
|
* clk++
|
|
* sample hzbinary
|
|
* while clk low do nothing
|
|
*/
|
|
//milliscompare = millis();
|
|
while((hzclkval = digitalRead(hzclk)) == HIGH){
|
|
if(readyet == 0){
|
|
hzbinval[clkval] = digitalRead(hzbinary);
|
|
clkval++;
|
|
readyet = 1;
|
|
}
|
|
delayMicroseconds(10);
|
|
}
|
|
while((hzclkval = digitalRead(hzclk)) == LOW){
|
|
delayMicroseconds(1);
|
|
readyet = 0;
|
|
}
|
|
//digitalWrite(sigLED, HIGH);
|
|
//delayMicroseconds(1);
|
|
//digitalWrite(sigLED, LOW);
|
|
|
|
|
|
//would be nice to add a picture to this source code (waveform)
|
|
//or oscope picture
|
|
//why isn't this possible?
|
|
|
|
}
|
|
|
|
void ConvertArraytoBin (void){
|
|
for(x=4;x<21;x++){
|
|
if(hzbinval[x] == 1){
|
|
bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
|
|
}
|
|
}
|
|
//Serial.println(bitfieldA.mainstwo,BIN);
|
|
|
|
temp = bitfieldA.mainstwo >> 1;
|
|
Serial.println(temp,DEC);
|
|
/*mainsfreq = mainsfreq >> 3;
|
|
mainsfreq = mainsfreq & 0b0111111111111;
|
|
Serial.println(mainsfreq,DEC);
|
|
//111011011101
|
|
//1011101101111
|
|
//111011011101
|
|
//11101101111*/
|
|
|
|
|
|
|
|
}
|
|
|
|
|