twe-liteを使った送信プログラム。透過モードに非ず。

Dependencies:   mbed

Committer:
Joeatsumi
Date:
Sun Feb 18 23:28:42 2018 +0000
Revision:
0:ec602a5f600c
twe-lite?????????????????????

Who changed what in which revision?

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