#include <Wire.h>
void setup()
{
Wire.begin(111); // I2C Bus als #111 betreten
Wire.onReceive(beiempfang); //bei Empfang diese Funktion ausfuehren
Serial.begin(9600); //fuer debugging am PC
}
byte anzahl[] = {3, 4, 8, 3, 5}; // Slave #1 kriegt Zahl #1 (hier z.b. 3)
int anslavenr;
int slavenummer;
void loop()
{
for (int anslavenr = 0; anslavenr < 5; anslavenr++)
{
if (anzahl[anslavenr] > 0) { anzahlsetzen(); }
Serial.print(anslavenr+1);
Serial.print(anzahl[anslavenr]);
Serial.print('\n');
delay(2000);
}
}
void anzahlsetzen(){
Wire.beginTransmission(anslavenr+1); //Starte Senden an Slave#
Wire.write(anzahl[anslavenr]); //Sende Anzahl
Wire.endTransmission(); //Beende Uebertragung
}
void beiempfang(int howMany) //diese Funktion wird bei Empfang ausgefuehrt
{
while(1 < Wire.available()) // alle bytes bis auf das letzte empfangen
{
int slavenummer = Wire.read(); // Slavenummer empfangen und speichern
Serial.print(slavenummer); // debugging am pc
}
int okbtn = Wire.read();
Serial.println(okbtn); //debugging am pc
if (okbtn == 1) { anzahl[slavenummer-1] = 0; }
}
Ausgabe wie erwartet:
13
24
38
43
55
#include <Wire.h>
const int okbtn = 10;
int okbtnstate = 0;
int slavenr = 1;
// Array für Ausgabe der Zahlen von 0 bis 9
byte siebenSegmentZahlen[10][7] =
{
{ 0,0,0,0,0,0,1 }, // = 0 (Leds bei Low(0) an!)
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,1,0,0 } // = 9
};
void setup()
{
Wire.begin(slavenr); // I2C Bus als #1 betreten
Wire.onReceive(beiempfang); //bei Empfang diese Funktion ausfuehren
Serial.begin(9600); //fuer debugging am PC
pinMode(2, OUTPUT); // definieren Pin 2 digital als Ausgang
pinMode(3, OUTPUT); // definieren Pin 3 digital als Ausgang
pinMode(4, OUTPUT); // definieren Pin 6 digital als Ausgang
pinMode(5, OUTPUT); // definieren Pin 7 digital als Ausgang
pinMode(6, OUTPUT); // definieren Pin 8 digital als Ausgang
pinMode(7, OUTPUT); // definieren Pin 9 digital als Ausgang
pinMode(8, OUTPUT); // definieren Pin 10 digital als Ausgang
pinMode(9, OUTPUT); // definieren Pin 11 digital als Ausgang
pinMode(okbtn, INPUT);
}
void loop()
{
okbtnstate = digitalRead(okbtn);
delay(500);
if (okbtnstate == HIGH) { okbtnpressed(); }
}
void beiempfang(int howMany)
{
int x = Wire.read(); // byte als integer empfangen
Serial.println(x); // debugging am pc
if (x > 0) { anzeige(x); }
}
void okbtnpressed(){
Wire.beginTransmission(111); // an 111 senden
Wire.write(slavenr); // Slavenummer senden
Wire.write(1); // eine 1 senden als okbtnpress
Wire.endTransmission(); // stop transmitting
}
void anzeige(byte digit){
byte pin = 2;
for (byte segmentZaehler = 0; segmentZaehler < 7; ++segmentZaehler)
{
digitalWrite(pin, siebenSegmentZahlen[digit][segmentZaehler]);
++pin;
}
}
Ausgabe:
3
3
3
und zwar bei jeder Ausgabe oben eine 3 und nicht nur bei 13