ブログ用

Dependencies:   SB1602E X_NUCLEO_IKS01A1-f255a2c75ecb mbed

角度と温度、湿度をLCDに表示

基本的にブログ用のコードで https://goo.gl/EMTAQB に簡単な説明がある。 ここでは詳細について書いておく。

必要機材

  • NUCLEO F401RE
  • X-NUCLEO-IKS01A1
  • AQM0802A-RN-GBW(秋月コード:M-09109)

つなぎ方

/media/uploads/bean1310/p7102948.jpg LCDの電源(赤いコード)とタクトスイッチにつながる(抵抗は必要ないか)白いコードをX-NUCLEO-IKS01A1のCN8の3V3のピンにつなぐ。LCDの青いコードをCN5のD15, 黄色いコードをD14に。緑のコードをCN6のGNDにそれぞれ接続。
タクトスイッチに繋がっている黒いコードはCN5のD10に接続。
それ以外は外部電源でプログラムに必須というわけではないから説明は省く。

Committer:
bean1310
Date:
Sun Jul 10 06:47:10 2016 +0000
Revision:
1:24590aa69d29
Parent:
0:5b16bcf60d96
???? ver1.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bean1310 0:5b16bcf60d96 1 #include "mbed.h"
bean1310 0:5b16bcf60d96 2 #include "x_nucleo_iks01a1.h"
bean1310 0:5b16bcf60d96 3 #include "SB1602E.h"
bean1310 0:5b16bcf60d96 4 #include <math.h>
bean1310 0:5b16bcf60d96 5
bean1310 0:5b16bcf60d96 6 #define xMax 979
bean1310 0:5b16bcf60d96 7 #define xMin -1034
bean1310 0:5b16bcf60d96 8 #define yMax 996
bean1310 0:5b16bcf60d96 9 #define yMin -1001
bean1310 0:5b16bcf60d96 10
bean1310 0:5b16bcf60d96 11 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
bean1310 0:5b16bcf60d96 12 static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer();
bean1310 0:5b16bcf60d96 13 static TempSensor *temp_sensor = mems_expansion_board->ht_sensor;
bean1310 0:5b16bcf60d96 14 static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
bean1310 0:5b16bcf60d96 15 SB1602E lcd(D14, D15);
bean1310 0:5b16bcf60d96 16 DigitalIn angSet(D10, PullDown);
bean1310 0:5b16bcf60d96 17
bean1310 0:5b16bcf60d96 18 int angle(int max, int min, int32_t now);//角度をint型で返す。
bean1310 0:5b16bcf60d96 19 void lcdSet(); //lcdの液晶設定をクリアにする。
bean1310 0:5b16bcf60d96 20 void accelerometerMode(); //angle関数を含み、lcdに表示する関数
bean1310 0:5b16bcf60d96 21 void tempMode(); //気温, 湿度をlcdに表示する関数
bean1310 0:5b16bcf60d96 22
bean1310 0:5b16bcf60d96 23 int main() {
bean1310 0:5b16bcf60d96 24
bean1310 0:5b16bcf60d96 25 int mode = 0, i;
bean1310 0:5b16bcf60d96 26
bean1310 0:5b16bcf60d96 27 do{
bean1310 0:5b16bcf60d96 28
bean1310 0:5b16bcf60d96 29 lcdSet();
bean1310 0:5b16bcf60d96 30 if(mode == 0){
bean1310 0:5b16bcf60d96 31 accelerometerMode();
bean1310 0:5b16bcf60d96 32 }else if(mode == 1){
bean1310 0:5b16bcf60d96 33 tempMode();
bean1310 0:5b16bcf60d96 34 }
bean1310 0:5b16bcf60d96 35
bean1310 0:5b16bcf60d96 36 if(angSet == 1 && mode == 0){
bean1310 0:5b16bcf60d96 37 mode = 1;
bean1310 0:5b16bcf60d96 38 for(i = 0; i < 4; i++){
bean1310 0:5b16bcf60d96 39 lcdSet();
bean1310 0:5b16bcf60d96 40 wait(0.25);
bean1310 0:5b16bcf60d96 41 lcd.printf(0, "Mode");
bean1310 0:5b16bcf60d96 42 lcd.printf(1, "TEMP");
bean1310 0:5b16bcf60d96 43 wait(0.25);
bean1310 0:5b16bcf60d96 44 }
bean1310 0:5b16bcf60d96 45 }else if(angSet == 1 && mode == 1){
bean1310 0:5b16bcf60d96 46 mode = 0;
bean1310 0:5b16bcf60d96 47 for(i = 0; i < 4; i++){
bean1310 0:5b16bcf60d96 48 lcdSet();
bean1310 0:5b16bcf60d96 49 wait(0.25);
bean1310 0:5b16bcf60d96 50 lcd.printf(0, "Mode");
bean1310 0:5b16bcf60d96 51 lcd.printf(1, "ACCEL");
bean1310 0:5b16bcf60d96 52 wait(0.25);
bean1310 0:5b16bcf60d96 53 }
bean1310 0:5b16bcf60d96 54 }
bean1310 0:5b16bcf60d96 55 wait(0.05);
bean1310 0:5b16bcf60d96 56 }while(1);
bean1310 0:5b16bcf60d96 57 }
bean1310 0:5b16bcf60d96 58
bean1310 0:5b16bcf60d96 59 int angle(int max, int min, int32_t now){/*<http://deviceplus.jp/hobby/entry017/>*/
bean1310 0:5b16bcf60d96 60 return (int)(((((int)now - min) / ((max - min) / 180.0)) - 90) + 0.5);
bean1310 0:5b16bcf60d96 61 }
bean1310 0:5b16bcf60d96 62
bean1310 0:5b16bcf60d96 63 void lcdSet(){
bean1310 0:5b16bcf60d96 64 lcd.clear();//LCDの表示をクリアに。
bean1310 0:5b16bcf60d96 65 lcd.contrast(0x32);//コントラストの設定。
bean1310 0:5b16bcf60d96 66 }
bean1310 0:5b16bcf60d96 67
bean1310 0:5b16bcf60d96 68 void accelerometerMode(){
bean1310 0:5b16bcf60d96 69
bean1310 0:5b16bcf60d96 70 int32_t axes[3];
bean1310 0:5b16bcf60d96 71
bean1310 0:5b16bcf60d96 72 accelerometer->Get_X_Axes(axes);
bean1310 0:5b16bcf60d96 73
bean1310 0:5b16bcf60d96 74 lcd.printf(0, "x:%d", angle(xMax, xMin, axes[0]));
bean1310 0:5b16bcf60d96 75 lcd.printf(1, "y:%d", -angle(yMax, yMin, axes[1]));
bean1310 0:5b16bcf60d96 76
bean1310 0:5b16bcf60d96 77 }
bean1310 0:5b16bcf60d96 78
bean1310 0:5b16bcf60d96 79 void tempMode(){
bean1310 0:5b16bcf60d96 80 float temp, humid;
bean1310 0:5b16bcf60d96 81
bean1310 0:5b16bcf60d96 82 temp_sensor -> GetTemperature(&temp);
bean1310 0:5b16bcf60d96 83 humidity_sensor -> GetHumidity(&humid);
bean1310 0:5b16bcf60d96 84 lcd.printf(0, "%2.1f['C]", temp);
bean1310 0:5b16bcf60d96 85 lcd.printf(1, "%2d[%%]", (int)humid);
bean1310 0:5b16bcf60d96 86
bean1310 0:5b16bcf60d96 87 }
bean1310 0:5b16bcf60d96 88