/ RCWL1601_I2C / arduino_simpletest / arduino_simpletest.ino
arduino_simpletest.ino
 1  // SPDX-FileCopyrightText: 2022 Limor Fried for Adafruit Industries
 2  //
 3  // SPDX-License-Identifier: MIT
 4  
 5  #include <Adafruit_I2CDevice.h>
 6  // requires https://github.com/adafruit/Adafruit_BusIO
 7  
 8  #define SR04_I2CADDR 0x57
 9  Adafruit_I2CDevice sonar_dev = Adafruit_I2CDevice(SR04_I2CADDR);
10  
11  
12  void setup() {
13    Serial.begin(115200);
14    while (!Serial);
15  
16    if (! sonar_dev.begin(&Wire)) {
17      Serial.println("Could not find I2C sonar!");
18      while (1);
19    }
20    Serial.println("Found RCWL I2C sonar!");
21  }
22  
23  void loop() {
24    Serial.print("Ping mm: "); Serial.println(ping_mm());
25    delay(100);
26  }
27  
28  uint32_t ping_mm()
29  {
30    uint32_t distance = 0;
31    byte buffer[3];
32    buffer[0] = 1;
33    // write one byte then read 3 bytes
34    if (! sonar_dev.write(buffer, 1)) {
35      return 0;
36    }
37    delay(10);  // wait for the ping echo
38    if (! sonar_dev.read(buffer, 3)) {
39      return 0;
40    }
41    
42    distance = ((uint32_t)buffer[0] << 16) | ((uint32_t)buffer[1] << 8) | buffer[2];
43    distance /= 1000;
44    
45    if ((distance <= 1) || (distance >= 4500)) {   // reject readings too low and too high
46      return 0;
47    }
48  
49    return distance;
50  }