Fuminori ALAI
/
mbed_blinky_LPC1114FN28
aaaaaa
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 Ticker tick10ms; 00004 DigitalIn sw(dp26); 00005 PwmOut pwmled(dp24); 00006 DigitalOut myled(LED1); 00007 00008 Serial pc(dp16, dp15); 00009 00010 static uint8_t sw_state = 0; 00011 static bool sw_on = 0; 00012 00013 /* 10ms間隔で呼び出すハンドラ */ 00014 void tick10ms_proc(void) 00015 { 00016 /* 直近8回のスイッチON/OFF状態を保持 */ 00017 sw_state <<= 1; 00018 sw_state &= 0xfe; 00019 sw_state |= (sw & 0x01); 00020 00021 switch (sw_state) { 00022 case 0x00: /* 8回連続OFF */ 00023 sw_on = 0; 00024 break; 00025 case 0xff: /* 8回連続ON */ 00026 sw_on = 1; 00027 break; 00028 } 00029 } 00030 00031 int main() { 00032 uint8_t led_lv = 0; 00033 uint8_t prev_sw = 0; 00034 uint8_t sw_val = 0; 00035 00036 myled = 0; 00037 00038 pc.baud(9600); 00039 pc.printf("Start.\r\n"); 00040 00041 /* 10ms間隔のハンドラを登録 */ 00042 tick10ms.attach_us(tick10ms_proc, 10000); 00043 00044 /* PWMの周波数を10kHzに設定 */ 00045 pwmled.period(0.01); 00046 pwmled = 0.0; 00047 00048 while(1) { 00049 /* スイッチ状態を読み出し */ 00050 __disable_irq(); 00051 sw_val = sw_on; 00052 __enable_irq(); 00053 00054 /* スイッチON→OFFに変化 */ 00055 if ((prev_sw == 1) && (sw_val == 0)) { 00056 led_lv = (led_lv + 1) % (5 + 1); //LED出力を6段階に変化させる 00057 pwmled = (float)led_lv * 0.2; 00058 00059 pc.printf("PUSHED: led_lv=%d\r\n", led_lv); 00060 } 00061 prev_sw = sw_val; 00062 } 00063 }
Generated on Fri Jul 15 2022 02:10:13 by 1.7.2