The Nucleo Distance Calculator Simple code to use HCSR04 and nokia 5110 to display distance and ring a buzzer when the distance is lower than a certain threshold.

Dependencies:   N5110 NOKIA_5110 mbed

Fork of UltraTest by stephen smitherman

Revision:
1:56e6200a897b
Parent:
0:f91b4b2acbe1
--- a/main.cpp	Tue Mar 11 21:20:40 2014 +0000
+++ b/main.cpp	Mon Nov 30 15:44:40 2015 +0000
@@ -1,18 +1,96 @@
+//==================================
+//    The Nucleo Distance Calculator
+//        v. 1.0
+//==================================
+//    by Lorenzo Arrigoni 
+//    laelectronics@libero.it
+//----------------------------------
+//     November 2015
+////////////////////////////////////////////
+// This is a simple that measures the distance
+// and signals in video and with a buzzer if
+// the measured distance is below a certain threshold.
+//////////////////////////////////////////
+
 #include "mbed.h"
 #include "HCSR04.h"
+#include "NOKIA_5110.h" 
 
-DigitalOut myled(LED1);
-Serial pc(USBTX,USBRX);
-HCSR04 ultra(p12,p11);
+
+DigitalOut buzzer(D7) ;
+HCSR04 ultra(D3,D4);   //pin trigger, pin echo
+
+//treshold for buzzer
+#define treshold 5 // cm
+
+int start_position =0.5 ;
+int current_position = start_position ;
+
+// swith on/off for bluetooth
+#define BLUE 0
+
+// debug mode
+#define DEBUG 1
+
+#if DEBUG == 0
+//#define PC_DEBUG(args...) pc.printf(args)
+#else
+//#define PC_DEBUG(args...)
+#endif
+
+#if BLUE == 1
+Serial pc(D8,D2);
+#else
+Serial pc(USBTX, USBRX);
+#endif
+
+
+
 
 float range=0;
+//char gg ;
+
+void blink_buzz(DigitalOut name, float time)
+{
+   name = 1 ;
+   wait_ms(time); 
+   name = 0 ; 
+}
 
 int main() {
     
-        
-    pc.printf("Program Start\n");    
+    // initialize 
+    buzzer = 0 ; 
+    
+    LcdPins myPins;
+    myPins.sce  = D8;
+    myPins.rst  = D9;
+    myPins.dc   = D10;
+    myPins.mosi = D11;      //SPI_MOSI;
+    myPins.miso = NC;
+    myPins.sclk = D13;      //SPI_SCK;
+    NokiaLcd myLcd( myPins );
+    
+     
+    /// LCD initialization
+    myLcd.InitLcd();        // LCD init
+    myLcd.DrawString("Loarri - 2015");
+    myLcd.SetXY(0,2); 
+    myLcd.DrawString("LCD set up complete");
+    myLcd.SetXY(0,2);    
+    wait(2);
+    myLcd.ClearLcdMem();
+    /// end LCD initialization
+    
+    
+    //pc.printf("Program Start\n\r");    
+    myLcd.DrawString("Program Start");
+    wait(1);
+    myLcd.ClearLcdMem();
+    //myservo = start_position ;  //set servo at 0 degree
+    current_position = start_position ;
     while(1) {
-        
+        //myLcd.ClearLcdMem();
         ultra.startMeas();
         
         wait(0.2);
@@ -20,7 +98,27 @@
         
         if( ultra.getMeas(range) == RANGE_MEAS_VALID)
         {
-            pc.printf("Range - %f\n\r",  range);
+            pc.printf("Range -> %f cm\n\r",  range);
+            myLcd.SetXY(0,1);
+            myLcd.DrawString("Range -> ");
+            myLcd.SetXY(0,2);
+            int i=(int)range;
+             pc.printf("valore di i -> %i cm\n\r",  i);
+            char gg[4] ; 
+            sprintf(gg, "%f", range);
+            pc.printf("valore di gg -> %c cm\n\r",  gg);
+            //gg = NokiaLcd::NumToStr(range) ;
+            myLcd.DrawString(gg);
+            myLcd.SetXY(0,3);
+            myLcd.DrawString(" cm");
+            if (range < treshold ) {
+                blink_buzz(buzzer,10);
+                myLcd.ClearLcdMem();
+                myLcd.SetXY(0,1);
+                myLcd.DrawString("Soglia superata.");
+                wait(1);
+                myLcd.ClearLcdMem();
+                }
         }
     }
 }