12Oct2012MBEDLab3Project

Dependencies:   DebounceIn EthernetNetIf FatFileSystem HTTPClient Motor SDFileSystem TextLCD mbed

Committer:
psawant9
Date:
Fri Oct 12 16:07:36 2012 +0000
Revision:
1:098c1e0989ee
Parent:
0:814bd1653303
12Oct2012mbedLab3Project

Who changed what in which revision?

UserRevisionLine numberNew 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 }