Shownet2017

Dependencies:   SakuraIO mbed

Committer:
misodengaku
Date:
Fri Jul 21 08:11:21 2017 +0000
Revision:
0:dba47693a3e3
release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
misodengaku 0:dba47693a3e3 1 #include "mbed.h"
misodengaku 0:dba47693a3e3 2 #include "SakuraIO.h"
misodengaku 0:dba47693a3e3 3
misodengaku 0:dba47693a3e3 4 #define SEND_INTERVAL 5 // 送信間隔 秒単位
misodengaku 0:dba47693a3e3 5
misodengaku 0:dba47693a3e3 6 PwmOut iine_led(PB_4);
misodengaku 0:dba47693a3e3 7 DigitalIn iine_button(PB_3);
misodengaku 0:dba47693a3e3 8 DigitalOut status_led(PB_5);
misodengaku 0:dba47693a3e3 9
misodengaku 0:dba47693a3e3 10 I2C i2c(PB_7, PB_6); // sda, scl
misodengaku 0:dba47693a3e3 11 SakuraIO_I2C sakuraio(i2c);
misodengaku 0:dba47693a3e3 12
misodengaku 0:dba47693a3e3 13 uint64_t counter = 0; // 死亡検知用カウンタ
misodengaku 0:dba47693a3e3 14 uint32_t iine_count = 0; // 押された回数
misodengaku 0:dba47693a3e3 15
misodengaku 0:dba47693a3e3 16 Ticker tick;
misodengaku 0:dba47693a3e3 17
misodengaku 0:dba47693a3e3 18 void timer()
misodengaku 0:dba47693a3e3 19 {
misodengaku 0:dba47693a3e3 20 // 1秒間隔で呼び出される
misodengaku 0:dba47693a3e3 21 static int sec_count = 1;
misodengaku 0:dba47693a3e3 22 __disable_irq();
misodengaku 0:dba47693a3e3 23
misodengaku 0:dba47693a3e3 24 if (sec_count >= SEND_INTERVAL)
misodengaku 0:dba47693a3e3 25 {
misodengaku 0:dba47693a3e3 26 // SEND_INTERVAL秒に1回iine_countを集計して方針
misodengaku 0:dba47693a3e3 27 sec_count = 0;
misodengaku 0:dba47693a3e3 28 sakuraio.clearTx();
misodengaku 0:dba47693a3e3 29 sakuraio.enqueueTx(0, counter);
misodengaku 0:dba47693a3e3 30 sakuraio.enqueueTx(1, iine_count);
misodengaku 0:dba47693a3e3 31 sakuraio.send();
misodengaku 0:dba47693a3e3 32 counter++;
misodengaku 0:dba47693a3e3 33 iine_count = 0;
misodengaku 0:dba47693a3e3 34 }
misodengaku 0:dba47693a3e3 35 sec_count++;
misodengaku 0:dba47693a3e3 36 __enable_irq();
misodengaku 0:dba47693a3e3 37 }
misodengaku 0:dba47693a3e3 38
misodengaku 0:dba47693a3e3 39 int main()
misodengaku 0:dba47693a3e3 40 {
misodengaku 0:dba47693a3e3 41 int led_counter = 0;
misodengaku 0:dba47693a3e3 42 iine_button.mode(PullUp);
misodengaku 0:dba47693a3e3 43
misodengaku 0:dba47693a3e3 44 // 通信モジュールリンクアップ待ち
misodengaku 0:dba47693a3e3 45 for (;;)
misodengaku 0:dba47693a3e3 46 {
misodengaku 0:dba47693a3e3 47 iine_led = 1;
misodengaku 0:dba47693a3e3 48
misodengaku 0:dba47693a3e3 49 for (float p = 0.0f; p < 1.0f; p += 0.01f)
misodengaku 0:dba47693a3e3 50 {
misodengaku 0:dba47693a3e3 51 iine_led = p;
misodengaku 0:dba47693a3e3 52 wait(0.01);
misodengaku 0:dba47693a3e3 53 }
misodengaku 0:dba47693a3e3 54 for (float p = 1.0f; p > 0.0f; p -= 0.01f)
misodengaku 0:dba47693a3e3 55 {
misodengaku 0:dba47693a3e3 56 iine_led = p;
misodengaku 0:dba47693a3e3 57 wait(0.01);
misodengaku 0:dba47693a3e3 58 }
misodengaku 0:dba47693a3e3 59 iine_led = 0;
misodengaku 0:dba47693a3e3 60 if ((sakuraio.getConnectionStatus() & 0x80) == 0x80)
misodengaku 0:dba47693a3e3 61 break;
misodengaku 0:dba47693a3e3 62 wait(1);
misodengaku 0:dba47693a3e3 63 }
misodengaku 0:dba47693a3e3 64
misodengaku 0:dba47693a3e3 65 // リンクアップしたよアピール
misodengaku 0:dba47693a3e3 66 iine_led = 1;
misodengaku 0:dba47693a3e3 67 wait(1);
misodengaku 0:dba47693a3e3 68 iine_led = 0;
misodengaku 0:dba47693a3e3 69 wait(1);
misodengaku 0:dba47693a3e3 70 iine_led = 1;
misodengaku 0:dba47693a3e3 71
misodengaku 0:dba47693a3e3 72 // 1秒間隔のタイマー作成
misodengaku 0:dba47693a3e3 73 tick.attach(&timer, 1);
misodengaku 0:dba47693a3e3 74
misodengaku 0:dba47693a3e3 75 for (;;)
misodengaku 0:dba47693a3e3 76 {
misodengaku 0:dba47693a3e3 77 if (iine_button == 0)
misodengaku 0:dba47693a3e3 78 {
misodengaku 0:dba47693a3e3 79 // ボタンが押されたらカウントアップしてから派手に点滅
misodengaku 0:dba47693a3e3 80 wait(0.5);
misodengaku 0:dba47693a3e3 81 while (iine_button == 0) // ボタンを放すまでブロック
misodengaku 0:dba47693a3e3 82 ;
misodengaku 0:dba47693a3e3 83 iine_count++; // いいね回数カウントアップ
misodengaku 0:dba47693a3e3 84
misodengaku 0:dba47693a3e3 85 // 以下派手に点滅
misodengaku 0:dba47693a3e3 86 iine_led = 1;
misodengaku 0:dba47693a3e3 87 for (int i = 0; i < 6; i++)
misodengaku 0:dba47693a3e3 88 {
misodengaku 0:dba47693a3e3 89 iine_led = !iine_led;
misodengaku 0:dba47693a3e3 90 wait(0.1);
misodengaku 0:dba47693a3e3 91 }
misodengaku 0:dba47693a3e3 92 iine_led = 1;
misodengaku 0:dba47693a3e3 93 }
misodengaku 0:dba47693a3e3 94 else
misodengaku 0:dba47693a3e3 95 {
misodengaku 0:dba47693a3e3 96 // ボタンが押されていなければ適当に点滅させておく
misodengaku 0:dba47693a3e3 97 if (led_counter < 100)
misodengaku 0:dba47693a3e3 98 iine_led = 0;
misodengaku 0:dba47693a3e3 99 else
misodengaku 0:dba47693a3e3 100 iine_led = 1;
misodengaku 0:dba47693a3e3 101
misodengaku 0:dba47693a3e3 102 if (led_counter > 1100)
misodengaku 0:dba47693a3e3 103 led_counter = 0;
misodengaku 0:dba47693a3e3 104 else
misodengaku 0:dba47693a3e3 105 led_counter++;
misodengaku 0:dba47693a3e3 106 wait(0.1);
misodengaku 0:dba47693a3e3 107 }
misodengaku 0:dba47693a3e3 108 }
misodengaku 0:dba47693a3e3 109 }