sht10 leggere la temperatura del sensore in I2C bus

gpb01:
Dicono chiaramente che è compatibile con il protocollo I2C, anche se ... gestendosi da soli due pin, magari si fa prima :grin:

Guglielmo

ci ho messo del mio anche se il codice che ho fatto vi farà ridere o provato a generare i livelli che sono spiegati nel datasheet impostando un delay di 10us per avere una frequenza di 100KHz.
purtroppo non sono in grado di farlo andare :frowning: scusate anche la banalità del mio programma

int clk = 13;
int data = 12;


void setup() {             

  Serial.begin(9600);  
  
  pinMode(clk, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop() {
  //setup
  digitalWrite(clk, LOW);
  digitalWrite(data, HIGH);
  delay(100);
  
  //START
  digitalWrite(clk, HIGH);
  delayMicroseconds(5);
  digitalWrite(data, LOW);
  delayMicroseconds(5);
  digitalWrite(clk, LOW);
  delayMicroseconds(5);
  digitalWrite(clk, HIGH);
  delayMicroseconds(5);
  digitalWrite(data, HIGH);
  delayMicroseconds(5);
  digitalWrite(clk, LOW);
  delayMicroseconds(5);
  digitalWrite(data, LOW);
  delayMicroseconds(10);
  
  //A2
  digitalWrite(clk, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  delayMicroseconds(10);
  //A1
  digitalWrite(clk, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  delayMicroseconds(10);
  //A0
  digitalWrite(clk, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  delayMicroseconds(10);
  
  //C4
  digitalWrite(clk, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  delayMicroseconds(10);
  //C3
  digitalWrite(clk, HIGH);
  delayMicroseconds(5);
  digitalWrite(clk, LOW);
  delayMicroseconds(5);
  //C2
  digitalWrite(clk, HIGH);
  digitalWrite(data, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  digitalWrite(data, LOW);
  delayMicroseconds(10);
  //C1
  digitalWrite(clk, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  delayMicroseconds(10);
  //C0
  digitalWrite(clk, HIGH);
  digitalWrite(data, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  digitalWrite(data, LOW);
  delayMicroseconds(10);
  //ACK
  digitalWrite(clk, HIGH);
  digitalWrite(data, HIGH);
  delayMicroseconds(10);
  digitalWrite(clk, LOW);
  digitalWrite(data, LOW);
  delayMicroseconds(10);
  
  
  pinMode(data, INPUT);
  delay(100);
  
  
  int x=12; //leggi 12 bit
  while(x>0){
    //bit
    digitalWrite(clk, HIGH);
    delayMicroseconds(5);
    
    //leggo il valore
    Serial.println(digitalRead(data));
    
    digitalWrite(clk, LOW);
    delayMicroseconds(5);
    
    x--;
  }
  
  
  delay(1000);
  
}