12Oct2012MBEDLab3Project
Dependencies: DebounceIn EthernetNetIf FatFileSystem HTTPClient Motor SDFileSystem TextLCD mbed
main.cpp
- Committer:
- psawant9
- Date:
- 2012-10-12
- Revision:
- 1:098c1e0989ee
- Parent:
- 0:814bd1653303
File content as of revision 1:098c1e0989ee:
#include "mbed.h" #include "VS1002.h" #include "TextLCD.h" #include "EthernetNetIf.h" #include "HTTPClient.h" #include "DebounceIn.h" #include "Motor.h" #include <string> #include<stdlib.h> #define PI 3.14 #define DIAMETER 0.076 #define MINIMUM_FARE 11 #define FARE_PER_KM 10 TextLCD fareDisplay(p10, p18, p24, p23, p22, p21 ); VS1002 audioDriver(p11, p12, p13, p8, "sd", p5, p6, p7, p14, p15, p16, p17, p20); EthernetNetIf ethernet; HTTPClient http; AnalogIn sensorReading(p19); DebounceIn setup(p9); DebounceIn startMeter(p20); DebounceIn stopMeter(p30); DebounceIn playFare(p29); Motor m(p25, p26, p27); void initializeAudioDriver() { #ifndef FS_ONLY audioDriver._RST = 1; audioDriver.cs_high(); audioDriver.sci_initialise(); audioDriver.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF)); audioDriver.sci_write(0x03, 0x9800); audioDriver.sdi_initialise(); #endif } float calculateFare(int noOfRevolutions) { float distanceinKM; distanceinKM = noOfRevolutions*PI*DIAMETER;//For Demo purposes we do not divide by 1000 as would be in real scenario. float fare; if(distanceinKM>1) fare = MINIMUM_FARE + FARE_PER_KM*(distanceinKM - 1); // Formula can be changed as per required or can be taken dynamically from a web server else fare = MINIMUM_FARE; return fare; } void convertFareToSpeech(float fare) { string ttsURL=" http://translate.google.com/translate_tts?tl=en&q=Your+Fare+is+;+"; char strFare[100]; sprintf(strFare,"%d",(int)fare); ttsURL+=strFare; ttsURL+="+Rupees+.+Thank+you+for+the+ride+.+Have+a+Nice+Day+."; //printf("%s\n",ttsURL); HTTPFile audioOutput("/sd/Fare.mp3"); HTTPResult result = http.get(ttsURL.c_str(),&audioOutput); if(result!=HTTP_OK) { printf("Error during speech convrsion!! Error Number : %d\n", result); } else printf("Done\n"); audioDriver.play_song("/sd/Fare.mp3"); } void initialize_system() { setup.mode(PullUp); wait(0.001); startMeter.mode(PullUp); wait(0.001); stopMeter.mode(PullUp); wait(0.001); playFare.mode(PullUp); wait(0.001); wait(2); fareDisplay.printf("PRESS SETUP"); printf("Press setup to continue.....\n"); } int main() { bool flag = false; int noOfRevolutions =0; float fare; bool isMeterStopped=false; initialize_system(); while(setup==1){wait(0.1);} while(setup == 0){wait(0.1);} fareDisplay.cls(); fareDisplay.printf("INITIALIZING..."); initializeAudioDriver(); EthernetErr error = ethernet.setup(); if(error) { printf("Error in correction. Error number: %d.\n", error); return -1; } printf(" Connection established\n"); while(1) { fareDisplay.cls(); fareDisplay.printf("START METER"); printf("Press start to continue.....\n"); while(startMeter==1){wait(0.1);} while(startMeter==0){wait(0.1);} int new_val = 0; int old_val =0; fareDisplay.cls(); fareDisplay.printf("METER STARTED"); { m.speed(0.15); } while(!isMeterStopped) { if(sensorReading>0.5) { flag=true; wait(0.1); } if(flag) { if(sensorReading<0.4) { flag=false; noOfRevolutions++; } } new_val = stopMeter; if ((new_val==0) && (old_val==1)) { isMeterStopped = true; fareDisplay.cls(); fareDisplay.printf("METER STOPPED !!"); m.speed(0); } old_val=new_val; wait(0.1); } if(isMeterStopped) { isMeterStopped = false; fare = calculateFare(noOfRevolutions); fareDisplay.cls(); fareDisplay.printf("The Fare is: %d",(int)fare); printf("The no of revolutions is: %d\n; The Fare is: %d\n",(int)noOfRevolutions,(int)fare); convertFareToSpeech(fare); } bool isExit =false; while(1) { while(playFare==1) { new_val = stopMeter; if ((new_val==0) && (old_val==1)) { isExit = true; break; } old_val=new_val; wait(0.2); } while(playFare==0){wait(0.1);} if(isExit) break; audioDriver.play_song("/sd/Fare.mp3"); } } }