|
本帖最后由 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);
- }
复制代码 |
|