8F328-U Signal Reverser
本帖最后由 eddiewwm 于 2019-4-18 16:15 编辑8F328-U Signal Reverser
/*
Signal Reverser (Use Interrupt pin2)
Date: 20190418
Rev: 01
By: Eddie
*/
#define SCLK 2 // Signal input pin
#define REVOUT 13 // Reversed output waveform as pin2 SCLK input
volatile unsigned long pulseWidthStart, pulseWidthEnd, pulseWidth, cycleStart, cycleTime;
void setup() {
pinMode(SCLK, INPUT_PULLUP);
pinMode(REVOUT, OUTPUT);
digitalWrite(REVOUT, LOW);
attachInterrupt(digitalPinToInterrupt(SCLK), ISRrisingEdge, RISING);
//Serial.begin(115200);
}
void loop() {
}
void reverseSignal() {
unsigned long pulseTime = 1.31*(3000 - pulseWidth); //reverse signal
//1.31 is used to compensate the delayMicroseconds() error of LGT8F328P chip
//Serial.println(pulseTime);
digitalWrite(REVOUT, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(REVOUT, LOW);
}
void ISRrisingEdge() {
pulseWidthStart = micros();
pulseWidth = 0;
cycleTime = pulseWidthStart - cycleStart;
//Serial.println(cycleTime);
cycleStart = pulseWidthStart;
attachInterrupt(digitalPinToInterrupt(SCLK), ISRfallingEdge, FALLING);
}
void ISRfallingEdge() {
pulseWidthEnd = micros();
pulseWidth = pulseWidthEnd - pulseWidthStart;
//Serial.println(pulseWidth);
reverseSignal();
attachInterrupt(digitalPinToInterrupt(SCLK), ISRrisingEdge, RISING);
}
页:
[1]