Hi,
Ich bin gerade dabei einen Arduino Nano und meinen Pi3 zum kommunizieren zu bewegen. Hierbei ist der Pi der Master und der Arduino der Slave. Die Pins habe ich eigtl alle zu verbunden, wie sie sein müssen. Beim Arduino kommt nichts an, wenn ich es am Pi raussende. Umgekehrt dann natürlich auch nicht. Ich habe sowohl am Pi als auch beim Arduino einen Loopback probiert und siehe da das funktioniert bei beiden. Da ich beim Pi jediglich das Kabel umgesteckt habe und alles funktioniert denke ich liegt es wohl am Arduino, da ich hier anderen Code verwenden musste.
Ich hoffe jmd. findet vlt meinen Fehler. Es kann auch sein, dass ich was beim SlaveSelect beachten muss. Am Pi nutze ich die Pi4J Library, da ich es erstmal über Java probieren wollte. Der Loopback funktioniert dort wie gesagt ohne Probleme, aber nicht wenn ich an den Arduino sende. Ist es zwangsweise nötig den Pi und den Arduino zsm. an den Ground zu hängen, wenn diese unterschiedliche Spannungsquellen haben?
Hier mal der Code vom Arduino:
Normalversuch, also Pi an Arduino:
#include <SPI.h>
void setup() {
Serial.begin(9600);
Serial.write("Warte auf SPI...");
SPI.begin();
pinMode(MISO, OUTPUT);
SPCR |= _BV(SPE);
SPCR |= _BV(SPIE);
}
ISR (SPI_STC_vect){
Serial.write("Empfangen");
byte c = SPDR;
Serial.write(c);
}
void loop() {
}
Alles anzeigen
Loopback am Arduino (funktioniert):
#include <SPI.h> // including the SPI library
char outByte [20] = "yea"; // string to be send and received via SPI port
int led = 6; // variable which holds the pin number at which the LED is attached
char inByte; // variable which stores the value of the byte received from SPI bus
int i = 0;
void setup()
{
pinMode(led, OUTPUT); // setting the LED pin as output
Serial.begin(9600); // initializing the serial port at 9600 baud rate
SPI.begin(); // initialize the SPI port as master
delay(100);
}
void loop()
{
digitalWrite(led, HIGH);
for(i = 0; outByte [i] != '\0'; i ++) // send and receive the bytes of the string
{
inByte = SPI.transfer(outByte [i]);
Serial.write(inByte);
}
Serial.println();
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Alles anzeigen