加速度センサー [Arduino]
下記プログラムは、キャリブレーション機能が動作しません。
プログラムのおかしなところをご教授願いたくコメント頂けないでしょうか?
お願い致します。m(__)m
プログラムのおかしなところをご教授願いたくコメント頂けないでしょうか?
お願い致します。m(__)m
/* ----------<2017.12.03>--------------------------------------------- ・File name: _07_LCD_kasokudo.ino ・3軸加速度センサモジュール LIS3DHを用いLCDに傾斜角度を表示する ・PCのシリアルモニタには、ADC値、傾斜角度を表示する。 ----------<2017.12.17>------------------------------------------- ・Cal機能追加 ----------------------------------------------------------------- */ /* ---------------------------------------------------------- LiquidCrystal(rs, enable, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) rs(レジスタ選択): LCDのRSピンに接続するArduino側のピン番号♯12 rw(読み書き): LCDのRWピンに接続するArduino側のピン番号♯11 enable(動作起動信号): LCDのenableピンに接続するArduino側のピン番号♯10 d0~d7(データ): LCDのdataピンに接続するArduino側のピン番号 d0~d3はオプションで、省略すると4本のデータライン(d4~d7)だけで制御します ------------------------------------------------------------------------- */ #include //LCDシリアル通信 LiquidCrystal lcd(12,11,10, 5, 4, 3, 2); //LCD、アルディーノ接続 const int analogInPinX = A0; // X軸アナログ入力ピン(定数) const int analogInPinY = A1; // Y軸アナログ入力ピン(定数) const int analogInPinZ = A2; // Z軸アナログ入力ピン(定数) static int cal_x=0,cal_y=0,cal_z=0; //cal値 void setup() { lcd.begin(16,2); //LCDの行と桁数の設定 Serial.begin(9600); // シリアルモニタを開始 pinMode(6,INPUT); } void loop() { int i; long x = 0, y = 0, z = 0; // AD値 for (i=0; i < 50; i++) { // 値を50回取得し、平均化する x += analogRead(analogInPinX) ; // X軸 y += analogRead(analogInPinY) ; // Y軸 z += analogRead(analogInPinZ) ; // Z軸 } x /= 50 ; y /= 50 ; z /= 50 ; int rotateX = (x-277)/2.48 - 90 + cal_x ; //角度を求める式 int rotateY = (y-277)/2.48 - 90 + cal_y ; int rotateZ = (z-277)/2.48 - 90 + cal_z ; //cal while (digitalRead(6) == LOW) { int cal_x = -rotateX ; int cal_y = -rotateY ; int cal_z = -rotateZ ; int rotateX = rotateX + cal_x ; int rotateY = rotateY + cal_y ; int rotateZ = rotateZ + cal_z ; } // PCシリアルモニタ表示 ------------------------------ Serial.print("X:") ; Serial.print(x) ; Serial.print(", ") ; Serial.print(rotateX) ; Serial.print((char) 223); Serial.print(" Y:") ; Serial.print(y) ; Serial.print(", ") ; Serial.print(rotateY) ; Serial.print((char) 223); Serial.print(" Z:") ; Serial.print(z) ; Serial.print(", ") ; Serial.print(rotateZ) ; Serial.print((char) 223); Serial.println() ; delay(500) ; // LCD表示 -------------------------------------------- lcd.clear(); lcd.setCursor(1, 0); //カーソルを1桁、0行目にセット lcd.print("X:"); //X傾斜角 //lcd.print(x) ; //lcd.print(", ") ; lcd.print(rotateX) ; lcd.print((char) 223); //°表示 lcd.setCursor(9, 0); //カーソルを7桁、0行目にセット lcd.print("Y:") ; //Y傾斜角 //lcd.print(y) ; //lcd.print(", ") ; lcd.print(rotateY) ; lcd.print((char) 223); //°表示 lcd.setCursor(1, 1); //カーソルを1桁、1行目にセット lcd.print("Z:") ; //Z傾斜角 //lcd.print(z) ; //lcd.print(", ") ; lcd.print(rotateZ) ; lcd.print((char) 223); //°表示 delay(500); }
2017-12-19 23:00
nice!(0)
コメント(0)
コメント 0