Atsumi Toda
/
twe_lite_transmit
twe-liteを使った送信プログラム。透過モードに非ず。
main.cpp@0:ec602a5f600c, 2018-02-18 (annotated)
- Committer:
- Joeatsumi
- Date:
- Sun Feb 18 23:28:42 2018 +0000
- Revision:
- 0:ec602a5f600c
twe-lite?????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Joeatsumi | 0:ec602a5f600c | 1 | #include "mbed.h" |
Joeatsumi | 0:ec602a5f600c | 2 | //成功バージョン |
Joeatsumi | 0:ec602a5f600c | 3 | Serial twe(p9, p10); // tx, rx |
Joeatsumi | 0:ec602a5f600c | 4 | Serial pc(USBTX,USBRX); |
Joeatsumi | 0:ec602a5f600c | 5 | DigitalOut myled(LED1); |
Joeatsumi | 0:ec602a5f600c | 6 | |
Joeatsumi | 0:ec602a5f600c | 7 | #define DATA_SIZE 11 |
Joeatsumi | 0:ec602a5f600c | 8 | |
Joeatsumi | 0:ec602a5f600c | 9 | InterruptIn rpmcount(p17); //回転数用のフォトインタラプタ読み取り |
Joeatsumi | 0:ec602a5f600c | 10 | |
Joeatsumi | 0:ec602a5f600c | 11 | int rpm=0; |
Joeatsumi | 0:ec602a5f600c | 12 | int rpmcounter = 0; |
Joeatsumi | 0:ec602a5f600c | 13 | double time_s = 0,time_ms=0; |
Joeatsumi | 0:ec602a5f600c | 14 | Ticker ticker;//updateのタイマー割り込み |
Joeatsumi | 0:ec602a5f600c | 15 | |
Joeatsumi | 0:ec602a5f600c | 16 | //int rpm=60; |
Joeatsumi | 0:ec602a5f600c | 17 | struct{ |
Joeatsumi | 0:ec602a5f600c | 18 | char highbyte; |
Joeatsumi | 0:ec602a5f600c | 19 | char lowbyte; |
Joeatsumi | 0:ec602a5f600c | 20 | short intdat; |
Joeatsumi | 0:ec602a5f600c | 21 | }data; |
Joeatsumi | 0:ec602a5f600c | 22 | |
Joeatsumi | 0:ec602a5f600c | 23 | char s[11] ;//this can take up to 10 byte characters |
Joeatsumi | 0:ec602a5f600c | 24 | |
Joeatsumi | 0:ec602a5f600c | 25 | Timer t,t1; |
Joeatsumi | 0:ec602a5f600c | 26 | |
Joeatsumi | 0:ec602a5f600c | 27 | void rpm_c(); |
Joeatsumi | 0:ec602a5f600c | 28 | void rpm_f(); |
Joeatsumi | 0:ec602a5f600c | 29 | void update(); |
Joeatsumi | 0:ec602a5f600c | 30 | void rpm_t(); |
Joeatsumi | 0:ec602a5f600c | 31 | |
Joeatsumi | 0:ec602a5f600c | 32 | void rpm_c() //回転数のフォトインタラプタ |
Joeatsumi | 0:ec602a5f600c | 33 | { |
Joeatsumi | 0:ec602a5f600c | 34 | rpmcounter++; |
Joeatsumi | 0:ec602a5f600c | 35 | } |
Joeatsumi | 0:ec602a5f600c | 36 | |
Joeatsumi | 0:ec602a5f600c | 37 | void rpm_f() //回転数計測 |
Joeatsumi | 0:ec602a5f600c | 38 | { |
Joeatsumi | 0:ec602a5f600c | 39 | |
Joeatsumi | 0:ec602a5f600c | 40 | rpm = (int)(rpmcounter * 60000/time_ms/48); |
Joeatsumi | 0:ec602a5f600c | 41 | |
Joeatsumi | 0:ec602a5f600c | 42 | rpmcounter = 0; |
Joeatsumi | 0:ec602a5f600c | 43 | } |
Joeatsumi | 0:ec602a5f600c | 44 | |
Joeatsumi | 0:ec602a5f600c | 45 | |
Joeatsumi | 0:ec602a5f600c | 46 | void rpm_t(){ |
Joeatsumi | 0:ec602a5f600c | 47 | /*:は送信時に必要なヘッダー。78は相手のID(0x78)。01は送信コマンドとして必要。 |
Joeatsumi | 0:ec602a5f600c | 48 | 39は任意の値。Xはチェックサムの省略形。 \r\nは改行コマンド*/ |
Joeatsumi | 0:ec602a5f600c | 49 | rpm+=1000; |
Joeatsumi | 0:ec602a5f600c | 50 | sprintf(s, ":7801%dX\r\n",rpm); |
Joeatsumi | 0:ec602a5f600c | 51 | /*配列sにまとめて代入。*/ |
Joeatsumi | 0:ec602a5f600c | 52 | for (int i = 0 ; i < DATA_SIZE ; i++){ |
Joeatsumi | 0:ec602a5f600c | 53 | twe.putc(s[i]); |
Joeatsumi | 0:ec602a5f600c | 54 | } |
Joeatsumi | 0:ec602a5f600c | 55 | /*DATESIZEはこの場合11*/ |
Joeatsumi | 0:ec602a5f600c | 56 | rpm=0; |
Joeatsumi | 0:ec602a5f600c | 57 | |
Joeatsumi | 0:ec602a5f600c | 58 | } |
Joeatsumi | 0:ec602a5f600c | 59 | |
Joeatsumi | 0:ec602a5f600c | 60 | void update(){ |
Joeatsumi | 0:ec602a5f600c | 61 | |
Joeatsumi | 0:ec602a5f600c | 62 | |
Joeatsumi | 0:ec602a5f600c | 63 | time_ms = t1.read_ms();//周期時間読み取り |
Joeatsumi | 0:ec602a5f600c | 64 | t1.stop(); |
Joeatsumi | 0:ec602a5f600c | 65 | t1.reset(); |
Joeatsumi | 0:ec602a5f600c | 66 | rpm_f(); |
Joeatsumi | 0:ec602a5f600c | 67 | rpm_t(); |
Joeatsumi | 0:ec602a5f600c | 68 | t1.start(); |
Joeatsumi | 0:ec602a5f600c | 69 | |
Joeatsumi | 0:ec602a5f600c | 70 | myled = !myled; |
Joeatsumi | 0:ec602a5f600c | 71 | |
Joeatsumi | 0:ec602a5f600c | 72 | } |
Joeatsumi | 0:ec602a5f600c | 73 | |
Joeatsumi | 0:ec602a5f600c | 74 | int main() { |
Joeatsumi | 0:ec602a5f600c | 75 | twe.baud(115200); |
Joeatsumi | 0:ec602a5f600c | 76 | pc.baud(115200); |
Joeatsumi | 0:ec602a5f600c | 77 | t1.start(); |
Joeatsumi | 0:ec602a5f600c | 78 | |
Joeatsumi | 0:ec602a5f600c | 79 | //=============-interruptInの信号の読み取り(回転数計)==============// |
Joeatsumi | 0:ec602a5f600c | 80 | rpmcount.rise(&rpm_c); |
Joeatsumi | 0:ec602a5f600c | 81 | //===============================================================================// |
Joeatsumi | 0:ec602a5f600c | 82 | |
Joeatsumi | 0:ec602a5f600c | 83 | ticker.attach(&update,1);//1秒ごとに更新関数の発動 |
Joeatsumi | 0:ec602a5f600c | 84 | |
Joeatsumi | 0:ec602a5f600c | 85 | } |
Joeatsumi | 0:ec602a5f600c | 86 | |
Joeatsumi | 0:ec602a5f600c | 87 | |
Joeatsumi | 0:ec602a5f600c | 88 | |
Joeatsumi | 0:ec602a5f600c | 89 | |
Joeatsumi | 0:ec602a5f600c | 90 |