Lawrence Lee
/
GPS_Buzzer_Alert_Helloworld
To do buzzer and send GPS data on serial using interrupt
main.cpp@0:94320e302b77, 2015-07-31 (annotated)
- Committer:
- joon874
- Date:
- Fri Jul 31 03:13:07 2015 +0000
- Revision:
- 0:94320e302b77
Send GPS data on UART to do buzzer alert using push switch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joon874 | 0:94320e302b77 | 1 | /* Example showing how to hook up to different GPS modules (GlobalSat EM406a and Adafruit Ultimate GPSv3) |
joon874 | 0:94320e302b77 | 2 | * to emulated serial ports at different speeds */ |
joon874 | 0:94320e302b77 | 3 | #include "mbed.h" |
joon874 | 0:94320e302b77 | 4 | #include "GPS.h" |
joon874 | 0:94320e302b77 | 5 | |
joon874 | 0:94320e302b77 | 6 | |
joon874 | 0:94320e302b77 | 7 | #ifdef TARGET_WIZwiki_W7500 |
joon874 | 0:94320e302b77 | 8 | GPS gpsAda(D1, D0, 9600); |
joon874 | 0:94320e302b77 | 9 | #else |
joon874 | 0:94320e302b77 | 10 | GPS gpsAda(P0_12, P0_15, 9600); |
joon874 | 0:94320e302b77 | 11 | GPS gpsSpark(P0_4, P0_0, 4800); |
joon874 | 0:94320e302b77 | 12 | #endif |
joon874 | 0:94320e302b77 | 13 | |
joon874 | 0:94320e302b77 | 14 | /* Private define ------------------------------------------------------------*/ |
joon874 | 0:94320e302b77 | 15 | #define Do3 131 //C octave3 |
joon874 | 0:94320e302b77 | 16 | #define Do3s 139 //C# |
joon874 | 0:94320e302b77 | 17 | #define Re3 147 //D |
joon874 | 0:94320e302b77 | 18 | #define Re3s 156//D# |
joon874 | 0:94320e302b77 | 19 | #define Mi3 165 //E |
joon874 | 0:94320e302b77 | 20 | #define Fa3 175 //F |
joon874 | 0:94320e302b77 | 21 | #define Fa3s 185 //F# |
joon874 | 0:94320e302b77 | 22 | #define So3 196 //G |
joon874 | 0:94320e302b77 | 23 | #define So3s 208 //G# |
joon874 | 0:94320e302b77 | 24 | #define La3 220 //A |
joon874 | 0:94320e302b77 | 25 | #define La3s 233 //A# |
joon874 | 0:94320e302b77 | 26 | #define Ti3 247 //B |
joon874 | 0:94320e302b77 | 27 | #define Do4 262 //C octave4 |
joon874 | 0:94320e302b77 | 28 | #define Do4s 277 //C# |
joon874 | 0:94320e302b77 | 29 | #define Re4 294 //D |
joon874 | 0:94320e302b77 | 30 | #define Re4s 311//D# |
joon874 | 0:94320e302b77 | 31 | #define Mi4 330 //E |
joon874 | 0:94320e302b77 | 32 | #define Fa4 349 //F |
joon874 | 0:94320e302b77 | 33 | #define Fa4s 370 //F# |
joon874 | 0:94320e302b77 | 34 | #define So4 392 //G |
joon874 | 0:94320e302b77 | 35 | #define So4s 415 //G# |
joon874 | 0:94320e302b77 | 36 | #define La4 440 //A |
joon874 | 0:94320e302b77 | 37 | #define La4s 466 //A# |
joon874 | 0:94320e302b77 | 38 | #define Ti4 494 //B |
joon874 | 0:94320e302b77 | 39 | #define Do5 523 //C octave5 |
joon874 | 0:94320e302b77 | 40 | #define Do5s 554 //C# |
joon874 | 0:94320e302b77 | 41 | #define Re5 587 //D |
joon874 | 0:94320e302b77 | 42 | #define Re5s 622//D# |
joon874 | 0:94320e302b77 | 43 | #define Mi5 659 //E |
joon874 | 0:94320e302b77 | 44 | #define Fa5 699 //F |
joon874 | 0:94320e302b77 | 45 | #define Fa5s 740 //F# |
joon874 | 0:94320e302b77 | 46 | #define So5 784 //G |
joon874 | 0:94320e302b77 | 47 | #define So5s 831 //G# |
joon874 | 0:94320e302b77 | 48 | #define La5 880 //A |
joon874 | 0:94320e302b77 | 49 | #define La5s 932 //A# |
joon874 | 0:94320e302b77 | 50 | #define Ti5 988 //B |
joon874 | 0:94320e302b77 | 51 | |
joon874 | 0:94320e302b77 | 52 | /* Private variables ---------------------------------------------------------*/ |
joon874 | 0:94320e302b77 | 53 | |
joon874 | 0:94320e302b77 | 54 | Serial pc(USBTX, USBRX); |
joon874 | 0:94320e302b77 | 55 | |
joon874 | 0:94320e302b77 | 56 | InterruptIn mysw(D7); |
joon874 | 0:94320e302b77 | 57 | DigitalOut myled1(LED1); |
joon874 | 0:94320e302b77 | 58 | DigitalOut myled2(LED2); |
joon874 | 0:94320e302b77 | 59 | |
joon874 | 0:94320e302b77 | 60 | PwmOut Buzzer(D5); |
joon874 | 0:94320e302b77 | 61 | |
joon874 | 0:94320e302b77 | 62 | float C_3 = 1000000/Do3, |
joon874 | 0:94320e302b77 | 63 | Cs_3 = 1000000/Do3s, |
joon874 | 0:94320e302b77 | 64 | D_3 = 1000000/Re3, |
joon874 | 0:94320e302b77 | 65 | Ds_3 = 1000000/Re3s, |
joon874 | 0:94320e302b77 | 66 | E_3 = 1000000/Mi3, |
joon874 | 0:94320e302b77 | 67 | F_3 = 1000000/Fa3, |
joon874 | 0:94320e302b77 | 68 | Fs_3 = 1000000/Fa3s, |
joon874 | 0:94320e302b77 | 69 | G_3 = 1000000/So3, |
joon874 | 0:94320e302b77 | 70 | Gs_3 = 1000000/So3s, |
joon874 | 0:94320e302b77 | 71 | A_3 = 1000000/La3, |
joon874 | 0:94320e302b77 | 72 | As_3 = 1000000/La3s, |
joon874 | 0:94320e302b77 | 73 | B_3 = 1000000/Ti3, |
joon874 | 0:94320e302b77 | 74 | C_4 = 1000000/Do4, |
joon874 | 0:94320e302b77 | 75 | Cs_4 = 1000000/Do4s, |
joon874 | 0:94320e302b77 | 76 | D_4 = 1000000/Re4, |
joon874 | 0:94320e302b77 | 77 | Ds_4 = 1000000/Re4s, |
joon874 | 0:94320e302b77 | 78 | E_4 = 1000000/Mi4, |
joon874 | 0:94320e302b77 | 79 | F_4 = 1000000/Fa4, |
joon874 | 0:94320e302b77 | 80 | Fs_4 = 1000000/Fa4s, |
joon874 | 0:94320e302b77 | 81 | G_4 = 1000000/So4, |
joon874 | 0:94320e302b77 | 82 | Gs_4 = 1000000/So4s, |
joon874 | 0:94320e302b77 | 83 | A_4 = 1000000/La4, |
joon874 | 0:94320e302b77 | 84 | As_4 = 1000000/La4s, |
joon874 | 0:94320e302b77 | 85 | B_4 = 1000000/Ti4, |
joon874 | 0:94320e302b77 | 86 | C_5 = 1000000/Do5, |
joon874 | 0:94320e302b77 | 87 | Cs_5 = 1000000/Do5s, |
joon874 | 0:94320e302b77 | 88 | D_5 = 1000000/Re5, |
joon874 | 0:94320e302b77 | 89 | Ds_5 = 1000000/Re5s, |
joon874 | 0:94320e302b77 | 90 | E_5 = 1000000/Mi5, |
joon874 | 0:94320e302b77 | 91 | F_5 = 1000000/Fa5, |
joon874 | 0:94320e302b77 | 92 | Fs_5 = 1000000/Fa5s, |
joon874 | 0:94320e302b77 | 93 | G_5 = 1000000/So5, |
joon874 | 0:94320e302b77 | 94 | Gs_5 = 1000000/So5s, |
joon874 | 0:94320e302b77 | 95 | A_5 = 1000000/La5, |
joon874 | 0:94320e302b77 | 96 | As_5 = 1000000/La5s, |
joon874 | 0:94320e302b77 | 97 | B_5 = 1000000/Ti5; |
joon874 | 0:94320e302b77 | 98 | |
joon874 | 0:94320e302b77 | 99 | int tones[] = {G_3, D_3, G_3, D_3, G_3, D_3, 0}; |
joon874 | 0:94320e302b77 | 100 | int tones_num = 8; |
joon874 | 0:94320e302b77 | 101 | |
joon874 | 0:94320e302b77 | 102 | /* Private function prototypes -----------------------------------------------*/ |
joon874 | 0:94320e302b77 | 103 | void Tune(PwmOut name, int period); |
joon874 | 0:94320e302b77 | 104 | void Auto_tunes(PwmOut name, int period); |
joon874 | 0:94320e302b77 | 105 | void Stop_tunes(PwmOut name); |
joon874 | 0:94320e302b77 | 106 | |
joon874 | 0:94320e302b77 | 107 | void exin(){ |
joon874 | 0:94320e302b77 | 108 | |
joon874 | 0:94320e302b77 | 109 | int i; |
joon874 | 0:94320e302b77 | 110 | char ch[] = {"Alert!"}; |
joon874 | 0:94320e302b77 | 111 | |
joon874 | 0:94320e302b77 | 112 | #ifndef TARGET_WIZwiki_W7500 |
joon874 | 0:94320e302b77 | 113 | if(gpsSpark.sample()) { |
joon874 | 0:94320e302b77 | 114 | pc.printf("set %s\t%f\t%f\t%f\t%f\t%f\n\r", ch1, gpsSpark.longitude, gpsSpark.latitude, gpsSpark.alt, gpsSpark.geoid, gpsSpark.time); |
joon874 | 0:94320e302b77 | 115 | } |
joon874 | 0:94320e302b77 | 116 | #endif |
joon874 | 0:94320e302b77 | 117 | if(gpsAda.sample()) { |
joon874 | 0:94320e302b77 | 118 | pc.printf("GPS %s \r\n longitude:%f \r\n latitude : %f \r\n", ch, gpsAda.longitude, gpsAda.latitude); |
joon874 | 0:94320e302b77 | 119 | pc.printf(" current time : %.0f\r\n",gpsAda.time-30000); |
joon874 | 0:94320e302b77 | 120 | pc.printf("\r\n\r\n"); |
joon874 | 0:94320e302b77 | 121 | } |
joon874 | 0:94320e302b77 | 122 | myled2 = !myled2; |
joon874 | 0:94320e302b77 | 123 | |
joon874 | 0:94320e302b77 | 124 | for(i=0; i<tones_num; i++) |
joon874 | 0:94320e302b77 | 125 | { |
joon874 | 0:94320e302b77 | 126 | Auto_tunes(Buzzer, tones[i]); // Auto performance |
joon874 | 0:94320e302b77 | 127 | Stop_tunes(Buzzer); |
joon874 | 0:94320e302b77 | 128 | } |
joon874 | 0:94320e302b77 | 129 | |
joon874 | 0:94320e302b77 | 130 | } |
joon874 | 0:94320e302b77 | 131 | |
joon874 | 0:94320e302b77 | 132 | int main() { |
joon874 | 0:94320e302b77 | 133 | |
joon874 | 0:94320e302b77 | 134 | pc.printf("Run now...\r\n"); |
joon874 | 0:94320e302b77 | 135 | |
joon874 | 0:94320e302b77 | 136 | mysw.rise(&exin); // attach the address of the exin function to the rising edge |
joon874 | 0:94320e302b77 | 137 | |
joon874 | 0:94320e302b77 | 138 | while(1) { // wait around, interrupts will interrupt this! |
joon874 | 0:94320e302b77 | 139 | myled1 = !myled1; |
joon874 | 0:94320e302b77 | 140 | wait(1.0); |
joon874 | 0:94320e302b77 | 141 | } |
joon874 | 0:94320e302b77 | 142 | } |
joon874 | 0:94320e302b77 | 143 | |
joon874 | 0:94320e302b77 | 144 | /** |
joon874 | 0:94320e302b77 | 145 | * @brief Auto tunes Function |
joon874 | 0:94320e302b77 | 146 | */ |
joon874 | 0:94320e302b77 | 147 | void Auto_tunes(PwmOut name, int period) |
joon874 | 0:94320e302b77 | 148 | { |
joon874 | 0:94320e302b77 | 149 | name.period_us(period); |
joon874 | 0:94320e302b77 | 150 | name.write(0.50f); // 50% duty cycle |
joon874 | 0:94320e302b77 | 151 | wait_ms(250); // 1/4 beat |
joon874 | 0:94320e302b77 | 152 | } |
joon874 | 0:94320e302b77 | 153 | |
joon874 | 0:94320e302b77 | 154 | void Stop_tunes(PwmOut name) |
joon874 | 0:94320e302b77 | 155 | { |
joon874 | 0:94320e302b77 | 156 | name.period_us(0); |
joon874 | 0:94320e302b77 | 157 | } |