Hall Effect Demo Program, using a hall effect sensor to calculate pedal speed while riding a bike

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
roberthill04
Date:
Wed Feb 24 17:42:35 2016 +0000
Commit message:
This is the Hall Effect Demo Program, testing the functionality of the hall effect as a means of finding pedal speed while riding a bike.;

Changed in this revision

HallEffect.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r b83e5e826d81 HallEffect.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HallEffect.cpp	Wed Feb 24 17:42:35 2016 +0000
@@ -0,0 +1,85 @@
+#include "mbed.h"
+#include "AnalogIn.h"           //not sure if this is necessary 
+#include "DigitalIn.h"          //^^^ 
+
+DigitalOut led_red(LED_RED);
+DigitalOut led_green(LED_GREEN);
+DigitalOut led_blue(LED_BLUE);
+DigitalIn sw2(SW2);
+DigitalIn sw3(SW3);
+Serial pc(USBTX, USBRX);
+
+//LED is ON when set to 0, OFF when set to 1
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+DigitalIn HallEffect(D2);    //Intializes Digital input into pin D2 (Hall Effect sensor)
+
+
+int Hall_Counter = 0;            //Initialize Counter for Hall Effect
+bool Low_Hall = true;            //Initialize Flag for Hall Effect sensor
+bool Button_Pressed = true;     //Initialize flag for output on terminal
+Timer Hall_Timer;              //Initialize timer for pedal speed calc
+int Pedal_Time;                 //Intialize int for Time Passed 
+int Pedal_Speed;                //Initialize int for Pedal Speed
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void Hall_Effect_Count(void)
+{
+    if (sw3 == 0 && Button_Pressed == true) { 
+    //led_blue =  0;                                       //Blue LED is ON
+    //led_green = 1;
+    //led_red =   1;
+    pc.printf("Number of times magnet has passed sensor: %d\n", Hall_Counter);                //Outputs # of times magnet passed sensor
+    Hall_Timer.stop();                  //stop the timer
+    pc.printf("Time passed (in seconds): %f \n", Hall_Timer.read());                                   //Outputs time in seconds
+    Pedal_Time=Hall_Timer.read()/60;                                        //Divides Time in seconds by 60 so we have minutes for Pedal_Speed (RPM)
+    Pedal_Speed=Hall_Counter/(Hall_Timer.read()/60);                           
+    pc.printf("Approximate pedal speed: %d RPM\n", Pedal_Speed);                          //Outputs pedal speed
+    Button_Pressed = false;
+    //Hall_Timer.reset();                         //idea here is the timer is reset after the program outputs the pedal speed so the demo can be reran
+    }
+}
+
+int main() {
+    led_blue=1;
+    led_red=0;
+    led_green=1;
+    pc.baud(9600);
+    pc.printf("Hello World from FRDM-K64F board. This is the Hall Effect Demo Program. ");
+    pc.printf("Press SW3 (Button Near LED on board) to see Pedal Speed.\n ");
+    Hall_Timer.start();             //Starts Timer for Pedal Speed Calculation **see if this is better in loop or out**
+                                    //Looks like it works better here (Feb. 10)
+
+
+
+   
+    while (1){                                                                                   //infinite loop
+        //Hall_Timer.start();                                                                      //Start the timer ***See if timer works here or above while loop
+        Button_Pressed = true;                                       
+         if(HallEffect==0 && Low_Hall==true) {                                           //If Hall Effect Digital Output is low 
+            Hall_Counter++;                                                              //Add one to counter for calc pedal speed
+            led_green = 0;                                                               //Output Green on LED, simulates wheel rotation "sensed"
+            led_red = 1;                                                                 
+            led_blue = 1;
+            Low_Hall = false;                                                            //flag to avoid errors                        
+         }
+         else if(HallEffect==1 && Low_Hall==true){                                //Additional logic for accurate readings 
+            led_green = 1;
+            led_red = 0;                                                         //Stays red while hall effect outputs digital high
+            led_blue = 1;
+         }
+          else if(HallEffect==0 && Low_Hall==false){                                                       
+            led_green = 0;
+            led_red = 1; 
+            led_blue = 1;
+            
+         }
+         else if(HallEffect==1 && Low_Hall==false){
+            led_green = 1;
+            led_red = 0;
+            led_blue = 1;
+            Low_Hall = true;
+         }
+         Hall_Effect_Count();
+         //wait(5.0f); //LOOK at this, this may be why the button isnt working****
+      }
+}
diff -r 000000000000 -r b83e5e826d81 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Feb 24 17:42:35 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3
\ No newline at end of file