aaaaaa

Dependencies:   mbed

Committer:
alaif
Date:
Tue Nov 27 07:21:28 2018 +0000
Revision:
0:cfd72179902b
aaaaaaa

Who changed what in which revision?

UserRevisionLine numberNew 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 }