ece 4180 lab 3

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem X_NUCLEO_53L0A1 HC_SR04_Ultrasonic_Library

Committer:
emilywilson
Date:
Wed Feb 19 18:48:09 2020 +0000
Revision:
2:4845e2dae429
led rtos

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilywilson 2:4845e2dae429 1 #include "mbed.h"
emilywilson 2:4845e2dae429 2 #include "XNucleo53L0A1.h"
emilywilson 2:4845e2dae429 3 #include <stdio.h>
emilywilson 2:4845e2dae429 4 Serial pc(USBTX,USBRX);
emilywilson 2:4845e2dae429 5 DigitalOut shdn(p25);
emilywilson 2:4845e2dae429 6 // This VL53L0X board test application performs a range measurement in polling mode
emilywilson 2:4845e2dae429 7 // Use 3.3(Vout) for Vin, p28 for SDA, p27 for SCL, P26 for shdn on mbed LPC1768
emilywilson 2:4845e2dae429 8
emilywilson 2:4845e2dae429 9 //I2C sensor pins
emilywilson 2:4845e2dae429 10 #define VL53L0_I2C_SDA p28
emilywilson 2:4845e2dae429 11 #define VL53L0_I2C_SCL p27
emilywilson 2:4845e2dae429 12
emilywilson 2:4845e2dae429 13 static XNucleo53L0A1 *board=NULL;
emilywilson 2:4845e2dae429 14
emilywilson 2:4845e2dae429 15 DigitalOut audio(p26); //output to speaker amp or audio jack
emilywilson 2:4845e2dae429 16 DigitalOut led(LED1);
emilywilson 2:4845e2dae429 17 DigitalOut led2(LED2);
emilywilson 2:4845e2dae429 18
emilywilson 2:4845e2dae429 19 //Timeout cycle;
emilywilson 2:4845e2dae429 20 Ticker cycle;
emilywilson 2:4845e2dae429 21
emilywilson 2:4845e2dae429 22 volatile int half_cycle_time = 1;
emilywilson 2:4845e2dae429 23
emilywilson 2:4845e2dae429 24 //two calls to this interrupt routine generates a square wave
emilywilson 2:4845e2dae429 25 void toggle_interrupt()
emilywilson 2:4845e2dae429 26 {
emilywilson 2:4845e2dae429 27 if (half_cycle_time>22000) audio=0; //mute if nothing in range
emilywilson 2:4845e2dae429 28 else audio = !audio; //toggle to make half a square wave
emilywilson 2:4845e2dae429 29 led = !led;
emilywilson 2:4845e2dae429 30 cycle.detach();
emilywilson 2:4845e2dae429 31 //update time for interrupt activation -change frequency of square wave
emilywilson 2:4845e2dae429 32 cycle.attach_us(&toggle_interrupt, half_cycle_time);
emilywilson 2:4845e2dae429 33 }
emilywilson 2:4845e2dae429 34
emilywilson 2:4845e2dae429 35 uint32_t distance;
emilywilson 2:4845e2dae429 36 void newdist()
emilywilson 2:4845e2dae429 37 {
emilywilson 2:4845e2dae429 38 //update frequency based on new sonar data
emilywilson 2:4845e2dae429 39 led2 = !led2;
emilywilson 2:4845e2dae429 40 half_cycle_time = (distance*10)<<3;
emilywilson 2:4845e2dae429 41 }
emilywilson 2:4845e2dae429 42
emilywilson 2:4845e2dae429 43 //Set the trigger pin to p6 and the echo pin to p7
emilywilson 2:4845e2dae429 44 //have updates every .07 seconds and a timeout after 1
emilywilson 2:4845e2dae429 45 //second, and call newdist when the distance changes
emilywilson 2:4845e2dae429 46 int run_lidar_theremin()
emilywilson 2:4845e2dae429 47 {
emilywilson 2:4845e2dae429 48 int status;
emilywilson 2:4845e2dae429 49 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
emilywilson 2:4845e2dae429 50 /* creates the 53L0A1 expansion board singleton obj */
emilywilson 2:4845e2dae429 51 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
emilywilson 2:4845e2dae429 52 shdn = 0; //must reset sensor for an mbed reset to work
emilywilson 2:4845e2dae429 53 wait(0.1);
emilywilson 2:4845e2dae429 54 shdn = 1;
emilywilson 2:4845e2dae429 55 wait(0.1);
emilywilson 2:4845e2dae429 56 /* init the 53L0A1 board with default values */
emilywilson 2:4845e2dae429 57 status = board->init_board();
emilywilson 2:4845e2dae429 58
emilywilson 2:4845e2dae429 59 while (status) {
emilywilson 2:4845e2dae429 60 pc.printf("Failed to init board! \r\n");
emilywilson 2:4845e2dae429 61 status = board->init_board();
emilywilson 2:4845e2dae429 62 }
emilywilson 2:4845e2dae429 63 //loop taking and printing distance
emilywilson 2:4845e2dae429 64
emilywilson 2:4845e2dae429 65 audio = 0;
emilywilson 2:4845e2dae429 66 led = 0;
emilywilson 2:4845e2dae429 67 cycle.attach(&toggle_interrupt, half_cycle_time);
emilywilson 2:4845e2dae429 68 while(1) {
emilywilson 2:4845e2dae429 69 //Do something else here
emilywilson 2:4845e2dae429 70 status = board->sensor_centre->get_distance(&distance);
emilywilson 2:4845e2dae429 71 newdist();
emilywilson 2:4845e2dae429 72 pc.printf("distance %d", distance);
emilywilson 2:4845e2dae429 73 //call checkDistance() as much as possible, as this is where
emilywilson 2:4845e2dae429 74 //the class checks if dist needs to be called.
emilywilson 2:4845e2dae429 75 }
emilywilson 2:4845e2dae429 76 }