ここにあるDevantechデジタルコンパスと接続しようとしています -
http://www.acroname.com/robotics/parts/R117-COMPASS.html
i2c-usbコンバーターを使用してラップトップに接続しています-
http://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm
まず第一に、私は電気工学についてあまり知りません。最低限の基本的なことはよくわかっているのですが、その後は迷子になってしまいます。
私はこのチュートリアルに従おうとしています -
https://xgoat.com/wp/2007/11/11/using-i2c-from-userspace-in-linux/
ただし、デバイスアドレスを設定しようとすると、最初に立ち往生します。
if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 )
{
fprintf( stderr, "Failed to set slave address: %m\n" );
return 2;
}
「スレーブアドレスの設定に失敗しました:無効な引数」を返します
コンパスのマニュアルに「最初にスタートビットを送信し、モジュールアドレス(0xC0)...」と書かれているため、最初はアドレスを0xC0にすべきだと思っていましたが、うまくいきませんでした。
これで、1 から 100 までのループができ、それぞれのアドレスを試してみましたが、すべて失敗しました。ループは -
for(int i=0x0;i<0x100;i++) {
if( ioctl( fd, I2C_SLAVE, i ) < 0 )
fprintf( stderr, "Failed to set slave address for address %i: %m\n", i );
}
他に何を試すべきかわかりません。今は、読み書きを開始できるようにアドレスを設定したいだけです。コンバーターは実際に PC に接続されているものなので、そのアドレスを使用する必要がありますか? もしそうなら、その情報を含むそのリンクのどこでそれを見つけることができますか? 誰かが私が何を試すことができるか、または何が間違っているかについての考えを持っていれば、それは素晴らしいことです.
編集:
さて、私は今このようなコードを持っています -
#define ADDRESS 0x55
int fd = open("/dev/i2c-0", O_RDWR);
if (fd < 0) {
printf("\n<0, %m", errno);
return -1;
}
if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 ) {
fprintf( stderr, "Failed to set slave address: %m\n" );
return 2;
}
if( i2c_smbus_write_byte( fd, 0xAA ) < 0 )
fprintf( stderr, "Failed to write 0xAA to I2C device: %m\n" );
アドレスを設定しますが、何も書き込みません。それに書き込もうとするたびに、私は-
Failed to write 0xAA to I2C device: No such device or address