2nd year embedded systems project

Dependencies:   mbed C12832

Files at this revision

API Documentation at this revision

Comitter:
nwabiam
Date:
Tue Dec 15 18:15:48 2020 +0000
Parent:
0:76a291b4c5db
Commit message:
Simple Electronic Lock (Solenoid) code

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
Door_1_Docs/RGBled.cpp Show annotated file Show diff for this revision Revisions of this file
Door_1_Docs/RGBled.h Show annotated file Show diff for this revision Revisions of this file
Door_1_Docs/Speaker.h Show annotated file Show diff for this revision Revisions of this file
Door_1_Docs/hcsr04.cpp Show annotated file Show diff for this revision Revisions of this file
Door_1_Docs/hcsr04.h Show annotated file Show diff for this revision Revisions of this file
Solenoid.cpp Show annotated file Show diff for this revision Revisions of this file
Solenoid.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/askksa12543/code/C12832/#990d5eec2ef6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Door_1_Docs/RGBled.cpp	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,10 @@
+#include "RGBled.h"
+
+RGBled::RGBled (PinName ledPin): rgbled (DigitalOut(ledPin)){
+}
+RGBled::~RGBled(){
+}
+bool RGBled::SetRGBledStatus (bool RGBStatus){
+    
+    rgbled = RGBStatus;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Door_1_Docs/RGBled.h	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,19 @@
+#ifndef RGBled_H
+#define RGBled_H
+
+#include <mbed.h>
+
+class   RGBled {
+
+    public:
+        RGBled (PinName ledPin);
+        ~RGBled ();
+        bool SetRGBledStatus (bool RGBStatus);
+        
+    private:
+        DigitalOut rgbled;
+        
+          
+};
+      
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Door_1_Docs/Speaker.h	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,19 @@
+#include "mbed.h"
+// new class to play a note on Speaker based on PwmOut class
+class Speaker
+{
+public:
+    Speaker(PinName pin) : _pin(pin) {
+// _pin(pin) means pass pin to the Speaker Constructor
+    }
+// class method to play a note based on PwmOut class
+    void PlayNote(float frequency, float duration, float volume) {
+        _pin.period(1.0/frequency);
+        _pin = volume/2.0;
+        wait(duration);
+        _pin = 0.0;
+    }
+
+private:
+    PwmOut _pin;
+};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Door_1_Docs/hcsr04.cpp	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,29 @@
+#include "hcsr04.h"
+#include "mbed.h"
+/*
+*HCSR04.cpp
+*/
+HCSR04::HCSR04(PinName t, PinName e) : trig(t), echo(e) {}
+ float HCSR04::echo_duration() {
+        
+    timer.reset();  //reset timer
+    trig=0;   // trigger low 
+    wait_us(2); //  wait 
+    trig=1;   //  trigger high
+    wait_us(10);
+    trig=0;  // trigger low
+         while(!echo); // start pulseIN
+      timer.start();
+     while(echo);
+      timer.stop();
+     return timer.read_us(); 
+ 
+}
+ 
+//return distance in cm 
+float HCSR04::distance(){
+    duration = echo_duration();
+  distance_cm = (duration/2)/29.1  ;
+        return distance_cm;
+ 
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Door_1_Docs/hcsr04.h	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,20 @@
+#ifndef hcsr04_H
+#define hcsr04_H
+#include "mbed.h"
+ 
+ 
+ 
+class HCSR04 {
+  public:
+    HCSR04(PinName t, PinName e);
+    float echo_duration();
+    float distance();
+ 
+    private:
+        DigitalOut trig;
+        DigitalIn echo;
+        Timer timer;
+        float duration,distance_cm;
+};
+ 
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Solenoid.cpp	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,11 @@
+#include "Solenoid.h"
+
+Solenoid::Solenoid (PinName targetSolenoidPin): solenoid (DigitalOut(targetSolenoidPin)){
+}
+Solenoid::~Solenoid(){
+}
+bool Solenoid::SetSolenoidStatus (bool Status){
+    
+    solenoid = Status;
+    //mySolenoid_1.SetSolenoidStatus();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Solenoid.h	Tue Dec 15 18:15:48 2020 +0000
@@ -0,0 +1,23 @@
+#ifndef Solenoid_H
+#define Solenoid_H
+
+#include <mbed.h>
+
+class   Solenoid {
+
+    public:
+        Solenoid (PinName targetSolenoidPin);
+        ~Solenoid ();
+        bool SetSolenoidStatus (bool Status);
+        //float distance
+        
+    private:
+        DigitalOut solenoid;
+
+};
+      
+#endif
+    
+    
+
+    
--- a/main.cpp	Thu Oct 29 16:38:37 2015 +0000
+++ b/main.cpp	Tue Dec 15 18:15:48 2020 +0000
@@ -1,15 +1,68 @@
 #include "mbed.h"
- 
-DigitalOut myled(LED1);
-DigitalOut Ctrl(p8); //Solenoid output control bit
- 
-int main() {
+#include "hcsr04.h"
+#include "Solenoid.h"
+#include "RGBled.h"
+#include "Speaker.h"
+#include "C12832.h"
+#include <iostream>
+
+HCSR04 sensor(p9, p10);
+Solenoid mySolenoid (p18);
+Solenoid mySolenoid_2 (p19);
+RGBled  redled(p24);
+RGBled  greenled(p23);
+C12832 lcd(p5, p7, p6, p8, p11);
+InterruptIn MagSense(p16);
+Speaker Interrupt(p26);
+DigitalOut myled1(LED1);
+
+void flip()
+{
     while(1) {
-        Ctrl = 1; //ON
-        myled = 1;
-        wait(0.5); 
-        Ctrl = 0; //OFF
-        myled = 0;
-        wait(2);
+        if (mySolenoid.SetSolenoidStatus (false)){
+            Interrupt.PlayNote(969, 0.1, 1.0);      // When contact is broken, interrupt the main program and sound the alarm and perform flip funtion
+            Interrupt.PlayNote(800, 0.1, 1.0);
+            lcd.locate (0,0);
+            lcd.printf("Door Open               ");
+            redled.SetRGBledStatus (true);
+            greenled.SetRGBledStatus (false);
+            }
+            if (MagSense.read() == 0) { // when magsensor is not broken break the loop
+                break; 
+            }
     }
 }
+int main()
+{
+    redled.SetRGBledStatus (false);
+    greenled.SetRGBledStatus (false);
+    float distance = sensor.distance();  //constantly read floating distance
+    MagSense.rise(&flip);
+    lcd.cls();
+    while(1) {
+        float distance = sensor.distance();
+        if (mySolenoid.SetSolenoidStatus (false)) {
+                    greenled.SetRGBledStatus (false);
+                    redled.SetRGBledStatus (true);
+                    lcd.locate(0,0);
+                    lcd.printf("**UNLOCKED**               ");
+                }
+        if (distance < 7)  {
+            while (1) {
+                mySolenoid.SetSolenoidStatus (true);
+                mySolenoid_2.SetSolenoidStatus (true);
+                if (mySolenoid.SetSolenoidStatus (true)) {
+                    greenled.SetRGBledStatus (true);
+                    redled.SetRGBledStatus (false);
+                    lcd.locate(0,0);
+                    lcd.printf("**LOCKED**             ");
+                }              
+            }
+        } else if (distance > 7) {
+            printf("distance =  %f\n",distance);
+            wait(0.5); // 1 sec
+        }
+    }
+
+}
+