Fuminori ALAI
/
mbed_blinky_LPC1114FN28
aaaaaa
main.cpp@0:cfd72179902b, 2018-11-27 (annotated)
- Committer:
- alaif
- Date:
- Tue Nov 27 07:21:28 2018 +0000
- Revision:
- 0:cfd72179902b
aaaaaaa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alaif | 0:cfd72179902b | 1 | #include "mbed.h" |
alaif | 0:cfd72179902b | 2 | |
alaif | 0:cfd72179902b | 3 | Ticker tick10ms; |
alaif | 0:cfd72179902b | 4 | DigitalIn sw(dp26); |
alaif | 0:cfd72179902b | 5 | PwmOut pwmled(dp24); |
alaif | 0:cfd72179902b | 6 | DigitalOut myled(LED1); |
alaif | 0:cfd72179902b | 7 | |
alaif | 0:cfd72179902b | 8 | Serial pc(dp16, dp15); |
alaif | 0:cfd72179902b | 9 | |
alaif | 0:cfd72179902b | 10 | static uint8_t sw_state = 0; |
alaif | 0:cfd72179902b | 11 | static bool sw_on = 0; |
alaif | 0:cfd72179902b | 12 | |
alaif | 0:cfd72179902b | 13 | /* 10ms間隔で呼び出すハンドラ */ |
alaif | 0:cfd72179902b | 14 | void tick10ms_proc(void) |
alaif | 0:cfd72179902b | 15 | { |
alaif | 0:cfd72179902b | 16 | /* 直近8回のスイッチON/OFF状態を保持 */ |
alaif | 0:cfd72179902b | 17 | sw_state <<= 1; |
alaif | 0:cfd72179902b | 18 | sw_state &= 0xfe; |
alaif | 0:cfd72179902b | 19 | sw_state |= (sw & 0x01); |
alaif | 0:cfd72179902b | 20 | |
alaif | 0:cfd72179902b | 21 | switch (sw_state) { |
alaif | 0:cfd72179902b | 22 | case 0x00: /* 8回連続OFF */ |
alaif | 0:cfd72179902b | 23 | sw_on = 0; |
alaif | 0:cfd72179902b | 24 | break; |
alaif | 0:cfd72179902b | 25 | case 0xff: /* 8回連続ON */ |
alaif | 0:cfd72179902b | 26 | sw_on = 1; |
alaif | 0:cfd72179902b | 27 | break; |
alaif | 0:cfd72179902b | 28 | } |
alaif | 0:cfd72179902b | 29 | } |
alaif | 0:cfd72179902b | 30 | |
alaif | 0:cfd72179902b | 31 | int main() { |
alaif | 0:cfd72179902b | 32 | uint8_t led_lv = 0; |
alaif | 0:cfd72179902b | 33 | uint8_t prev_sw = 0; |
alaif | 0:cfd72179902b | 34 | uint8_t sw_val = 0; |
alaif | 0:cfd72179902b | 35 | |
alaif | 0:cfd72179902b | 36 | myled = 0; |
alaif | 0:cfd72179902b | 37 | |
alaif | 0:cfd72179902b | 38 | pc.baud(9600); |
alaif | 0:cfd72179902b | 39 | pc.printf("Start.\r\n"); |
alaif | 0:cfd72179902b | 40 | |
alaif | 0:cfd72179902b | 41 | /* 10ms間隔のハンドラを登録 */ |
alaif | 0:cfd72179902b | 42 | tick10ms.attach_us(tick10ms_proc, 10000); |
alaif | 0:cfd72179902b | 43 | |
alaif | 0:cfd72179902b | 44 | /* PWMの周波数を10kHzに設定 */ |
alaif | 0:cfd72179902b | 45 | pwmled.period(0.01); |
alaif | 0:cfd72179902b | 46 | pwmled = 0.0; |
alaif | 0:cfd72179902b | 47 | |
alaif | 0:cfd72179902b | 48 | while(1) { |
alaif | 0:cfd72179902b | 49 | /* スイッチ状態を読み出し */ |
alaif | 0:cfd72179902b | 50 | __disable_irq(); |
alaif | 0:cfd72179902b | 51 | sw_val = sw_on; |
alaif | 0:cfd72179902b | 52 | __enable_irq(); |
alaif | 0:cfd72179902b | 53 | |
alaif | 0:cfd72179902b | 54 | /* スイッチON→OFFに変化 */ |
alaif | 0:cfd72179902b | 55 | if ((prev_sw == 1) && (sw_val == 0)) { |
alaif | 0:cfd72179902b | 56 | led_lv = (led_lv + 1) % (5 + 1); //LED出力を6段階に変化させる |
alaif | 0:cfd72179902b | 57 | pwmled = (float)led_lv * 0.2; |
alaif | 0:cfd72179902b | 58 | |
alaif | 0:cfd72179902b | 59 | pc.printf("PUSHED: led_lv=%d\r\n", led_lv); |
alaif | 0:cfd72179902b | 60 | } |
alaif | 0:cfd72179902b | 61 | prev_sw = sw_val; |
alaif | 0:cfd72179902b | 62 | } |
alaif | 0:cfd72179902b | 63 | } |