ich bin neu in dem "Arduino-Bereich" und probiere mich jetzt durch alles durch.
Zum Spielen mit I2C habe ich jetzt was zum laufen bekommen. jetzt möchte ich ein Teil vom Skript benutzen als ein "Baustein" zum Wiederverwenden damit ich den teil nicht immer wieder neu schreiben muss, wenn ich ein anderen "Slave" ansprechen möchte.
Jetzt habe ich was probiert und es geht nicht so wie ich mir das vorstelle.
Könnt ihr bitte mal gucken, wo ich Verständnisprobleme habe.
#include <Wire.h>
int pin1 = 18; // schaltet LED
int taster = 0;
void setup()
{
Wire.begin(D1,D2);
pinMode(pin1,OUTPUT);
Serial.begin(9600);
}
void loop()
{
Slave(22,taster);
if(taster==1)
{
digitalWrite(pin1,HIGH);
}
else
{
digitalWrite(pin1,LOW);
}
}
void Slave (int adresse, int data)
{
Wire.requestFrom(adresse, 1);
while(Wire.available())
{
data = Wire.read();
}
}
Wozu das ganze, und dann auch noch grob fehlerhaft ?
Je nach I2C-Slave hast du doch passende Libraries, die du da verwenden kannst.
Das spart dir ne Menge Arbeit.
Das was drauf steht es sorgt dafür, das ein Wert zurück gegeben wird.
Die sollte sich nicht verändern. darum const.
Byte, weil ein byte nur ein byte belegt ein (unsigned) int belegt 2 byte.
Du hast nicht unendlich Speicher. Jetzt mag es noch nicht so schwierig sein mit Speicherverbrauch - gewöhn Dir aber an, wenigstens die Variablen auf den kleinsten Nenner zu belegen.
im Übrigen:
const byte pin1 = 18; // schaltet LED
der Pin ändert sich nicht und braucht ein byte weniger Speicherplatz.
Und wenn wir schon beim angewöhnen sind:
Benenne Pin's nach ihrer Funktion, ggfls. beschreibe was das wird.
const byte LED1 = 18; // Statusanzeige für Daten auf dem I2C-Slave
#include <Wire.h>
const byte LED1 = 18; // Statusanzeige für Daten auf dem I2C-Slave 22
const byte LED2 = 17; // Statusanzeige für Daten auf dem I2C-Slave 21
byte taster = 0; // KANN taster negativ werden? Nein? Dann unsigned int!
const byte slave22 = 22;
const byte slave21 = 21;
void setup()
{
Wire.begin();
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
taster = Slave(slave22);
if (taster == 1)
{
digitalWrite(LED1, HIGH);
}
else
{
digitalWrite(LED1, LOW);
}
taster = Slave(slave21);
if (taster == 1)
{
digitalWrite(LED2, HIGH);
}
else
{
digitalWrite(LED2, LOW);
}
}
byte Slave (int adresse)
{
// kann data nicht negativ werden? dann unsigned int!
byte data = 0;
Wire.requestFrom(adresse,1);
while (Wire.available())
{
data = Wire.read();
}
return data;
}
Es geht auch noch einfacher, aber erstmal zum lernen ist das schick.
Die Funktion "byte Slave(int adresse)" gibt einen Wert zurück.
Initialisiert ist dieser mit byte - anders als void, heisst es, das ein byte zurückgegeben wird. Void heist nichts, da wird also nichts zurück gegegeben. void (Schlüsselwort) – Wikipedia
Was zurück gegeben wird, bestimmst Du mit return. Und da steht das data hinter.
Der Wert der in data drin steckt, ist der Wert, mit dem taster gefüttert wird.
Das hast du gut erklärt, danke dafür. Sobald ich zuhause bin werde ich es mal probieren.
Danke, dass du dir bis jetzt die Mühe gemacht hast, mir das alles zu erläutern.