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 }