Hallo,
ich versuche SoftWire zum Laufen zu bringen.
Es funktioniert schon zum teil.
Das scannen der iic-Adressen funtioniert.
Mein Slave liefert beim Senden von 0x55 drei Byte zurück, das klappt nicht.
Auf der GitHub-Seite steht auch was von Puffer definieren, bloß wie ???
#define SDA_PORT PORTC
#define SDA_PIN 4
#define SCL_PORT PORTC
#define SCL_PIN 5
#define I2C_TIMEOUT 100
#define I2C_SLOWMODE 1
#include <SoftWire.h>
SoftWire Wire = SoftWire();
void setup(){
Serial.begin(115200);
Serial.println("Radar-Regensensor IIC-Test Master");
Wire.begin(); //I2C Start
I2CScanner(); //scannd den I2C-Bus
}
void loop(){
int8_t vRegenkmhVK, vRegenkmhNK, vRegenTemp;
boolean RegenOK = Regensensor(&vRegenkmhVK, &vRegenkmhNK, &vRegenTemp);
Serial.print (" ");
if(vRegenkmhVK > 0){
Serial.print(vRegenkmhVK);
Serial.print (",");
Serial.print(vRegenkmhNK);
Serial.print (" km/h ");
}
Serial.print(vRegenTemp);
Serial.println (" °C");
delay(2000);
}
boolean Regensensor(int8_t *vRegenkmhVK, int8_t *vRegenkmhNK, int8_t *vRegenTemp){
int8_t vData[3];
Wire.beginTransmission(0x4);
Wire.write(0x55);
byte vOK = Wire.endTransmission();
if(vOK > 0) return false;
delay(1);
vOK = Wire.requestFrom(0x4,3);
if(vOK != 3) return false;
Serial.print("vOK = ");
Serial.print(vOK);
int i = 0;
while(Wire.available()){
vData[i] = Wire.read();
i++;
if(i > 2000) break;
}
*vRegenkmhVK = vData[0];
*vRegenkmhNK = vData[1];
*vRegenTemp = vData[2];
return true;
}
void I2CScanner(){
Serial.println ("I2C-Scanner");
byte count = 0;
for (byte i = 0; i < 120; i++){
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Found: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1);
}
}
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
}