GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
AN5とAN4を使って、I2cでHMC6352(yaw軸の地磁気センサー)を使おうとしたのですが、帰ってくる値が6032などで、角度としてはおかしいです。
その他、Arduinoとマイコン間通信もしたのですが、成功しませんでした。
IDEforGRを使ってたいました。
ほかのGR-SAKURAを使ってもI2cが成功しないのですが、どうしたらいいですか?
よろしくお願いします。
ちょっと現物なく分かりませんが、例えばWire1 scl:0 sda:1を使ってみていただけますか?
gadget.renesas.com/.../pin_map_sakura.png
A4, A5はソフトウェアI2Cで微妙にタイミングが合っていない可能性があります。
wire1は同じプログラムで使えますか?
wire1しか使ったことないですが、画像のピン配置見ると、「AN5とAN4」でなくて、「AN5とAN3」になってます。どっちが正しんでしょうか?
私は訳あって↓を使わせて貰ってましたが、別デバイスですがI2C問題なく使えてました。
japan.renesasrulz.com/.../627.aspx
というか、SAKURAというよりArduino系のI2Cは特にRead系の扱い方が面倒で、StopConditionに入れずにStartしなおすのにホントにこの記述しか出来ないのか?というような議論があったような。現状のソースを公開できるなら、それ皆で見た方が早いかもです。
HMC6352も厄介ですね。普通のデバイスなら、I2Cチェックレジスタとかで通信確認できたりするのにレジスタ1個しかないし。他に通信確認できそうなデバイスお持ちでしたら、そっちで試すのもいいかもです。
値が6032との事ですが、これ10進?16進?なんとなく、ひっくり返して3260なら、326.0度ってことでアリそうかなぁ、とも思いました。
Wire1の使い方についてですが、以下のようにインスタンス名をWire1で使うだけですので、WireをWire1に置換してください。
下記Arduinoサイトから、ちょっと変更してます(wire.sendをwire.writeに、wire.receiveをwire.readに変更)
playground.arduino.cc/.../Hmc6352
Wire1.beginTransmission(slaveAddress);
Wire1.write("A"); // The "Get Data" command
Wire1.endTransmission();
delay(10); // The HMC6352 needs at least a 70us (microsecond) delay
Wire1.requestFrom(slaveAddress, 2); // Request the 2 byte heading (MSB comes first)
i = 0;
while(Wire1.available() && i < 2)
{
headingData[i] = Wire1.read();
i++;
}
皆様ありがとうございます。
IDEforGRでWire1に変更してみましたが、エラーが出ました。
エラー
HMC6352.ino: In function 'void setup()':
HMC6352.ino:23:3: error: 'Wire1' was not declared in this scope
HMC6352.ino: In function 'void loop()':
HMC6352.ino:39:3: error: 'Wire1' was not declared in this scope
プログラムは事通りです
#include <Wire.h>
int HMC6352Address = 0x42;
int slaveAddress;
int ledPin = 13;
boolean ledState = false;
byte headingData[2];
int i, headingValue;
void setup()
// Shift the device's documented slave address (0x42) 1 bit right
// This compensates for how the TWI library only wants the
// 7 most significant bits (with the high bit padded with 0)
slaveAddress = HMC6352Address >> 1; // This results in 0x21 as the address to pass to TWI
Serial.begin(9600);
while(1){
if (Serial.available() > 0) {
Serial.read();
break;
pinMode(ledPin, OUTPUT); // Set the LED pin as output
Wire1.begin();
void loop()
Wire1.beginTransmission(slaveAddress);//wire1に変更
Wire1.write("A"); //wire1に変更
Wire1.endTransmission(); //wire1に変更
delay(10);
Wire1.requestFrom(slaveAddress, 2); //wire1に変更
while (Wire1.available() && i < 2) //wire1に変更
headingData[i] = Wire1.read(); //wire1に変更
headingValue = headingData[0] * 256 + headingData[1];
Serial.print("Current heading: ");
Serial.print(int (headingValue / 10));
Serial.print(".");
Serial.print(int (headingValue % 10));
Serial.println(" degrees");
wire1という記述が使えないみたいです。
記載いただいたソースをIDE for GR E0.7.0で試してみましたが、コンパイルできました。バージョンと、マイコンボードの選択がGR-SAKURAになっているか確認していただけますか。
すみません。
見落としていました。
GR-SAKURAにしたらできました。
ありがとうございました。
マイコンボード選択は地味にトラップですよね。。自分も最初、やらかしました。
ダウンロードしてきた直後のデフォルトは「未選択」にしておいて、そのままコンパイルしようとすると「ボード選択して下さい」みたいなエラーが出てきてくれた方が、いいかも?乱暴?