Atsumi Toda
/
Auto_pilot_MUX
ドローン用計測制御基板の作り方 vol.1 ハードウェア編 p.30掲載 マルチプレクサによるサーボモータへの信号切り替え
main.cpp
- Committer:
- Joeatsumi
- Date:
- 2019-12-30
- Revision:
- 0:00eb873ca4c4
File content as of revision 0:00eb873ca4c4:
//================================================== //Manual and Auto // //MPU board: mbed LPC1768 //Multiplexer TC74HC157AP //2019/10/13 A.Toda //================================================== #include "mbed.h" //================================================== #define THRESHOLD_PWM 0.0015 #define SERVO_PERIOD 0.020 //================================================== //Port Setting InterruptIn reading_port(p18); DigitalOut mux_switch(p19); PwmOut ELE(p21); Serial pc(USBTX, USBRX); //UART //================================================== //Timer valiables //================================================== Timer ch_time;//timer for calculate pulse width double measured_pre_pulse=0.0; double measured_pulse=0.0; double pulse_width_ele; //================================================= //Functions for rising and falind edge interrution //================================================= //rise edge void rising_edge(){ ch_time.reset();//reset timer counter measured_pre_pulse=ch_time.read(); } //falling edge void falling_edge(){ measured_pre_pulse=(ch_time.read()-measured_pre_pulse); pc.printf("The pulse width=%f\r\n",measured_pre_pulse); if(measured_pre_pulse>THRESHOLD_PWM){ mux_switch=1; }else{ mux_switch=0; } } //================================================== //Main //================================================== int main() { //UART initialization pc.baud(115200); //Logging starts pc.printf("Reading starts."); //define servo period ELE.period(SERVO_PERIOD); // servo requires a 20ms period pulse_width_ele=0.001; //timer starts ch_time.start(); //declare interrupitons reading_port.rise(rising_edge); reading_port.fall(falling_edge); mux_switch=0; //while while(1) { pulse_width_ele=0.0015; wait(0.05); }//while ends }//main ends