メールで、
NicoSensorのNACK送信が間違ってるとのご指摘を頂いたので、修正しました。
http://nicotak.com/robot/nxt/firm003.zip
具体的には、
スレーブアドレス(SLA)が間違っていたときNXT側へ返すNACKの論理が逆だったわけですが、
間違っていたときの話なので、普通に使ってるなら関係ありません。
ついでなので、ACK/NACK用の関数を追加しました。
「nxtsns.c」の修正部分です。
if (slaw == MYSLA) { // アドレスが一致の場合、 i2c_write_ack(); // ACK送信 break; } else { // アドレスが不一致の場合、 i2c_write_nack(); // NACK送信 }
、
「softi2cs.c」の追加部分です。
void i2c_write_ack(void) { i2c_sda_low(); i2c_scl_waith(); i2c_scl_waitl(); } void i2c_write_nack(void) { i2c_sda_high(); i2c_scl_waith(); i2c_scl_waitl(); }