12Oct2012MBEDLab3Project
Dependencies: DebounceIn EthernetNetIf FatFileSystem HTTPClient Motor SDFileSystem TextLCD mbed
main.cpp@1:098c1e0989ee, 2012-10-12 (annotated)
- Committer:
- psawant9
- Date:
- Fri Oct 12 16:07:36 2012 +0000
- Revision:
- 1:098c1e0989ee
- Parent:
- 0:814bd1653303
12Oct2012mbedLab3Project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
psawant9 | 0:814bd1653303 | 1 | #include "mbed.h" |
psawant9 | 0:814bd1653303 | 2 | #include "VS1002.h" |
psawant9 | 0:814bd1653303 | 3 | #include "TextLCD.h" |
psawant9 | 0:814bd1653303 | 4 | #include "EthernetNetIf.h" |
psawant9 | 0:814bd1653303 | 5 | #include "HTTPClient.h" |
psawant9 | 0:814bd1653303 | 6 | #include "DebounceIn.h" |
psawant9 | 0:814bd1653303 | 7 | #include "Motor.h" |
psawant9 | 0:814bd1653303 | 8 | #include <string> |
psawant9 | 0:814bd1653303 | 9 | #include<stdlib.h> |
psawant9 | 0:814bd1653303 | 10 | #define PI 3.14 |
psawant9 | 0:814bd1653303 | 11 | #define DIAMETER 0.076 |
psawant9 | 0:814bd1653303 | 12 | #define MINIMUM_FARE 11 |
psawant9 | 0:814bd1653303 | 13 | #define FARE_PER_KM 10 |
psawant9 | 0:814bd1653303 | 14 | |
psawant9 | 0:814bd1653303 | 15 | TextLCD fareDisplay(p10, p18, p24, p23, p22, p21 ); |
psawant9 | 0:814bd1653303 | 16 | VS1002 audioDriver(p11, p12, p13, p8, "sd", |
psawant9 | 0:814bd1653303 | 17 | p5, p6, p7, p14, p15, |
psawant9 | 0:814bd1653303 | 18 | p16, p17, p20); |
psawant9 | 0:814bd1653303 | 19 | EthernetNetIf ethernet; |
psawant9 | 0:814bd1653303 | 20 | HTTPClient http; |
psawant9 | 0:814bd1653303 | 21 | AnalogIn sensorReading(p19); |
psawant9 | 0:814bd1653303 | 22 | DebounceIn setup(p9); |
psawant9 | 0:814bd1653303 | 23 | DebounceIn startMeter(p20); |
psawant9 | 0:814bd1653303 | 24 | DebounceIn stopMeter(p30); |
psawant9 | 0:814bd1653303 | 25 | DebounceIn playFare(p29); |
psawant9 | 0:814bd1653303 | 26 | Motor m(p25, p26, p27); |
psawant9 | 0:814bd1653303 | 27 | |
psawant9 | 0:814bd1653303 | 28 | void initializeAudioDriver() |
psawant9 | 0:814bd1653303 | 29 | { |
psawant9 | 0:814bd1653303 | 30 | #ifndef FS_ONLY |
psawant9 | 0:814bd1653303 | 31 | audioDriver._RST = 1; |
psawant9 | 0:814bd1653303 | 32 | audioDriver.cs_high(); |
psawant9 | 0:814bd1653303 | 33 | audioDriver.sci_initialise(); |
psawant9 | 0:814bd1653303 | 34 | audioDriver.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF)); |
psawant9 | 0:814bd1653303 | 35 | audioDriver.sci_write(0x03, 0x9800); |
psawant9 | 0:814bd1653303 | 36 | audioDriver.sdi_initialise(); |
psawant9 | 0:814bd1653303 | 37 | #endif |
psawant9 | 0:814bd1653303 | 38 | } |
psawant9 | 0:814bd1653303 | 39 | |
psawant9 | 0:814bd1653303 | 40 | float calculateFare(int noOfRevolutions) |
psawant9 | 0:814bd1653303 | 41 | { |
psawant9 | 0:814bd1653303 | 42 | float distanceinKM; |
psawant9 | 0:814bd1653303 | 43 | distanceinKM = noOfRevolutions*PI*DIAMETER;//For Demo purposes we do not divide by 1000 as would be in real scenario. |
psawant9 | 0:814bd1653303 | 44 | float fare; |
psawant9 | 0:814bd1653303 | 45 | if(distanceinKM>1) |
psawant9 | 0:814bd1653303 | 46 | fare = MINIMUM_FARE + FARE_PER_KM*(distanceinKM - 1); // Formula can be changed as per required or can be taken dynamically from a web server |
psawant9 | 0:814bd1653303 | 47 | else |
psawant9 | 0:814bd1653303 | 48 | fare = MINIMUM_FARE; |
psawant9 | 0:814bd1653303 | 49 | return fare; |
psawant9 | 0:814bd1653303 | 50 | } |
psawant9 | 0:814bd1653303 | 51 | |
psawant9 | 0:814bd1653303 | 52 | |
psawant9 | 0:814bd1653303 | 53 | void convertFareToSpeech(float fare) |
psawant9 | 0:814bd1653303 | 54 | { |
psawant9 | 0:814bd1653303 | 55 | string ttsURL=" http://translate.google.com/translate_tts?tl=en&q=Your+Fare+is+;+"; |
psawant9 | 0:814bd1653303 | 56 | char strFare[100]; |
psawant9 | 0:814bd1653303 | 57 | sprintf(strFare,"%d",(int)fare); |
psawant9 | 0:814bd1653303 | 58 | ttsURL+=strFare; |
psawant9 | 0:814bd1653303 | 59 | ttsURL+="+Rupees+.+Thank+you+for+the+ride+.+Have+a+Nice+Day+."; |
psawant9 | 0:814bd1653303 | 60 | //printf("%s\n",ttsURL); |
psawant9 | 0:814bd1653303 | 61 | HTTPFile audioOutput("/sd/Fare.mp3"); |
psawant9 | 0:814bd1653303 | 62 | HTTPResult result = http.get(ttsURL.c_str(),&audioOutput); |
psawant9 | 0:814bd1653303 | 63 | if(result!=HTTP_OK) |
psawant9 | 0:814bd1653303 | 64 | { |
psawant9 | 0:814bd1653303 | 65 | printf("Error during speech convrsion!! Error Number : %d\n", result); |
psawant9 | 0:814bd1653303 | 66 | } |
psawant9 | 0:814bd1653303 | 67 | else |
psawant9 | 0:814bd1653303 | 68 | printf("Done\n"); |
psawant9 | 0:814bd1653303 | 69 | audioDriver.play_song("/sd/Fare.mp3"); |
psawant9 | 0:814bd1653303 | 70 | |
psawant9 | 0:814bd1653303 | 71 | } |
psawant9 | 0:814bd1653303 | 72 | |
psawant9 | 0:814bd1653303 | 73 | void initialize_system() |
psawant9 | 0:814bd1653303 | 74 | { |
psawant9 | 0:814bd1653303 | 75 | setup.mode(PullUp); |
psawant9 | 0:814bd1653303 | 76 | wait(0.001); |
psawant9 | 0:814bd1653303 | 77 | startMeter.mode(PullUp); |
psawant9 | 0:814bd1653303 | 78 | wait(0.001); |
psawant9 | 0:814bd1653303 | 79 | stopMeter.mode(PullUp); |
psawant9 | 0:814bd1653303 | 80 | wait(0.001); |
psawant9 | 0:814bd1653303 | 81 | playFare.mode(PullUp); |
psawant9 | 0:814bd1653303 | 82 | wait(0.001); |
psawant9 | 0:814bd1653303 | 83 | wait(2); |
psawant9 | 0:814bd1653303 | 84 | fareDisplay.printf("PRESS SETUP"); |
psawant9 | 0:814bd1653303 | 85 | printf("Press setup to continue.....\n"); |
psawant9 | 0:814bd1653303 | 86 | } |
psawant9 | 0:814bd1653303 | 87 | |
psawant9 | 0:814bd1653303 | 88 | int main() |
psawant9 | 0:814bd1653303 | 89 | { |
psawant9 | 0:814bd1653303 | 90 | bool flag = false; |
psawant9 | 0:814bd1653303 | 91 | int noOfRevolutions =0; |
psawant9 | 0:814bd1653303 | 92 | float fare; |
psawant9 | 0:814bd1653303 | 93 | bool isMeterStopped=false; |
psawant9 | 0:814bd1653303 | 94 | |
psawant9 | 0:814bd1653303 | 95 | initialize_system(); |
psawant9 | 0:814bd1653303 | 96 | |
psawant9 | 0:814bd1653303 | 97 | while(setup==1){wait(0.1);} |
psawant9 | 0:814bd1653303 | 98 | while(setup == 0){wait(0.1);} |
psawant9 | 0:814bd1653303 | 99 | fareDisplay.cls(); |
psawant9 | 0:814bd1653303 | 100 | fareDisplay.printf("INITIALIZING..."); |
psawant9 | 0:814bd1653303 | 101 | |
psawant9 | 0:814bd1653303 | 102 | initializeAudioDriver(); |
psawant9 | 0:814bd1653303 | 103 | EthernetErr error = ethernet.setup(); |
psawant9 | 0:814bd1653303 | 104 | if(error) |
psawant9 | 0:814bd1653303 | 105 | { |
psawant9 | 0:814bd1653303 | 106 | printf("Error in correction. Error number: %d.\n", error); |
psawant9 | 0:814bd1653303 | 107 | return -1; |
psawant9 | 0:814bd1653303 | 108 | } |
psawant9 | 0:814bd1653303 | 109 | printf(" Connection established\n"); |
psawant9 | 0:814bd1653303 | 110 | |
psawant9 | 0:814bd1653303 | 111 | while(1) |
psawant9 | 0:814bd1653303 | 112 | { |
psawant9 | 0:814bd1653303 | 113 | fareDisplay.cls(); |
psawant9 | 0:814bd1653303 | 114 | fareDisplay.printf("START METER"); |
psawant9 | 0:814bd1653303 | 115 | printf("Press start to continue.....\n"); |
psawant9 | 0:814bd1653303 | 116 | while(startMeter==1){wait(0.1);} |
psawant9 | 0:814bd1653303 | 117 | while(startMeter==0){wait(0.1);} |
psawant9 | 0:814bd1653303 | 118 | int new_val = 0; |
psawant9 | 0:814bd1653303 | 119 | int old_val =0; |
psawant9 | 0:814bd1653303 | 120 | fareDisplay.cls(); |
psawant9 | 0:814bd1653303 | 121 | fareDisplay.printf("METER STARTED"); |
psawant9 | 0:814bd1653303 | 122 | { |
psawant9 | 0:814bd1653303 | 123 | m.speed(0.15); |
psawant9 | 0:814bd1653303 | 124 | } |
psawant9 | 0:814bd1653303 | 125 | while(!isMeterStopped) |
psawant9 | 0:814bd1653303 | 126 | { |
psawant9 | 0:814bd1653303 | 127 | if(sensorReading>0.5) |
psawant9 | 0:814bd1653303 | 128 | { |
psawant9 | 0:814bd1653303 | 129 | flag=true; |
psawant9 | 0:814bd1653303 | 130 | wait(0.1); |
psawant9 | 0:814bd1653303 | 131 | } |
psawant9 | 0:814bd1653303 | 132 | if(flag) |
psawant9 | 0:814bd1653303 | 133 | { |
psawant9 | 0:814bd1653303 | 134 | if(sensorReading<0.4) |
psawant9 | 0:814bd1653303 | 135 | { |
psawant9 | 0:814bd1653303 | 136 | flag=false; |
psawant9 | 0:814bd1653303 | 137 | noOfRevolutions++; |
psawant9 | 0:814bd1653303 | 138 | } |
psawant9 | 0:814bd1653303 | 139 | } |
psawant9 | 0:814bd1653303 | 140 | new_val = stopMeter; |
psawant9 | 0:814bd1653303 | 141 | if ((new_val==0) && (old_val==1)) |
psawant9 | 0:814bd1653303 | 142 | { |
psawant9 | 0:814bd1653303 | 143 | isMeterStopped = true; |
psawant9 | 0:814bd1653303 | 144 | fareDisplay.cls(); |
psawant9 | 0:814bd1653303 | 145 | fareDisplay.printf("METER STOPPED !!"); |
psawant9 | 0:814bd1653303 | 146 | m.speed(0); |
psawant9 | 0:814bd1653303 | 147 | } |
psawant9 | 0:814bd1653303 | 148 | old_val=new_val; |
psawant9 | 0:814bd1653303 | 149 | wait(0.1); |
psawant9 | 0:814bd1653303 | 150 | } |
psawant9 | 0:814bd1653303 | 151 | |
psawant9 | 0:814bd1653303 | 152 | if(isMeterStopped) |
psawant9 | 0:814bd1653303 | 153 | { |
psawant9 | 0:814bd1653303 | 154 | isMeterStopped = false; |
psawant9 | 0:814bd1653303 | 155 | fare = calculateFare(noOfRevolutions); |
psawant9 | 0:814bd1653303 | 156 | fareDisplay.cls(); |
psawant9 | 0:814bd1653303 | 157 | fareDisplay.printf("The Fare is: %d",(int)fare); |
psawant9 | 0:814bd1653303 | 158 | printf("The no of revolutions is: %d\n; The Fare is: %d\n",(int)noOfRevolutions,(int)fare); |
psawant9 | 0:814bd1653303 | 159 | convertFareToSpeech(fare); |
psawant9 | 0:814bd1653303 | 160 | } |
psawant9 | 0:814bd1653303 | 161 | bool isExit =false; |
psawant9 | 0:814bd1653303 | 162 | while(1) |
psawant9 | 0:814bd1653303 | 163 | { |
psawant9 | 0:814bd1653303 | 164 | while(playFare==1) |
psawant9 | 0:814bd1653303 | 165 | { |
psawant9 | 0:814bd1653303 | 166 | new_val = stopMeter; |
psawant9 | 0:814bd1653303 | 167 | if ((new_val==0) && (old_val==1)) |
psawant9 | 0:814bd1653303 | 168 | { |
psawant9 | 0:814bd1653303 | 169 | isExit = true; |
psawant9 | 0:814bd1653303 | 170 | break; |
psawant9 | 0:814bd1653303 | 171 | } |
psawant9 | 0:814bd1653303 | 172 | old_val=new_val; |
psawant9 | 0:814bd1653303 | 173 | wait(0.2); |
psawant9 | 0:814bd1653303 | 174 | } |
psawant9 | 0:814bd1653303 | 175 | while(playFare==0){wait(0.1);} |
psawant9 | 0:814bd1653303 | 176 | if(isExit) |
psawant9 | 0:814bd1653303 | 177 | break; |
psawant9 | 0:814bd1653303 | 178 | audioDriver.play_song("/sd/Fare.mp3"); |
psawant9 | 0:814bd1653303 | 179 | |
psawant9 | 0:814bd1653303 | 180 | } |
psawant9 | 0:814bd1653303 | 181 | } |
psawant9 | 0:814bd1653303 | 182 | } |