aaaaaa

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }