Hallo,
ich möchte die SoftWire Bibliothek für ein Projekt verwenden aber hab
hier irgendwie Probleme und gerade einen Knoten im Kopf
(Verständnisproblem).
Ich möchte also die SoftWire.h verwenden anstatt der Wire.h von Arduino
https://github.com/felias-fogg/SoftI2CMaster
Laut Dokumentation auf der Seite kann mann die SoftWire verwenden um die
Wire.h zu "emulieren"
1
#define SDA_PORT ...
2
...
3
#include<SoftWire.h>
4
SoftWireWire=SoftWire();
5
...
6
setup(){
7
Wire.begin()
8
...
9
}
habe also ganz einfach folgenden Sketch:
1
#define SDA_PIN 3
2
#define SDA_PORT PORTD
3
#define SCL_PIN 5
4
#define SCL_PORT PORTB
5
#define I2C_FASTMODE 1
6
#include"SoftWire.h"
7
8
SoftWireWire=SoftWire();
9
10
voidsetup()
11
{
12
Wire.begin();
13
}
14
15
voidloop()
16
{
17
//..
18
}
aber hier bekomme ich schon den Fehler:
SoftI2CMaster.h:853: error: 'SDA_PIN' was not declared in this scope
Das kann ich lösen indem ich die #define Anweisungen einfach in die
SoftWire.h geschrieben habe.
Jetzt aber das nächste und eigentliche Problem, ich verwende noch eine
Andere Bibliothek die normalerweise auf die Wire.h zugreift sobald ich
aber wie oben die SoftWire verwende bekomme ich nur angezeigt das er
Wire nicht finden kann.
Irgendjemand eine Idee?
Gruß Matthias
Dumpf Backe schrieb:> Dumpf Backe schrieb:>> So tun es zumindest Beispiele zum Arduino.>> Deine Softwire Bibliothek muss natürlich trotzdem vorhanden sein.
Aber in der Doku steht ja:
Meanwhile, I have written a wrapper around SoftI2CMaster that emulates
the Wire library (master mode only). It is another C++-header file
called SoftWire.h, which you need to include instead of SoftI2CMaster.h.
The ports and pins have to be specified as described above. After the
include statement you need to create a SoftWire instance:
Stefan U. schrieb:> Wofür gibt es eigentlich Konstruktor-Argumente?
Was genau willst du mir damit sagen? Ich muss zugeben dass ich aus dem
ganzen C/C++ schon eine weile raus bin und erst wieder einsteige.
Also wie gesagt bin schon ein bisschen raus aus der ganzen C/C++
Geschichte.
Vielleicht kann mir ja jemand einen ganz einfachen Tipp geben wo ich was
einbinden muss damit die main.ino & I2Cdev.cpp die Instanz Wire vom Typ
SoftWire kennen....
Gruß Matthias
> Was genau willst du mir damit sagen?
Kritik an der "Library" üben.
Ich finde es ziemlich seltsam (um es nicht "falsch" zu nennen), dass ich
ein Objekt durch konstante Definitionen konfigurieren muss. Wie soll man
denn mehrere Instanzen von dem Objekt gleichzeitig verwenden, die
unterschiedlich konfiguriert sind?
Normalerweise würde man schreiben:
1
SoftWirewire1(PORTD,3,PORTB,1);
2
SoftWirewire2(PORTD,4,PORTB,2);
Bzw. wenn man es konsequent im Arduino Style macht, würde man nur die
(Arduino-)Pin-Nummern als Argumente angeben.
> Vielleicht kann mir ja jemand einen ganz einfachen Tipp geben
Wenn das jetzt nicht Arduino wäre, hätte ich Dir empfohlen, die
Definitionen ins Makefile zu schreiben, damit sie dem Compiler als "-D"
Parameter übergeben werden. So macht man das nämlich normalerweise. Aber
das geht ja nicht, du hast kein Makefile.
Also sollte man es doch ordentlich mit Konstruktor-Argumenten
programmieren, dafür müsstest du aber die Library umschreiben.
Stefan U. schrieb:> Normalerweise würde man schreiben:SoftWire wire1(PORTD,3,PORTB,1);> SoftWire wire2(PORTD,4,PORTB,2);
Ok da stimme ich dir zu ist auch kein großes Problem hier einen
entsprechenden Konstruktor einzubinden.
Das eigendliche Problem an dem ich leider immer noch hänge ist aber wie
die "Wire" (SoftWire Wire = SoftWire()) in der I2Cdev.h & main.ino
gleichermaßen nutzen kann. Wie gesagt ich glaube hab hier einfach gerade
einen Denkfehler....
Arduino F. schrieb:> Also, mich würde interessieren: Wozu SoftI2C?
nun ja eine Idee hätte ich,
am ESP32 gibt es funktionierende I2C LIBs, die laufen genau wie auf
meinem Arduino mit OLED und RTC 3231.
Dann habe ich ein Lora ESP32 mit aufgesetztem OLED gekauft und der I2C
Scanner bleibt stumm, I2C RTC und I2C EEPROM wird nicht erkannt, da wird
irgendeine andere selbstgebastelte I2C Lösung verwendet, da käme mir in
den Sinn wieder die "normale" dafür zu nutzen.