People Counter / Mbed 2 deprecated person_counter

Dependencies:   mbed mbed-rtos 4DGL-uLCD-SE HC_SR04_Ultrasonic_Library

Committer:
rmalik8
Date:
Fri Apr 24 05:27:31 2020 +0000
Revision:
12:bebfef8d229f
Parent:
11:f5d0c8bf1849
Child:
13:3ba367bc16bc
added SongPlayer and sound thread - disabled waveplayer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mmarine3 2:1ec843c95914 1 #include "mbed.h"
rmalik8 4:7d02b3f3bee6 2 #include "rtos.h"
rmalik8 12:bebfef8d229f 3 //#include "SDFileSystem.h"
mmarine3 2:1ec843c95914 4 #include "uLCD_4DGL.h"
rmalik8 4:7d02b3f3bee6 5 #include "ultrasonic.h"
rmalik8 12:bebfef8d229f 6 //#include "wave_player.h"
rmalik8 12:bebfef8d229f 7 #include "SongPlayer.h"
rmalik8 4:7d02b3f3bee6 8
rmalik8 3:b5cdd40e99e9 9 //#include <stdio.h>
mmarine3 2:1ec843c95914 10 #include <string>
mmarine3 2:1ec843c95914 11
rmalik8 4:7d02b3f3bee6 12
mmarine3 9:f4f03767acc0 13 uLCD_4DGL uLCD(p13, p14, p12); // Initialize uLCD serial tx, serial rx, reset pin;
rmalik8 4:7d02b3f3bee6 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
rmalik8 10:7a939a54515e 15 RawSerial blue(p9,p10); //Initialize Blutooth
rmalik8 12:bebfef8d229f 16 //Serial BT(p9,p10);
rmalik8 12:bebfef8d229f 17
rmalik8 12:bebfef8d229f 18 //waiting to figure out if sd card works
rmalik8 12:bebfef8d229f 19 //AnalogOut speaker(p18); //Initialize speaker
rmalik8 12:bebfef8d229f 20 //wave_player waver(&speaker); //Initialize Waveplayer
rmalik8 12:bebfef8d229f 21
rmalik8 10:7a939a54515e 22 Mutex serial_mutex;
mmarine3 8:c0a6a3363e43 23 Mutex dist;
mmarine3 2:1ec843c95914 24 DigitalOut MyLED(LED1);
mmarine3 2:1ec843c95914 25
rmalik8 10:7a939a54515e 26 volatile int musicChoice = 0;
rmalik8 10:7a939a54515e 27 //musicChoice can be values 0 to 3
rmalik8 11:f5d0c8bf1849 28 volatile int sdist = 0;
rmalik8 12:bebfef8d229f 29 volatile int counter = 0;
rmalik8 12:bebfef8d229f 30
rmalik8 12:bebfef8d229f 31 float note1[2]= {1568.0, 0.0
rmalik8 12:bebfef8d229f 32 };
rmalik8 12:bebfef8d229f 33 float note2[2]= {1568.0, 0.0
rmalik8 12:bebfef8d229f 34 };
rmalik8 12:bebfef8d229f 35 float note3[2]= {1568.0, 0.0
rmalik8 12:bebfef8d229f 36 };
rmalik8 12:bebfef8d229f 37 float duration[2]= {1, 0.0
rmalik8 12:bebfef8d229f 38 };
rmalik8 12:bebfef8d229f 39
rmalik8 12:bebfef8d229f 40
mmarine3 9:f4f03767acc0 41 void sonar(int distance)
rmalik8 4:7d02b3f3bee6 42 {
rmalik8 4:7d02b3f3bee6 43 //put code here to execute when the sonar distance has changed
mmarine3 9:f4f03767acc0 44 dist.lock();
mmarine3 9:f4f03767acc0 45 sdist = distance;
mmarine3 9:f4f03767acc0 46 dist.unlock();
rmalik8 12:bebfef8d229f 47 //printf("Sonar Distance:\r\n %d", sdist);
mmarine3 9:f4f03767acc0 48 }
rmalik8 4:7d02b3f3bee6 49
mmarine3 9:f4f03767acc0 50 ultrasonic mu(p30, p29, .1, 1, &sonar); //Set the trigger pin to p30 and the echo pin to p29
rmalik8 12:bebfef8d229f 51 //have updates every .1 seconds and a timeout after 1
rmalik8 12:bebfef8d229f 52 //second, and call sonar when the distance changes
mmarine3 9:f4f03767acc0 53
mmarine3 9:f4f03767acc0 54 void Sonar(void const* arguments)
mmarine3 9:f4f03767acc0 55 {
mmarine3 9:f4f03767acc0 56 mu.startUpdates();//start measuring the distance
rmalik8 12:bebfef8d229f 57 while(1) {
mmarine3 9:f4f03767acc0 58 //Do something else here
mmarine3 9:f4f03767acc0 59 mu.checkDistance(); //call checkDistance() as much as possible, as this is where
rmalik8 12:bebfef8d229f 60 //the class checks if dist needs to be called.
mmarine3 9:f4f03767acc0 61 Thread::wait(10);
rmalik8 4:7d02b3f3bee6 62 }
rmalik8 4:7d02b3f3bee6 63 }
mmarine3 2:1ec843c95914 64
mmarine3 8:c0a6a3363e43 65 //Thread to print the TOF and Sonar Values to the LCD
mmarine3 8:c0a6a3363e43 66 void LCD(void const *arguments)
mmarine3 8:c0a6a3363e43 67 {
mmarine3 8:c0a6a3363e43 68 Thread::wait(1000); //Wait for lidar and sonar setup
rmalik8 12:bebfef8d229f 69 serial_mutex.lock();
rmalik8 12:bebfef8d229f 70 uLCD.cls();
rmalik8 12:bebfef8d229f 71 uLCD.baudrate(BAUD_3000000);
rmalik8 12:bebfef8d229f 72 serial_mutex.unlock();
rmalik8 12:bebfef8d229f 73 while(1) {
rmalik8 10:7a939a54515e 74 serial_mutex.lock();
mmarine3 8:c0a6a3363e43 75 uLCD.cls();
mmarine3 8:c0a6a3363e43 76 dist.lock();
rmalik8 12:bebfef8d229f 77 uLCD.printf("Sonar Distance:\n %d", sdist);
mmarine3 8:c0a6a3363e43 78 dist.unlock();
rmalik8 10:7a939a54515e 79 serial_mutex.unlock();
mmarine3 8:c0a6a3363e43 80 Thread::wait(1000); //Allow time to read value before reprint
rmalik8 12:bebfef8d229f 81
rmalik8 12:bebfef8d229f 82 }
rmalik8 12:bebfef8d229f 83 }
rmalik8 12:bebfef8d229f 84
rmalik8 12:bebfef8d229f 85 void sounds(void const *arguments)
rmalik8 12:bebfef8d229f 86 {
rmalik8 12:bebfef8d229f 87 int last_counter = 0;
rmalik8 12:bebfef8d229f 88 // setup instance of new SongPlayer class, mySpeaker using pin 26
rmalik8 12:bebfef8d229f 89 // the pin must be a PWM output pin
rmalik8 12:bebfef8d229f 90 SongPlayer mySpeaker(p26);
rmalik8 12:bebfef8d229f 91 // Start song and return once playing starts
rmalik8 12:bebfef8d229f 92 //mySpeaker.PlaySong(note1,duration);
rmalik8 12:bebfef8d229f 93 while(1) {
rmalik8 12:bebfef8d229f 94 if (counter > last_counter) {
rmalik8 12:bebfef8d229f 95 switch (musicChoice) {
rmalik8 12:bebfef8d229f 96 case '0':
rmalik8 12:bebfef8d229f 97 //do nothing
rmalik8 12:bebfef8d229f 98 break;
rmalik8 12:bebfef8d229f 99 case '1':
rmalik8 12:bebfef8d229f 100 mySpeaker.PlaySong(note1,duration);
rmalik8 12:bebfef8d229f 101 break;
rmalik8 12:bebfef8d229f 102 case '2':
rmalik8 12:bebfef8d229f 103 mySpeaker.PlaySong(note2,duration);
rmalik8 12:bebfef8d229f 104 break;
rmalik8 12:bebfef8d229f 105 case '3':
rmalik8 12:bebfef8d229f 106 mySpeaker.PlaySong(note3,duration);
rmalik8 12:bebfef8d229f 107 break;
rmalik8 12:bebfef8d229f 108 default:
rmalik8 12:bebfef8d229f 109 break;
rmalik8 12:bebfef8d229f 110 }
rmalik8 12:bebfef8d229f 111 }
rmalik8 12:bebfef8d229f 112 last_counter = counter;
rmalik8 12:bebfef8d229f 113 Thread::wait(100);
mmarine3 8:c0a6a3363e43 114 }
mmarine3 8:c0a6a3363e43 115 }
mmarine3 8:c0a6a3363e43 116
rmalik8 10:7a939a54515e 117 void bluetooth(void const *arguments)
rmalik8 10:7a939a54515e 118 {
rmalik8 10:7a939a54515e 119 char bnum=0;
rmalik8 10:7a939a54515e 120 char bhit=0;
rmalik8 12:bebfef8d229f 121 while(1) {
rmalik8 10:7a939a54515e 122 serial_mutex.lock();
rmalik8 12:bebfef8d229f 123 if(!blue.readable()) {
rmalik8 12:bebfef8d229f 124 Thread::yield();
rmalik8 10:7a939a54515e 125 } else {
rmalik8 12:bebfef8d229f 126 if (blue.getc()=='!') {
rmalik8 12:bebfef8d229f 127 if (blue.getc()=='B') { //button data packet
rmalik8 12:bebfef8d229f 128 bnum = blue.getc(); //button number
rmalik8 12:bebfef8d229f 129 bhit = blue.getc(); //1=hit, 0=release
rmalik8 12:bebfef8d229f 130 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
rmalik8 12:bebfef8d229f 131
rmalik8 12:bebfef8d229f 132 switch (bnum) {
rmalik8 12:bebfef8d229f 133 case '1': //number button 1
rmalik8 12:bebfef8d229f 134 if (bhit=='1') {
rmalik8 12:bebfef8d229f 135 musicChoice = 0;
rmalik8 12:bebfef8d229f 136 } else {
rmalik8 12:bebfef8d229f 137 //add release code here
rmalik8 12:bebfef8d229f 138 }
rmalik8 12:bebfef8d229f 139 break;
rmalik8 12:bebfef8d229f 140 case '2': //number button 2
rmalik8 12:bebfef8d229f 141 if (bhit=='1') {
rmalik8 12:bebfef8d229f 142 musicChoice = 1;
rmalik8 12:bebfef8d229f 143 } else {
rmalik8 12:bebfef8d229f 144 //add release code here
rmalik8 12:bebfef8d229f 145 }
rmalik8 12:bebfef8d229f 146 break;
rmalik8 12:bebfef8d229f 147 case '3': //number button 3
rmalik8 12:bebfef8d229f 148 if (bhit=='1') {
rmalik8 12:bebfef8d229f 149 musicChoice = 2;
rmalik8 12:bebfef8d229f 150 } else {
rmalik8 12:bebfef8d229f 151 //add release code here
rmalik8 12:bebfef8d229f 152 }
rmalik8 12:bebfef8d229f 153 break;
rmalik8 12:bebfef8d229f 154 case '4': //number button 4
rmalik8 12:bebfef8d229f 155 if (bhit=='1') {
rmalik8 12:bebfef8d229f 156 //add hit code here
rmalik8 12:bebfef8d229f 157 } else {
rmalik8 12:bebfef8d229f 158 //add release code here
rmalik8 12:bebfef8d229f 159 }
rmalik8 12:bebfef8d229f 160 break;
rmalik8 12:bebfef8d229f 161 case '5': //button 5 up arrow
rmalik8 12:bebfef8d229f 162 if (bhit=='1') {
rmalik8 12:bebfef8d229f 163 musicChoice = 3;
rmalik8 12:bebfef8d229f 164 } else {
rmalik8 12:bebfef8d229f 165 //add release code here
rmalik8 12:bebfef8d229f 166 }
rmalik8 12:bebfef8d229f 167 break;
rmalik8 12:bebfef8d229f 168 case '6': //button 6 down arrow
rmalik8 12:bebfef8d229f 169 if (bhit=='1') {
rmalik8 12:bebfef8d229f 170 //add hit code here
rmalik8 12:bebfef8d229f 171 } else {
rmalik8 12:bebfef8d229f 172 //add release code here
rmalik8 12:bebfef8d229f 173 }
rmalik8 12:bebfef8d229f 174 break;
rmalik8 12:bebfef8d229f 175 case '7': //button 7 left arrow
rmalik8 12:bebfef8d229f 176 if (bhit=='1') {
rmalik8 12:bebfef8d229f 177 //add hit code here
rmalik8 12:bebfef8d229f 178 } else {
rmalik8 12:bebfef8d229f 179 //add release code here
rmalik8 12:bebfef8d229f 180 }
rmalik8 12:bebfef8d229f 181 break;
rmalik8 12:bebfef8d229f 182 case '8': //button 8 right arrow
rmalik8 12:bebfef8d229f 183 if (bhit=='1') {
rmalik8 12:bebfef8d229f 184 //add hit code here
rmalik8 12:bebfef8d229f 185 } else {
rmalik8 12:bebfef8d229f 186 //add release code here
rmalik8 12:bebfef8d229f 187 }
rmalik8 12:bebfef8d229f 188 break;
rmalik8 12:bebfef8d229f 189 default:
rmalik8 12:bebfef8d229f 190 break;
rmalik8 12:bebfef8d229f 191 }
rmalik8 10:7a939a54515e 192 }
rmalik8 10:7a939a54515e 193 }
rmalik8 10:7a939a54515e 194 }
rmalik8 10:7a939a54515e 195 }
rmalik8 10:7a939a54515e 196 serial_mutex.unlock();
rmalik8 10:7a939a54515e 197 }
rmalik8 10:7a939a54515e 198 }
rmalik8 10:7a939a54515e 199
mmarine3 2:1ec843c95914 200 int main()
mmarine3 2:1ec843c95914 201 {
rmalik8 12:bebfef8d229f 202
mmarine3 7:85d42006e380 203 //wait(1.0);
mmarine3 7:85d42006e380 204
mmarine3 7:85d42006e380 205 //blu.attach(&parse_message,Serial::RxIrq);
rmalik8 12:bebfef8d229f 206 //Was used in lab 3 to interupt if reading in a blutooth command
mmarine3 7:85d42006e380 207 //Thread t#(name_of_thread_function);
mmarine3 8:c0a6a3363e43 208 Thread t1(LCD);//Initialize LCD thread
mmarine3 9:f4f03767acc0 209 Thread t2(Sonar);//Initialize Sonar thread
rmalik8 12:bebfef8d229f 210
rmalik8 12:bebfef8d229f 211
mmarine3 8:c0a6a3363e43 212 /* //Code to read and play a file
mmarine3 7:85d42006e380 213 FILE *wave_file;
mmarine3 7:85d42006e380 214 //printf("Hello World");
mmarine3 7:85d42006e380 215 Thread::wait(1000);
mmarine3 7:85d42006e380 216 wave_file=fopen("/sd/test.wav","r");
mmarine3 7:85d42006e380 217 //serial_mutex.lock();
mmarine3 7:85d42006e380 218 if(wave_file==NULL) printf("file open error!\n\n\r");
mmarine3 7:85d42006e380 219 //serial_mutex.unlock();
mmarine3 7:85d42006e380 220 waver.play(wave_file);
mmarine3 7:85d42006e380 221 fclose(wave_file);
mmarine3 8:c0a6a3363e43 222 */
rmalik8 12:bebfef8d229f 223
mmarine3 8:c0a6a3363e43 224 //Loop to validate the main loop is executing
rmalik8 12:bebfef8d229f 225 while(1) {
mmarine3 9:f4f03767acc0 226 //MyLED = !MyLED;
mmarine3 9:f4f03767acc0 227 //Thread::wait(100);
mmarine3 8:c0a6a3363e43 228 }
mmarine3 2:1ec843c95914 229 }