LEDの点滅や、ブザーのOn,Offの周期測定をおこなう。 搬送波の周期は測定できない(10ms周期以上のON,OFF)
Dependencies: AQM0802A DigitalSw mbed
Revision 1:d4291fd3a94c, committed 2017-05-20
- Comitter:
- suupen
- Date:
- Sat May 20 12:23:42 2017 +0000
- Parent:
- 0:c5384fa0fc28
- Child:
- 2:f22110fb3925
- Commit message:
- ????????????????????????????????;
Changed in this revision
--- a/main.cpp Sat May 20 01:33:48 2017 +0000 +++ b/main.cpp Sat May 20 12:23:42 2017 +0000 @@ -1,78 +1,28 @@ #include "mbed.h" -#include <AQM0802A.h> #include "testLed.h" +#include "priodMsurement.h" -I2C i2c(p28, p27); -AQM0802A lcd(i2c); // if 5.0v supply, (i2c, false); //DigitalOut myled1(LED1); DigitalOut myled2(LED2); -DigitalOut myled3(LED3); -DigitalOut myled4(LED4); - -Timer timer; -uint16_t onTime; -uint16_t offTime; +//DigitalOut myled3(LED3); +//DigitalOut myled4(LED4); -Ticker tickerLed1; -Ticker tickerLed2; +DigitalIn demoLedSw(p20, PullUp); -InterruptIn lightIn(p16); - -void ledOn(void) -{ -// myled4 = 1; - offTime = timer.read_ms(); - timer.reset(); - lcd.cls(); - lcd.printf("on %d off %d",onTime, offTime); +int main() +{ + testLedInitalize(); + priodMsurementInitalize(); - } -void ledOff(void) -{ - // myled4 = 0; + testLedMain(true); - onTime = timer.read_ms(); - timer.reset(); - lcd.cls(); - lcd.printf("on %d off %d",onTime, offTime); - + while(1) { + testLedMain(!demoLedSw); + priodMsurementMain(); } - -void outputLed1(void) -{ -// myled1 = !myled1; - } - -void outputLed2(void) -{ - myled4 = !myled4; - } - -int main() { - testLedInitalize(); - - lcd.cls(); -// lcd.printf("iter: \r\n"); - lcd.printf("test"); - timer.start(); - - lightIn.rise(&ledOn); - lightIn.fall(&ledOff); - - tickerLed1.attach(&outputLed1, 0.1); - tickerLed2.attach(&outputLed2, 0.5); - - - testLedMain(true); - - while(1) { - testLedMain(false); - // myled3 =lightIn; - - } }
--- a/priodMsurement.cpp Sat May 20 01:33:48 2017 +0000 +++ b/priodMsurement.cpp Sat May 20 12:23:42 2017 +0000 @@ -0,0 +1,91 @@ +#include "mbed.h" +#include <AQM0802A.h> +#include "priodMsurement.h" + +I2C i2c(p28, p27); +AQM0802A lcd(i2c); // if 5.0v supply, (i2c, false); + +Timer timer; +uint16_t onTime; +uint16_t offTime; +int8_t beforeLevel; // 0:Lo 1:Hi -1:timeOut(non Pluse) + +InterruptIn lightIn(p22); +DigitalOut monitor(LED4); + +void priodMsurementMain(void) +{ + if((timer.read_ms() > Z_nonSignalTime) && (beforeLevel != -1)){ + printf("end \r\n"); + timer.reset(); + beforeLevel = -1; + } +} + +void ledOn(void) +{ + monitor = 1; + + switch(beforeLevel) { + case 0: + offTime = timer.read_ms(); + timer.reset(); + + printf(" off = %d\r\n\r\n",offTime); + + lcd.cls(); + lcd.printf("on %d off %d",onTime, offTime); + + break; + case -1: + case 1: + default: + timer.reset(); + printf("start: off to on\r\n"); + break; + + } + beforeLevel = 1; + +} + +void ledOff(void) +{ + monitor = 0; + + switch(beforeLevel) { + case 1: + onTime = timer.read_ms(); + if(onTime > Z_offNonDetectTime){ + timer.reset(); + printf(" on = %d\r\n",onTime); + /* + lcd.cls(); + lcd.printf("on %d off %d",onTime, offTime); + */ + } + else{ + // noise or dinamic output have a chancel. + } + break; + case -1: + case 0: + default: + timer.reset(); + printf("start: on to off\r\n"); + break; + + } + beforeLevel = 0; + + + +} + +void priodMsurementInitalize(void) +{ + timer.start(); + + lightIn.rise(&ledOn); + lightIn.fall(&ledOff); +}
--- a/priodMsurement.h Sat May 20 01:33:48 2017 +0000 +++ b/priodMsurement.h Sat May 20 12:23:42 2017 +0000 @@ -0,0 +1,13 @@ +#ifndef PRIODMSUREMENT_H +#define PRIODMSUREMENT_H + +#define Z_nonSignalTime (5000) // (1/1 [ms]/count) +#define Z_offNonDetectTime (10) // (1/1 [ms]/count) + +/** Initalize + */ +void priodMsurementInitalize(void); +void priodMsurementMain(void); + + +#endif // PRIODMSUREMENT_H \ No newline at end of file
--- a/testLed.cpp Sat May 20 01:33:48 2017 +0000 +++ b/testLed.cpp Sat May 20 12:23:42 2017 +0000 @@ -1,125 +1,96 @@ #include "mbed.h" #include "testLed.h" +void tick(void); +Ticker ticker; +DigitalOut myled3(LED3); + DigitalOut testLed(LED1); Timer timerTestLed; bool brinkRequest = false; + + void testLedInitalize(void) { timerTestLed.start(); timerTestLed.reset(); brinkRequest = false; + ticker.attach_us(&tick, 1000); } uint8_t brinkPosition = 0; // brinkPattern[][ここ] uint16_t brinkPriod = 0; // 点滅時間 1/1 ([ms]/count) +bool testLedLevel = false; // false:Off true:On uint32_t brinkPattern[][2] = { - {1,10}, - {0,10}, - {1,100}, {0,100}, - - {1,10}, - {0,10}, - - {1,100}, - {0,100}, - - {1,10}, - {0,10}, - + + {1,500}, + {0,500}, + {1,100}, {0,100}, - - {1,10}, - {0,10}, - + + {1,500}, + {0,500}, + {1,100}, {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + + {1,500}, + {0,500}, + {1,100}, {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + {1,100}, {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + + {1,100}, + {0,500}, + {1,100}, - {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + {0,500}, + {1,100}, - {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + {0,500}, + {1,100}, - {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + {0,500}, + {1,100}, - {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - - {1,100}, - {0,100}, - - {1,10}, - {0,10}, - - {1,200}, - {0,300}, - + {0,500}, + + {1,500}, + {0,500}, + + + {2,0} // end }; +void tick(void) +{ + myled3 = !myled3; + if(testLedLevel == true) { + testLed = !testLed; + } else { + testLed = 0; + } +} + + + bool testLedMain(bool request) { if(brinkRequest == false) { if(request == true) { brinkRequest = true; brinkPosition = 0; - testLed = brinkPattern[brinkPosition][0]; + testLedLevel = brinkPattern[brinkPosition][0]; brinkPriod = brinkPattern[brinkPosition][1]; timerTestLed.reset(); @@ -130,12 +101,12 @@ if(timerTestLed.read_ms() > brinkPriod) { brinkPosition++; if(brinkPattern[brinkPosition][0] == 2) { - testLed = 0; + testLedLevel = 0; brinkRequest = false; } else { - testLed = brinkPattern[brinkPosition][0]; + testLedLevel = brinkPattern[brinkPosition][0]; brinkPriod = brinkPattern[brinkPosition][1]; - timerTestLed.reset(); + timerTestLed.reset(); } }