PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino als i2c-Slave



Ford Prefect
16.06.2014, 16:31
hallo,
ich bin gerade bei meinen ersten Versuchen, den NXT mit Arduino per i2c zu verbinden.

Der Arduino liest alle 20ms einen Taster an digital pin 2 aus (Taster an VCC über 100kOhm gegen GND)
value=digitalRead(signalpin);
und gibt das Ergebnis an ledpin 13 (interne LED) aus
digitalWrite(ledpin,value);
Bis hierhin funktioniert es.

Gleichzeitig wird er als devaddr 0x03 definiert
Wire.begin(3);

und soll auf i2c-request den Zustand des signalpins als byte an den i2c-Bus übergeben
void requestEvent() {
Wire.write(signalpin); // respond with message of 1 byte
}

das müsste soweit auch stimmen, oder?

Leider funktioniert es nicht mit dem NXT-Master, daher will ich jetzt erstmal den Arduino-Teil klar kriegen.
Ist der soweit in Ordnung?



// touch sensor with external Pullup at pin digital 2
// i2c as slave, dev addr. 0x03

#include <Wire.h> // serial lib

int ledpin=13;
byte signalpin=12;
byte value=0;

//************************************************** ***********************
void setup()
{
pinMode(ledpin,OUTPUT);
pinMode(signalpin,INPUT);

Wire.begin(3); // join i2c bus with dev address 0x03
Wire.onRequest(requestEvent); // register event
}

//************************************************** ***********************

void requestEvent() {
Wire.write(signalpin); // respond with message of 1 byte
}

//************************************************** ***********************

void loop()
{
value=digitalRead(signalpin);
digitalWrite(ledpin,value);

delay(20);
}


ps, edit:
muss man vom Master aus zusätzlich zur dev Addresse evtl noch eine Registeradresse eingeben? Ggf welche?