素人質問で申し訳ありませんが、アドバイスのほどお願いいたします。
###前提・実現したいこと
arduino unoを使用して、角度と距離が分かるデータロガーを作成しています。
LCDで現在値を確認しながら、SDカードにそのデータを書き出す仕様にしたいと思っています。
arduino unoに加速度センサ、超音波センサ、LCDシールド、SDカードシールドを接続させてそれらを連携させることが目的です。
###発生している問題・エラーメッセージ
LCDに文字が表示されません。
※正確にはSDカードシールドを接続するまでは、問題なく文字が表示されていたのですが、SDカードシールドを接続したときから、LCDの文字が意図しない記号や文字を書き出すようなバグが発生するようになりました。
###該当のソースコード
//SD card
#include <SD.h>
//lcd 表示
#include <LiquidCrystal.h>
LiquidCrystal lcd( 12, 11, 5, 4, 3, 2 );
//時間定義
unsigned long time;
//距離定義
int Duration;
float Distance;
void setup() {
Serial.begin(9600) ;
lcd.begin( 16, 2 ); // 16文字×2行
lcd.clear(); // LCD画面消去
//超音波センサ定義
pinMode(9, OUTPUT); //Trig
pinMode(8, INPUT); //Echo
//SDcard 初期設定
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
PrintToFile("time,rotateX,rotateY,Distance");
}
//SDcard 書き込み
File myFile;
void PrintToFile(String dataIn) {
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(dataIn);
dataFile.close();
Serial.println(dataIn);
} else {
Serial.println("error opening file");
}
}
void loop() {
//角度読み込み
int i;
long x = 0.0;
long y = 0.0;
long z = 0.0;
//100回読み込み 平均を算出
for (i = 0; i < 100; i++)
{
x += analogRead(0);
y += analogRead(1);
z += analogRead(2);
}
x /= 100.0;
y /= 100.0;
z /= 100.0;
//角度算出
float rotateX = (x - 214) / 1.511 - 90;
float rotateY = (y - 202) / 1.522 - 90;
Serial.print(" X=");
Serial.print(rotateX, 1);
Serial.print(" Y=");
Serial.print(rotateY, 1);
//角度LCD出力※この部分がうまくいっていません。
char szBuffer[100];
sprintf( szBuffer, "X : %d", rotateX );
g_lcd.setCursor( 0, 0 );
g_lcd.print( szBuffer );
sprintf( szBuffer, "Y : %d", rotateY );
g_lcd.setCursor( 0, 1 );
g_lcd.print( szBuffer );
//距離出力
digitalWrite(9, LOW);
delayMicroseconds(10);
digitalWrite(9, HIGH);
delayMicroseconds(10);//10 micro sec for HIGH
digitalWrite(9, LOW);
Duration = pulseIn(8, HIGH);
if (Duration > 0) {
Distance = Duration / 2;
Distance = Distance * 0.34;
Serial.print("D:");
Serial.print(Distance);
Serial.println("mm");
//CSV入力
time = millis();
String dataString = "";
dataString += time;
dataString += ",";
dataString += rotateX;
dataString += ",";
dataString += rotateY;
dataString += ",";
dataString += Distance;
PrintToFile(dataString);
}
delay(100);
}
###試したこと
プログラムコードは、ウェブサイトを参考にしながら、寄せ集めで組んでいます。
SDカードに出力するピンとLCDに出力するピンが一致してしまっているため、問題が生じているのかと考え、ピン番号を変えたりも試したのですが、うまくいきませんでした。
###補足情報
使用している部品は下記の通りです。
arduino///arduino uno R3
加速度センサ///KXSC7-2050
超音波センサ///HC-SR04
LCDシールド///LCDシールドキット(青)(スイッチサイエンス社製)
SDカードシールド///SDカードシールド(スイッチサイエンス社製)
現状、LCDの表示以外の機能は問題なく使えています。arduinoとLCDシールドとSDカードシールドは縦に積んで接続しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/08 05:36