Hallo Gemeinde.
Mit Arduino beschäftige ich mich erst seit sehr kurzer Zeit und habe jetzt beschlossen eine einfache Tastereingabe baue, welche die Tastendrücke per I2C an mein Raspberry Pi übertragen soll um dort per Python Script einen MPD zu steuern. Jetzt habe ich das Problem, dass mit der I2C Slave per "i2cdetect" angezeigt wird, sobald ich jedoch versuche davon zu lesen oder darauf zu schreiben stellt der Atmega seinen dienst ein. Es wäre ziemlich Toll, wenn sich jemand meinen Code anschauen könnte.
#include <Wire.h>
#define SLAVE_ADDRESS 0x2A //0x2A = 42
int playPausePin = 12;
int previousPin = 11;
int nextPin = 10;
int softerPin = 9;
int louderPin = 8;
int outputPin = 7;
byte registerMap[] = {00000000};
void setup()
{
pinMode(playPausePin, INPUT);
digitalWrite(playPausePin, HIGH); //activates the internal pullup resistors
pinMode(previousPin, INPUT);
digitalWrite(previousPin, HIGH);
pinMode(nextPin, INPUT);
digitalWrite(nextPin, HIGH);
pinMode(softerPin, INPUT);
digitalWrite(softerPin, HIGH);
pinMode(louderPin, INPUT);
digitalWrite(louderPin, HIGH);
pinMode(outputPin, OUTPUT);
digitalWrite(outputPin, LOW);
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
Serial.begin(9600);
}
void loop()
{
if(digitalRead(playPausePin) == LOW ) {
registerMap[0] = registerMap[0] | 1;//00000001;
delay(10);
}
if (digitalRead(previousPin) == LOW) {
registerMap[0] = registerMap[0] | 2;//00000010;
delay(10);
}
if(digitalRead(nextPin) == LOW) {
registerMap[0] = registerMap[0] | 4;//00000100;
delay(10);
}
if(digitalRead(softerPin) == LOW ) {
registerMap[0] = registerMap[0] | 8;//00001000;
delay(10);
}
if(digitalRead(louderPin) == LOW) {
registerMap[0] = registerMap[0] | 16;//00010000;
delay(10);
}
Serial.println(registerMap[0]);
}
// callback for received data
void receiveData(int byteCount)
{
byte temp = Wire.read();
delay(10);
Serial.println(temp);
if(temp == 00000001) {
digitalWrite(outputPin, HIGH);
} else {
digitalWrite(outputPin, LOW);
}
}
// callback for sending data
void sendData()
{
Wire.write(registerMap,1);
Serial.print("Sending Data: ");
Serial.println(registerMap[0]);
registerMap[0] = 00000000;
}