kann mir wer sagen wie ich über den Master in diesem Fall der UNO im I²C Bus eine LED am Slave einschalte bzw. wie der Befehl dafür ist oder geht das überhaupt?
Im "Bus" sind 2 UNO´s und ein Leonardo, ein Uno ist der Master mit der Adresse (7) und der Slave Uno (9) der Leonardo (8)
#include <Wire.h>
void setup() {
Wire.begin(7); // Verbindet sich mit dem I²C Bus <------ Master Adresse
Serial.begin(9600); // Hier wird die Serieller ausgabe gestartet
}
void loop() {
//Slave UNO
Wire.requestFrom(9, 20); // Frägt nach der Adresse #9 und nach den enthaltenen 20 Bytes
while (Wire.available()) { // Slave sendet weniger als angefragt wurde
char c = Wire.read(); // Empfängt ein Charakter als Byte
Serial.print(c); // Zeigt den Charakter an
delay(100);
}
// Slave Leonardo
Wire.requestFrom(8,25);
while (Wire.available()) {
char a = Wire.read();
Serial.print(a);
delay(100);
}
}
Der Master hat per Definition keine Adresse beim Aufruf der Wire.begin().
Der I2C BUS kann Werte übertragen. Du brauchst einen Sketch, der bei bestimmten Werten bestimmte Aktionen macht.
Grüße Uwe
Nico_A:
kann mir wer sagen wie ich über den Master in diesem Fall der UNO im I²C Bus eine LED am Slave einschalte bzw. wie der Befehl dafür ist oder geht das überhaupt?
Ja, das geht. Der Master schickt ein Byte, beispielsweise das Zeichen "E", der Slave liest es und interpretiert "E" als Einschaltbefehl. Oder der Master schickt ein "A", der Slave schaltet die LED aus.
uwefed:
Du brauchst einen Sketch, der bei bestimmten Werten bestimmte Aktionen macht.
Danke für die schnelle Antwort ein Beispiel wäre mir schon recht gewesen
Also ich meine damit wie soll ich den beispiel Sketch im Arduino Uno (Master) oder Uno (Slave) schreiben?
Ich habe davon keine Ahnung ich war froh jetzt erst mal 2 Arduinos in den Bus zu integrieren....
wäre dir sehr verbunden wenn du mir ein beispiel zeigen könntest.
Also sagen wir es so "DER MASTER" soll dem "SLAVE" sagen "Hey der Benutzer hat über den Seriellen Monitor gesagt LED AN" also soll der Master dem Slave z.B. Leonardo oder Uno sagen mach die Funzel an
Ich hoffe ich konnte es so gut wie es geht erklären ^^
Du hast das gut erklährt, auch wenn ich's schon vorher verstanden hatte, aber ich schreibe Dir keine Sketche. Ich helfe Dir es selbst zu machen.
Grüße Uwe
uwefed:
Der Master hat per Definition keine Adresse beim Aufruf der Wire.begin().
Hallo Uwe,
klitzekleiner, für dieses Thema irrelevanter Widerspruch: Auch ein Master kann eine Adresse haben. Das wird bei mehreren Mastern benötigt. Bei nur einem Master braucht er keine Adresse und eine Adresse ist dann auch eher irritierend.
Einspruch euer Ehren. (Ich sehe es zumindest anders)
Wer eine Adresse hat, ist ein Slave. Der Master hat keine Adresse(oder Adresse 0). (danke für den Hinweis, combie)
Wenn es mehrere Master gibt, und einer den anderen ansprechen will, ist der angesprochene ein Slave und hat dafür natürlich eine Adresse. Eigentlich ist jeder Slave (mit Adresse), und macht sich nur manchmal zum Master.
Oft ist man aber dabei, einen Design-Fehler zu machen und sollte versuchen, mit nur einem Master auszukommen
Datentransfer geht ja in beide Richtungen, dafür braucht man es schonmal nicht.
Ein guter Master kümmert sich um seine Slaves und fragt sie regelmäsig, ob sie was sagen wollen
Wer eine Adresse hat, kann als Slave und als Master agieren.
michael_x:
Der Master hat keine Adresse
Wer keine Adresse hat, kann nur als Master agieren.
Robe aus.
Für dieses Thema: Uwe erweckte bei mir den Eindruck, es sein ein Fehler, einem Master eine Adresse zu geben. Ich würde sagen, es ist überflüssig, aber kein Fehler.
michael_x:
Ein guter Master kümmert sich um seine Slaves und fragt sie regelmäsig, ob sie was sagen wollen
Oder man spendiert eine Meldeleitung, mit der die Slaves eine Abfrage anfordern können.
Okay okay.... ich hab es begriffen xD Ihr wollt mir also kein beispiel nennen ..... jaaaa ich habs verstanden ....
aber wehe ihr bettelt nochmal um was
Nein spaß .... neee ich meins ernst ich komm absoult nicht mit der Wire libary klar ist für mich noch ein reines durcheinander
ein kleines beispiel hätte mir echt gereicht
Aber durch die Master and Slave Diskussion seid ihr euch noch ziemlich unschlüssig wie ich sehe
Untereinander stellen die Regulars eine Gruppe von Usern, die gemeinsam durch ständige Übung eine Netzkultur schaffen.
Soziale Normen [werden] vor allem durch Regulars gegenüber den Newbies ... mit mehr oder weniger starkem sozialem Druck durchgesetzt.
Danke für den wikipedia Link
Also, damit das klar ist, Freundchen (@Nico_A): Bevor du nicht sagst was dir an den Master-Slave Beispielen in der IDE nicht passt, kriegst du natürlich kein zusätzliches.
Nico_A:
ein kleines beispiel hätte mir echt gereicht
Keine Chance ;D
Um der Theorie die Praxis folgen zu lassen, habe ich mal ein Beispiel mit Master, der eine Adresse hat, gemacht. Klappt mit UNO und Mega2560 wie erwartet. Die Funktion ist einfach gehalten: Gibt man beim Mega2560 ein 'E" ein, wird beim UNO die LED eingeschaltet, beim 'A' ausgeschaltet. So eine Funktionalität kann niemand gebrauchen, soll nur der Demonstration dienen (Quelle):
// Mega2560
#include <Wire.h>
void setup() {
Serial.begin(9600);
Serial.println("Bitte 'E' oder 'A' eingeben.");
// Start the I2C Bus
Wire.begin(8); // Hier eine Adresse anzugeben ist überflüssig, aber kein Fehler!
}
void loop() {
if (Serial.available()) {
char x = Serial.read();
if ((x == 'e') || (x == 'E') || (x == 'a') || (x == 'A')) {
Wire.beginTransmission(9); // transmit to device #9
Wire.write(x); // sends x
Wire.endTransmission(); // stop transmitting
}
}
}
// UNO
#include <Wire.h>
int LED = 13;
volatile char x;
void setup() {
Serial.begin(9600);
Serial.println("Programmanfang");
pinMode (LED, OUTPUT); // Define the LED pin as Output
Wire.begin(9); // Start the I2C Bus as Slave on address 9
Wire.onReceive(receiveEvent); // Attach a function to trigger when something is received.
}
void receiveEvent(int bytes) {
x = Wire.read(); // read one character from the I2C
}
void loop() {
if (x != ' ') {
if ((x == 'e') || (x == 'E')) {
digitalWrite(LED, HIGH);
}
if ((x == 'a') || (x == 'A')) {
digitalWrite(LED, LOW);
}
Serial.println(x);
x = ' ';
}
}
PS: Weil Uwe es gerne möchte, merke ich an, daß dieser Beitrag Anflüge von freundlich gemeinter Ironie enthält.
agmue:
Keine Chance ;D ...
... mal ein Beispiel mit Master, ...
Auch wenn Du kein Beispiel zeigen wolltest und es dann doch tust, bekommst Du hierfür ein Fleißbildchen resp. -punkt von mir. Denn derlei steht mir auch noch bevor und dafür kann ich Dein Beispiel sehr gut gebrauchen.