ryou sato / Mbed 2 deprecated PPA

Dependencies:   mbed

Committer:
ryousato
Date:
Fri Feb 19 09:37:34 2021 +0000
Revision:
0:5637e966d2f5
2021/2/19

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryousato 0:5637e966d2f5 1 //メインプログラム・UARTコマンド受信
ryousato 0:5637e966d2f5 2 #include "mbed.h"
ryousato 0:5637e966d2f5 3 #include <cstdio>
ryousato 0:5637e966d2f5 4 #include "ColorSensor.h"
ryousato 0:5637e966d2f5 5
ryousato 0:5637e966d2f5 6 #define SirialComSpeed 38400 //シリアル通信のBPS設定
ryousato 0:5637e966d2f5 7 #define I2Caddr 0x2A //I2Cのアドレス
ryousato 0:5637e966d2f5 8
ryousato 0:5637e966d2f5 9 RawSerial LedSerial(SERIAL_TX, SERIAL_RX); //シリアル通信
ryousato 0:5637e966d2f5 10 I2C ColorSensor(PB_9,PB_8); //カラーセンサーのI2C設定(sda,scl)
ryousato 0:5637e966d2f5 11
ryousato 0:5637e966d2f5 12 //積分時間設定
ryousato 0:5637e966d2f5 13 //積分時間のベースとなる時間
ryousato 0:5637e966d2f5 14 //ベース時間×マニュアルタイミング時間で積分時間が決まる
ryousato 0:5637e966d2f5 15 int BaseTimeSelect = 0x00; //ベース時間:0x00で175us,0x01で2.8ms,0x02で44.8ms,0x03で358.4ms
ryousato 0:5637e966d2f5 16 int ManualTime[2] = {0x01,0x1E}; //マニュアルタイミング時間の{上位2byte,下位2byte}:16進数
ryousato 0:5637e966d2f5 17 int waitTime = 300; //待ち時間、積分時間×4倍より長くする必要あり(ms)
ryousato 0:5637e966d2f5 18 //待ち時間が積分時間に対して短すぎる場合、正しい値が取れない
ryousato 0:5637e966d2f5 19 //※数字が変化しない場合は短すぎる可能性大
ryousato 0:5637e966d2f5 20
ryousato 0:5637e966d2f5 21 void CsMode::SensorMain()
ryousato 0:5637e966d2f5 22 {
ryousato 0:5637e966d2f5 23 //周波数設定
ryousato 0:5637e966d2f5 24 ColorSensor.frequency(100000);
ryousato 0:5637e966d2f5 25
ryousato 0:5637e966d2f5 26 //送受信用変数
ryousato 0:5637e966d2f5 27 char rcvData[8]= {0,0,0,0,0,0,0,0};
ryousato 0:5637e966d2f5 28 char sendData[2]= {0,0};
ryousato 0:5637e966d2f5 29
ryousato 0:5637e966d2f5 30 //アドレス設定
ryousato 0:5637e966d2f5 31 int addr = I2Caddr << 1; //送信用にI2Cのアドレスを上位に1bitシフトする
ryousato 0:5637e966d2f5 32
ryousato 0:5637e966d2f5 33 //アドレス(addr)に送信,コントロールバイトを指定(0x00),ADCリセット、
ryousato 0:5637e966d2f5 34 //スリープ解除+積分時間設定(0x80 | BaseTime)
ryousato 0:5637e966d2f5 35 sendData[0] = 0x00;
ryousato 0:5637e966d2f5 36 sendData[1] = 0x80 | BaseTimeSelect;
ryousato 0:5637e966d2f5 37 int tmpVal = ColorSensor.write(addr,sendData,2);
ryousato 0:5637e966d2f5 38
ryousato 0:5637e966d2f5 39 //カラーセンサーと通信できない場合はエラー終了
ryousato 0:5637e966d2f5 40 if (tmpVal!=0){
ryousato 0:5637e966d2f5 41 LedSerial.printf ("ColorSensor Communication Error!!!\r\n");
ryousato 0:5637e966d2f5 42 return;
ryousato 0:5637e966d2f5 43 }
ryousato 0:5637e966d2f5 44
ryousato 0:5637e966d2f5 45 //アドレス(addr)に送信,コントロールバイトを指定(0x00)
ryousato 0:5637e966d2f5 46 //マニュアルモード+積分時間設定(0x04 | BaseTime)
ryousato 0:5637e966d2f5 47 sendData[0] = 0x00;
ryousato 0:5637e966d2f5 48 sendData[1] = 0x04 | BaseTimeSelect;
ryousato 0:5637e966d2f5 49 ColorSensor.write(addr,sendData,2);
ryousato 0:5637e966d2f5 50
ryousato 0:5637e966d2f5 51 //アドレス(addr)に送信,コントロールバイトを指定(0x01),積分時間の上位2Byte
ryousato 0:5637e966d2f5 52 sendData[0] = 0x01;
ryousato 0:5637e966d2f5 53 sendData[1] = ManualTime[0];
ryousato 0:5637e966d2f5 54 ColorSensor.write(addr,sendData,2);
ryousato 0:5637e966d2f5 55
ryousato 0:5637e966d2f5 56 //アドレス(addr)に送信,コントロールバイトを指定(0x02),積分時間の下位2Byte
ryousato 0:5637e966d2f5 57 sendData[0] = 0x02;
ryousato 0:5637e966d2f5 58 sendData[1] = ManualTime[1];
ryousato 0:5637e966d2f5 59 ColorSensor.write(addr,sendData,2);
ryousato 0:5637e966d2f5 60
ryousato 0:5637e966d2f5 61 //待機
ryousato 0:5637e966d2f5 62 wait_ms(waitTime);
ryousato 0:5637e966d2f5 63
ryousato 0:5637e966d2f5 64 //アドレス(addr)に送信,出力データバイトを指定(0x03)
ryousato 0:5637e966d2f5 65 sendData[0] = 0x03;
ryousato 0:5637e966d2f5 66 ColorSensor.write(addr,sendData,1);
ryousato 0:5637e966d2f5 67
ryousato 0:5637e966d2f5 68 //デバイスに対し8Byteデータを要求
ryousato 0:5637e966d2f5 69 //データは 赤上位,赤下位,緑上位,緑下位,青上位,青下位,赤外上位,赤外下位の順
ryousato 0:5637e966d2f5 70 //rcvData配列に0から順に1Byteずつ格納されていく
ryousato 0:5637e966d2f5 71 ColorSensor.read(addr,rcvData,8);
ryousato 0:5637e966d2f5 72
ryousato 0:5637e966d2f5 73 //受信したデータを表示(1色につき2Byte)
ryousato 0:5637e966d2f5 74 LedSerial.printf ("R:%02x%02x,G:%02x%02x,B:%02x%02x,IR:%02x%02x\r\n",
ryousato 0:5637e966d2f5 75 rcvData[0],rcvData[1],rcvData[2],rcvData[3],rcvData[4],
ryousato 0:5637e966d2f5 76 rcvData[5],rcvData[6],rcvData[7]);
ryousato 0:5637e966d2f5 77
ryousato 0:5637e966d2f5 78 return;
ryousato 0:5637e966d2f5 79 }