ECE3872 HW/SW Project Code

Dependencies:   mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1

Files at this revision

API Documentation at this revision

Comitter:
trmontgomery
Date:
Mon Apr 13 02:43:08 2020 +0000
Parent:
17:11c46079d674
Child:
25:7764baddb7bc
Commit message:
all files successfully merged

Changed in this revision

audio_out.h Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
motor_ctl.h Show annotated file Show diff for this revision Revisions of this file
speaker_out.h Show annotated file Show diff for this revision Revisions of this file
speakerout3.h Show diff for this revision Revisions of this file
--- a/audio_out.h	Mon Apr 13 02:23:16 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*#include "mbed.h"
-#include "XNucleo53L0A1.h"
-#include <stdio.h>
-#include "Speaker.h"
-
-Serial pc(USBTX,USBRX);
-DigitalOut shdn(p26);
-#define VL53L0_I2C_SDA   p28
-#define VL53L0_I2C_SCL   p27
-
-static XNucleo53L0A1 *board=NULL;
-uint32_t distance;
-
-bool state = false;
-Speaker mySpeaker(p22);
-double freq [30];
-
-double *record(double freq1[30]) 
-{
-    double freq2;
-    int status;
-    uint32_t distance;
-    DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
-    /* creates the 53L0A1 expansion board singleton obj 
-    board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
-    shdn = 0; //must reset sensor for an mbed reset to work
-    wait(0.1);
-    shdn = 1;
-    wait(0.1);
-    /* init the 53L0A1 board with default values 
-    status = board->init_board();
-    while (status) {
-        status = board->init_board();
-    }
-    for(int i = 0; i<30; i++)
-    {
-        status = board->sensor_centre->get_distance(&distance);
-        if (status == VL53L0X_ERROR_NONE) {
-            if (distance < 58){
-                freq2 = 523.25;
-                }
-            else if(distance >= 58 && distance < 116){
-                freq2 = 554.37;
-                }
-            else if(distance >= 116 && distance < 174){
-                freq2 = 587.33;
-                }
-            else if(distance >= 174 && distance < 232){
-                freq2 = 622.25;
-                }
-            else if(distance >= 232 && distance < 290){
-                freq2 = 659.26;
-                }
-            else if(distance >= 290 && distance < 348){
-                freq2 = 698.46;
-                }
-            else if(distance >= 348 && distance < 406){
-                freq2 = 739.99;
-                }
-            else if(distance >= 406 && distance < 464){
-                freq2 = 783.99;
-                }
-            else if(distance >= 464 && distance < 522){
-                freq2 = 830.61;
-                }
-            else if(distance >= 522 && distance < 580){
-                freq2 = 880.00;
-                }
-            else if(distance >= 580 && distance < 638){
-                freq2 = 932.33;
-                }
-            else {
-                freq2 = 987.77;
-                }
-            freq1[i] = freq2;
-            wait (1);
-            }
-    }
-    return freq1;
-}
-
-void record_and_play()
-{
-    while (1)
-    {
-        if (state == false){
-            record(freq);
-            state = true;
-        }
-        if (state == true){
-            for (int i = 0; i<30; i++){
-                mySpeaker.PlayNote(freq[i],1.0,0.1);
-            }
-        state = false;
-        }
-    }
-}
-*/
\ No newline at end of file
--- a/main.cpp	Mon Apr 13 02:23:16 2020 +0000
+++ b/main.cpp	Mon Apr 13 02:43:08 2020 +0000
@@ -1,7 +1,6 @@
 #include "mbed.h"
 #include <iostream>
-#include "audio_out.h"
-#include "PinDetect.h"
+#include "speaker_out.h"
 #include "uLCD_4DGL.h"
 #include "motor_ctl.h"
 DigitalOut myled1(LED1);
@@ -9,13 +8,6 @@
 DigitalOut myled3(LED3);
 DigitalOut myled4(LED4);
 
-// Push buttons init
-PinDetect pb1(p16); 
-PinDetect pb2(p17);  
-PinDetect pb3(p18); 
-PinDetect pb4(p19); 
-// States 
-
 //  State Machine control global variables
 bool X;     //reset
 bool P;     //play
@@ -25,7 +17,6 @@
 
 enum sm_state {sRESET, sSTOP, sRECORD, sPLAY, sERASE};
 
-
 void reset(){ 
     /* reset state:
         Initial state upon powering up the device
@@ -71,90 +62,99 @@
     */
 }
 
-
-
-void pb1_hit_callback (void) 
-{
-    myled1 = !myled1; 
-    //guLCD.printf("REEST");
-}
-
-void pb2_hit_callback (void)
-{
-    myled2 = !myled2; 
-    //guLCD.printf("STOP");
-}
-
-void pb3_hit_callback (void) 
-{
-    myled3 = !myled3; 
-    //guLCD.printf("RECORD");
-}
-
-void pb4_hit_callback (void) 
-{
-    myled4 = !myled4; 
-    //guLCD.printf("PLAY");
-}
-void hardware_init(){ 
-    // Push buttons init
-    pb1.mode(PullUp); 
-    pb2.mode(PullUp); 
-    pb3.mode(PullUp);
-    pb4.mode(PullUp);
-    pb1.attach_deasserted(&pb1_hit_callback);
-    pb2.attach_deasserted(&pb2_hit_callback); 
-    pb3.attach_deasserted(&pb3_hit_callback);
-    pb4.attach_deasserted(&pb4_hit_callback);
-    pb1.setSampleFrequency(); 
-    pb2.setSampleFrequency(); 
-    pb3.setSampleFrequency();
-    pb4.setSampleFrequency();
-}
-
 void state_machine_mgr(){
-    sm_state curr_state =  sRESET;
+    char curr_state =  1;
+    char key_input;
+    X = 1;
+    S = 0;
+    R = 0;
+    P = 0;
+    E = 0;
     while(1) {
+        if (pc.readable()) {                // if they have pressed a key
+            key_input = pc.getc();
+            if(key_input == '1') X=1;   //toggle reset
+            if(key_input == '2') S=1;   //toggle stop
+            if(key_input == '3') R=1;   //toogle record
+            if(key_input == '4') P=1;   //toggle play
+            if(key_input == '5') E=1;   //toggle erase
+        }
+        //pc.printf("X: %d\n",X);
+//        pc.printf("S: %d\n",S);
+//        pc.printf("R: %d\n",R);
+//        pc.printf("P: %d\n",P);
+//        pc.printf("E: %d\n",E);
+//        pc.printf("Current State %d\n",curr_state);
         switch(curr_state){
-            case sRESET:
-                if(S) curr_state = sSTOP;
+            case 1:
+                pc.printf("RESET\n");
+                P = 0;
+                R = 0;
+                if(E){
+                    curr_state = 5;
+                    X = 0;
+                }else if(S){
+                    curr_state = 2;
+                    X = 0;
+                }
+                reset();
                 break;
-            case sSTOP:
-                if(X){
-                    curr_state = sRESET;
-                }else if(S&R){
-                    curr_state = sRECORD;
-                }else if(S&P){
-                    curr_state = sPLAY;
-                }
-                break;
-            case sRECORD:
+            case 2:
+                pc.printf("STOP\n");
+                E = 0;
                 if(X){
-                    curr_state = sRESET;
-                }else if(R&S){
-                    curr_state = sSTOP;
-                }else if(R&P){
-                    curr_state = sPLAY;
+                    curr_state = 1;
+                    S = 0;
+                }else if(R){
+                    curr_state = 3;
+                    S = 0;
+                }else if(P){
+                    curr_state = 4;
+                    S = 0;
                 }
+                stop();
                 break;
-            case sPLAY:
+            case 3:
+                pc.printf("RECORD\n");
+                E = 0;
+                P = 0;
                 if(X){
-                    curr_state = sRESET;
-                }else if(P&S){
-                    curr_state = sSTOP;
-                }else if(P&R){
-                    curr_state = sPLAY;
+                    curr_state = 1;
+                    R = 0;
+                }else if(S){
+                    curr_state = 2;
+                    R = 0;
                 }
+                record();
                 break;
-            case sERASE:
+            case 4:
+                pc.printf("PLAY\n");
+                E = 0;
+                R = 0;
                 if(X){
-                    curr_state = sRESET;
+                    curr_state = 1;
+                    P = 0;
+                }else if(S){
+                    curr_state = 2;
+                    P = 0;
                 }
+                play();
+                break;
+            case 5:
+                pc.printf("ERASE\n");
+                S = 0;
+                P = 0;
+                R = 0;
+                if(X){
+                    curr_state = 1;
+                    E = 0;
+                }
+                erase();
+                break;
         }
     }
 }
 
-
 int main() {
     myled1 = 1; 
     //hardware_init();
--- a/motor_ctl.h	Mon Apr 13 02:23:16 2020 +0000
+++ b/motor_ctl.h	Mon Apr 13 02:43:08 2020 +0000
@@ -2,7 +2,7 @@
 
 #include "mbed.h"
 #include "Servo.h"
-//#include "rtos.h"
+#include "rtos.h"
 
 Servo r_arm(p24);
 Servo l_arm(p23);
@@ -21,15 +21,15 @@
 //and then the distance can just control the height
 //movement pattern can be random.. right now every other note recorded will be distributed to one side and the rest will go to the other
 
-unsigned char move_map {0x149, 0x14A, 0x14C, 0x151, 0x152, 0x154, 0x291, 0x292, 0x294, 0x2A1, 0x2A2, 0x2A4};
-unsigned char ra_mask = 0x0C0;
-unsigned char la_mask = 0x300;
-unsigned char rl_mask = 0x03C;
-unsigned char ll_mask = 0x007; 
+unsigned short move_map[] {0x149, 0x14A, 0x14C, 0x151, 0x152, 0x154, 0x291, 0x292, 0x294, 0x2A1, 0x2A2, 0x2A4};
+unsigned short ra_mask = 0x0C0;
+unsigned short la_mask = 0x300;
+unsigned short rl_mask = 0x03C;
+unsigned short ll_mask = 0x007; 
 
 //for testing run through move map
 
-void ra_dance(unsigned char move) {    
+void ra_dance(unsigned short move) {    
     if (move & ra_mask == 0x040){
         r_arm.write(.50);
     } else {
@@ -38,7 +38,7 @@
     
 }
 
-void la_dance() {    
+void la_dance(unsigned short move) {    
      if (move & ra_mask == 0x100){
         l_arm.write(.50);
     } else {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/speaker_out.h	Mon Apr 13 02:43:08 2020 +0000
@@ -0,0 +1,90 @@
+#include "mbed.h"
+#include "Speaker.h"
+
+
+Serial pc(USBTX,USBRX);
+Speaker mySpeaker(p26);
+
+Timer t;
+
+
+char note;
+float freq [100];
+float freq2;
+float limit;
+
+float *record(float freq1[100]) {
+    t.start();
+    for(int i = 0; i<100; i++){
+        pc.printf("Please enter note\n");
+        note = pc.getc();
+        switch (note){
+            case 'a':
+                freq2 = 523.25;
+                break;
+            
+            case 'b':
+                freq2 = 554.37;
+                break;
+            
+            case 'c':
+                freq2 = 587.33;
+                break;
+            
+            case 'd':
+                freq2 = 622.25;
+                break;
+            
+            case 'e':
+                freq2 = 659.26;
+                break;
+            
+            case 'f':
+                freq2 = 698.46;
+                break;
+            
+            case 'g':
+                freq2 = 739.99;
+                break;
+            
+            case 'h':
+                freq2 = 783.99;
+                break;
+            
+            case 'i':
+                freq2 = 830.61;
+                break;
+            
+            case 'j':
+                freq2 = 880.00;
+                break;
+            
+            case 'k':
+                freq2 = 932.33;
+                break;
+            
+            case 'l':
+                freq2 = 987.77;
+                break;
+            }
+            freq1[i] = freq2;
+            limit = t.read();
+            if(limit > 30){
+                t.stop();
+                break;
+            }
+        }
+    return freq1;
+    }
+
+
+void audio_out() {
+    record(freq);
+    for (int i = 0; i<100; i++){
+        if (freq[i] == 0){
+            }
+        else{
+            mySpeaker.PlayNote(freq[i],1.0,0.1);
+        }
+    }
+}
--- a/speakerout3.h	Mon Apr 13 02:23:16 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#include "mbed.h"
-#include "Speaker.h"
-
-
-Serial pc(USBTX,USBRX);
-Speaker mySpeaker(p26);
-
-Timer t;
-
-
-char note;
-float freq [100];
-float freq2;
-float limit;
-
-float *record(float freq1[100]) {
-    t.start();
-    for(int i = 0; i<100; i++){
-        pc.printf("Please enter note\n");
-        note = pc.getc();
-        switch (note){
-            case 'a':
-                freq2 = 523.25;
-                break;
-            
-            case 'b':
-                freq2 = 554.37;
-                break;
-            
-            case 'c':
-                freq2 = 587.33;
-                break;
-            
-            case 'd':
-                freq2 = 622.25;
-                break;
-            
-            case 'e':
-                freq2 = 659.26;
-                break;
-            
-            case 'f':
-                freq2 = 698.46;
-                break;
-            
-            case 'g':
-                freq2 = 739.99;
-                break;
-            
-            case 'h':
-                freq2 = 783.99;
-                break;
-            
-            case 'i':
-                freq2 = 830.61;
-                break;
-            
-            case 'j':
-                freq2 = 880.00;
-                break;
-            
-            case 'k':
-                freq2 = 932.33;
-                break;
-            
-            case 'l':
-                freq2 = 987.77;
-                break;
-            }
-            freq1[i] = freq2;
-            limit = t.read();
-            if(limit > 30){
-                t.stop();
-                break;
-            }
-        }
-    return freq1;
-    }
-
-
-int main() {
-    record(freq);
-    for (int i = 0; i<100; i++){
-        if (freq[i] == 0){
-            }
-        else{
-            mySpeaker.PlayNote(freq[i],1.0,0.1);
-        }
-    }
-}