I2C_2 bus scanner for STM32L476RG.

Dependencies:   mbed

Revision:
9:c403dc9b86cc
Parent:
8:ead6147e31a4
--- a/main.cpp	Wed Mar 30 14:58:05 2016 +0000
+++ b/main.cpp	Sat Nov 20 13:08:09 2021 +0000
@@ -1,53 +1,41 @@
-/* Scan I2C bus on specified pins and prints out
-* the all address where an active device responds.
-*
-  By Joseph Ellsworth CTO of A2WH
-  Take a look at A2WH.com Producing Water from Air using Solar Energy
-  March-2016 License: https://developer.mbed.org/handbook/MIT-Licence 
-  Please contact us http://a2wh.com for help with custom design projects.
-
-  
-* Don't forget 3K pull-up resistors on sda,scl 
-* 
-* I tested this by soldering in a I2C chip known to respond at
-* address dec=120 hex=70 and the utility got the ack as expected.
-* when the chip was de-soldered it was no longer detected.  
-*/
-
+/* I2C scanner for NUCLEO-L476RG
+ * 
+ * November, 2021.
+ */
 #include "mbed.h"
 
-Serial pc(USBTX, USBRX);
-Serial pc2(USBTX, USBRX);
+#define D_SDA                  PB_14 
+#define D_SCL                  PB_13 
+#define MIN_ADD                    0
+#define MAX_ADD                  127
+#define DATA                     "00"
+#define LENGTH                     1
+#define SMALL_DELAY_MS            10       
+#define BIG_DELAY                  2         
 
- #define D_SDA                  PB_7 
- #define D_SCL                  PB_6 
-   // sda=PB7, scl=PB_6 Pins specific to Nucleo-F303K8
-  // must change pins to match your board.
-
-I2C i2c(D_SDA, D_SCL);  
-  
+I2C i2c(D_SDA, D_SCL);
 DigitalOut myled(LED1);
  
 int ack;   
-int address;  
+int address;
+  
 void scanI2C() {
-  for(address=1;address<127;address++) {    
-    ack = i2c.write(address, "11", 1);
-    if (ack == 0) {
-       pc.printf("\tFound at %3d -- %3x\r\n", address,address);
+  for(address = MIN_ADD; address < MAX_ADD; address++) {    
+    ack = i2c.write(address << 1, DATA, LENGTH);
+    if (!ack) {
+       printf("\tFound at:   %3d <--> %3x\r\n", address,address);
     }    
-    wait(0.05);
+    wait_ms(SMALL_DELAY_MS);
   } 
 }
  
 int main() {
-  pc.baud(9600);
-  pc.printf("I2C scanner \r\n");
+  printf("I2C scanner \r\n");
   scanI2C();
-  pc.printf("Finished Scan\r\n");
+  printf("Finished Scan\r\n");
   // just blink to let us know the CPU is alive 
-  while(1) { 
-      wait(5.0);          
+  while(true) { 
+      wait(BIG_DELAY);          
       myled = !myled;
   }
 }