Go Down

Topic: LED mit Datenpin für Pararellschaltung (Read 3355 times) previous topic - next topic

combie

#30
Jan 11, 2018, 03:46 pm Last Edit: Jan 11, 2018, 03:46 pm by combie
Dann müssen Master und Slave die Rollen tauschen.
(Was AVRs auch durchaus können)

IMMER geht die Kontaktaufnahme vom Master aus.
IMMER, darum heißt er auch Master.

Alternativ, eine extra Meldeleitung...
So wie die SQ einer RTC
Oder /int eines I2C ADC


Lesen und lesen
Säge kein Sägemehl.

agmue

Sprachliche Klärung: es gibt eine Zentrale und die Lichtschalter als Sateliten.

1. Die Zentrale als Master fragt die Sateliten als Slaves regelmäßig nach neuen Ereignissen ab. Einzelmasterbetrieb.

2. Wie 1., aber der Master wartet auf die Meldeleitung.

3. Der Satelit mit neuer Information agiert als Master und sendet Daten an die Zentrale als Slave. Multimasterbetrieb. Die Busteilnehmer können wechselnd als Master und als Slave agieren.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

theo416

Nr. 3 von agmue wäre dann die Version die ich brauche

Einmal Multimaster für Tastersignale (Master=Lichttaster, Slave=Zentralarduino)

Und einmal der Zentral arduino als Master, weil ich ja LEDs in den Tastern schalten will

Hatt da wer nen groben codevorschlag? Bin noch nicht ganz in der Materie von Arduino, ich prog sonst in basic

combie

#33
Jan 11, 2018, 04:06 pm Last Edit: Jan 11, 2018, 04:07 pm by combie
Quote
Hatt da wer nen groben codevorschlag?
GRRR!

Wozu poste ich dir wohl: Lesen und lesen
??
Damit du das liest!

Dann tue das bitte auch.
Ich lese dir das NICHT vor!
Denn ich bin ein überzeugter "DokuVorLeseVerweigerer"
Säge kein Sägemehl.

theo416

Hab ich grad voll überlesen! Sorry

Ich gucks mir in na stunde an! Danke

agmue

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

theo416

Soo

Hab jez alles hinbekommen! Funktioniert jetzt auch bidirektional!

Eine letzte Frage hab ich noch:

Ich sende über I2C z.B. den Befehl "S001 R20G70B89" > Taster -S001 Rot 20%, Grün 70% und Blau 89%

Nun brauch ich eine Funktion die eine Stelle nach R beginnt einen String zu erstellen der 2 Zeichen lang ist

Weil ja Rot, Grün oder Blau eine, zwei oder drei Stellen haben kann sind die Buchstaben nicht immer an der selben Stelle!

Serenifly

#37
Jan 11, 2018, 08:24 pm Last Edit: Jan 11, 2018, 08:27 pm by Serenifly
Nun brauch ich eine Funktion die eine Stelle nach R beginnt einen String zu erstellen der 2 Zeichen lang ist
Was willst du mit einem String? Um irgendwas vernünftiges damit zu machen musst du das in Integer konvertieren

Code: [Select]

void setup()
{
  Serial.begin(9600);

  char str[] = "S001 R20G70B89";

  byte r = atoi(strchr(str, 'R') + 1);
  byte g = atoi(strchr(str, 'G') + 1);
  byte b = atoi(strchr(str, 'B') + 1);

  Serial.println(r);
  Serial.println(g);
  Serial.println(b);
}

void loop()
{
}



Besser ist aber vielleicht du sendest einfach sowas:
"1,20,70,89"
Da Bezeichner zu senden ist eigentlich überflüssig

Noch besser ist du sparst die Strings und sendest direkt Zahlen. Wie das geht habe ich hier schon zig mal gezeigt (Union aus einem anonymen struct und einem Byte Array)

combie

#38
Jan 11, 2018, 08:25 pm Last Edit: Jan 11, 2018, 08:26 pm by combie
Warum willst du Strings per I2C versenden?

Sende 1 Byte für das Ziel oder Quelle plus 3 Byte, für jede Farbe eins.
Und fertig ist die Laube.

Es sei denn, du möchtest das Problem optimieren.
Dann machs dir mit Strings.
Säge kein Sägemehl.

theo416

Die Strings werden natürlich in Integer umgewandelt!
Und dann in 0-255 umgewandelt und analog ausgegeben

Danke für den Code!

Habt mir sehr geholfen!

Tommy56

Die Strings werden natürlich in Integer umgewandelt!
Und dann in 0-255 umgewandelt und analog ausgegeben
Sicher, dass Du analog meinst? ;)

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Serenifly

Und wieso sollte man nochmal etwas umwandeln müssen wenn man schon Integer hat?  :smiley-confuse:

agmue

Ich spekuliere mal:

Sicher, dass Du analog meinst? ;)
Ja, analogWrite.

Und wieso sollte man nochmal etwas umwandeln müssen wenn man schon Integer hat?  :smiley-confuse:
Er sendet 0 bis 100 Prozent und macht daraus den "analogen" Wert 0 bis 255.

analog => PWM-Tastverhältnis oder Tastgrad laut wiki.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

theo416

#43
Jan 11, 2018, 09:38 pm Last Edit: Jan 11, 2018, 09:44 pm by theo416
Wird wahrscheinlich ne ws2811 led weil die 2 pins weniger braucht!

Tommy56

Ok, also doch einen binären Wert, der in PWM gewandelt wird.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up