Dependencies:   keypad SDHCFileSystem TextLCD mbed FPointer wave_player

Committer:
daryl2110
Date:
Mon Feb 20 07:32:56 2012 +0000
Revision:
0:57ece500234e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daryl2110 0:57ece500234e 1 /*
daryl2110 0:57ece500234e 2 Final Year Project for Ngee Ann Polytechnic Electrical Engineering Year 3
daryl2110 0:57ece500234e 3 Project Title: Bus Assistance for the Visually Impaired
daryl2110 0:57ece500234e 4 */
daryl2110 0:57ece500234e 5 #include "mbed.h"
daryl2110 0:57ece500234e 6 #include "scmRTOS.h"
daryl2110 0:57ece500234e 7 #include "wave_player.h"
daryl2110 0:57ece500234e 8 #include "SDHCFileSystem.h"
daryl2110 0:57ece500234e 9 #include "keypad.h"
daryl2110 0:57ece500234e 10 #include "TextLCD.h"
daryl2110 0:57ece500234e 11
daryl2110 0:57ece500234e 12 Serial xbee(p9, p10);
daryl2110 0:57ece500234e 13 DigitalOut rst1(p11);
daryl2110 0:57ece500234e 14 SDFileSystem sd(p5, p6, p7, p8, "sd");
daryl2110 0:57ece500234e 15 AnalogOut AudioOut(p18);
daryl2110 0:57ece500234e 16 wave_player waver(&AudioOut);
daryl2110 0:57ece500234e 17 //Keypad keypad( p24, p23, p22, p21, p28, p27, p26, p25);
daryl2110 0:57ece500234e 18 TextLCD lcd(p15, p16, p17, p18, p19, p20);
daryl2110 0:57ece500234e 19 DigitalOut myled(LED1);//Create variable for Led 1 on the mbed
daryl2110 0:57ece500234e 20 DigitalOut myled1(LED2);//Create variable for Led 2 on the mbed
daryl2110 0:57ece500234e 21 //BusOut seven(p27, p26, p25, p24, p23, p22, p21);
daryl2110 0:57ece500234e 22 //BusOut leds(p28, p29, p30);
daryl2110 0:57ece500234e 23
daryl2110 0:57ece500234e 24 DigitalOut led(LED1);
daryl2110 0:57ece500234e 25 DigitalOut led1(LED2);
daryl2110 0:57ece500234e 26
daryl2110 0:57ece500234e 27 //OS Timer/interrupt
daryl2110 0:57ece500234e 28 OS::TEventFlag XBee;
daryl2110 0:57ece500234e 29
daryl2110 0:57ece500234e 30 // process types
daryl2110 0:57ece500234e 31 //typedef OS::process<OS::pr1, 5000> TProc1; //7 Segment LED
daryl2110 0:57ece500234e 32 typedef OS::process<OS::pr0, 4000> TProc2; // XBee Communication
daryl2110 0:57ece500234e 33 //typedef OS::process<OS::pr0, 8000> TProc3; // Playing of Audio
daryl2110 0:57ece500234e 34 //typedef OS::process<OS::pr0 1000> TProc4; // Interrupt of Keypad
daryl2110 0:57ece500234e 35
daryl2110 0:57ece500234e 36 // process objects
daryl2110 0:57ece500234e 37 //TProc1 Proc1;
daryl2110 0:57ece500234e 38 TProc2 Proc2;
daryl2110 0:57ece500234e 39 //TProc3 Proc3;
daryl2110 0:57ece500234e 40 //TProc4 Proc4
daryl2110 0:57ece500234e 41
daryl2110 0:57ece500234e 42 #define MAXBUS 10
daryl2110 0:57ece500234e 43 #define MAXLEN 4
daryl2110 0:57ece500234e 44 #define ENDKEY 14
daryl2110 0:57ece500234e 45 int req;
daryl2110 0:57ece500234e 46 char Bus[MAXBUS][MAXLEN];
daryl2110 0:57ece500234e 47 char NumIx = 0; // Point to current index of Bus number
daryl2110 0:57ece500234e 48 char BusIx = 0; // Point to current bus
daryl2110 0:57ece500234e 49 bool BusFull = false; // Bus number buffer is full
daryl2110 0:57ece500234e 50 char KeyCh;
daryl2110 0:57ece500234e 51
daryl2110 0:57ece500234e 52
daryl2110 0:57ece500234e 53 char Keytable[] = { '1', '2', '3', 'A',
daryl2110 0:57ece500234e 54 '4', '5', '6', 'B',
daryl2110 0:57ece500234e 55 '7', '8', '9', 'C',
daryl2110 0:57ece500234e 56 '*', '0', '#', 'D'
daryl2110 0:57ece500234e 57 };
daryl2110 0:57ece500234e 58
daryl2110 0:57ece500234e 59 uint32_t cbAfterInput(uint32_t key) {
daryl2110 0:57ece500234e 60 KeyCh = Keytable[key];
daryl2110 0:57ece500234e 61
daryl2110 0:57ece500234e 62 if (BusFull) {
daryl2110 0:57ece500234e 63 printf("Bus number is already full\n");
daryl2110 0:57ece500234e 64 return 2;
daryl2110 0:57ece500234e 65 }
daryl2110 0:57ece500234e 66
daryl2110 0:57ece500234e 67
daryl2110 0:57ece500234e 68 if (NumIx < MAXLEN - 1) {
daryl2110 0:57ece500234e 69 if (key != ENDKEY) { // Terminating key
daryl2110 0:57ece500234e 70 lcd.putc(KeyCh);
daryl2110 0:57ece500234e 71 printf("%c", KeyCh);
daryl2110 0:57ece500234e 72
daryl2110 0:57ece500234e 73
daryl2110 0:57ece500234e 74 } else { // Terminating key is entered
daryl2110 0:57ece500234e 75 printf("\nBus(%d,%d)=%c\n", BusIx, NumIx, KeyCh);
daryl2110 0:57ece500234e 76 BusIx++;
daryl2110 0:57ece500234e 77 NumIx = 0;
daryl2110 0:57ece500234e 78 }
daryl2110 0:57ece500234e 79 }
daryl2110 0:57ece500234e 80 return 0;
daryl2110 0:57ece500234e 81 }
daryl2110 0:57ece500234e 82
daryl2110 0:57ece500234e 83 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 84 long long count = 0;
daryl2110 0:57ece500234e 85
daryl2110 0:57ece500234e 86 int main() {
daryl2110 0:57ece500234e 87 printf("\nInitialising ...\n");
daryl2110 0:57ece500234e 88 rst1 = 0; //Set reset pin to 0
daryl2110 0:57ece500234e 89 myled = 0;//Set LED1 to 0
daryl2110 0:57ece500234e 90 myled1 = 0;//Set LED2 to 0
daryl2110 0:57ece500234e 91 wait_ms(1);//Wait at least one millisecond
daryl2110 0:57ece500234e 92 rst1 = 1;//Set reset pin to 1
daryl2110 0:57ece500234e 93 wait_ms(1);//Wait another millisecond
daryl2110 0:57ece500234e 94 OS::Run();
daryl2110 0:57ece500234e 95 memset(&Bus, 0, MAXBUS * MAXLEN);
daryl2110 0:57ece500234e 96 //seven = Bus[BusIx][NumIx];
daryl2110 0:57ece500234e 97
daryl2110 0:57ece500234e 98 }
daryl2110 0:57ece500234e 99
daryl2110 0:57ece500234e 100 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 101 template<> OS_PROCESS void TProc1::Exec() {
daryl2110 0:57ece500234e 102 int i;
daryl2110 0:57ece500234e 103 int n = 1;
daryl2110 0:57ece500234e 104 for (;;) { // toggling between 7 seg led
daryl2110 0:57ece500234e 105 for (int i=0; i<3; i++) {
daryl2110 0:57ece500234e 106 leds = 0x01 << n;
daryl2110 0:57ece500234e 107 n = (++n) % 3;
daryl2110 0:57ece500234e 108 seven = Bus[BusIx][NumIx];
daryl2110 0:57ece500234e 109
daryl2110 0:57ece500234e 110 }
daryl2110 0:57ece500234e 111 }
daryl2110 0:57ece500234e 112 }
daryl2110 0:57ece500234e 113
daryl2110 0:57ece500234e 114 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 115 template<> OS_PROCESS void TProc2::Exec() {
daryl2110 0:57ece500234e 116
daryl2110 0:57ece500234e 117 for (;;) {
daryl2110 0:57ece500234e 118 if (xbee.readable()) {
daryl2110 0:57ece500234e 119 req = xbee.getc();
daryl2110 0:57ece500234e 120 printf("req = %c\n", req);
daryl2110 0:57ece500234e 121 //XBee.SignalISR();
daryl2110 0:57ece500234e 122 Sleep(2000);
daryl2110 0:57ece500234e 123 }
daryl2110 0:57ece500234e 124 }
daryl2110 0:57ece500234e 125 }
daryl2110 0:57ece500234e 126
daryl2110 0:57ece500234e 127
daryl2110 0:57ece500234e 128 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 129 template<> OS_PROCESS void TProc3::Exec() {
daryl2110 0:57ece500234e 130
daryl2110 0:57ece500234e 131 for (;;) {
daryl2110 0:57ece500234e 132
daryl2110 0:57ece500234e 133 if (req == 'r') {
daryl2110 0:57ece500234e 134 printf("Came here 2 \n");
daryl2110 0:57ece500234e 135 FILE *fp = fopen("/sd/wf/Bus.wav","r");
daryl2110 0:57ece500234e 136 waver.play(fp);
daryl2110 0:57ece500234e 137 printf("playing");
daryl2110 0:57ece500234e 138 fseek(fp, 0, SEEK_SET);
daryl2110 0:57ece500234e 139 fclose(fp);
daryl2110 0:57ece500234e 140
daryl2110 0:57ece500234e 141 }
daryl2110 0:57ece500234e 142 }
daryl2110 0:57ece500234e 143
daryl2110 0:57ece500234e 144 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 145 template<> OS_PROCESS void TProc4::Exec() {
daryl2110 0:57ece500234e 146
daryl2110 0:57ece500234e 147 keypad.CallAfterInput(&cbAfterInput);
daryl2110 0:57ece500234e 148 keypad.Start();
daryl2110 0:57ece500234e 149 while (1) {
daryl2110 0:57ece500234e 150 wait_ms(100);
daryl2110 0:57ece500234e 151 }
daryl2110 0:57ece500234e 152 }
daryl2110 0:57ece500234e 153
daryl2110 0:57ece500234e 154 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 155 void OS::SystemTimerUserHook() {
daryl2110 0:57ece500234e 156 ++count;
daryl2110 0:57ece500234e 157 if (count % 2000 == 0) {
daryl2110 0:57ece500234e 158 printf("\n%lld\n", count);
daryl2110 0:57ece500234e 159 }
daryl2110 0:57ece500234e 160 }
daryl2110 0:57ece500234e 161 }
daryl2110 0:57ece500234e 162 //---------------------------------------------------------------------------
daryl2110 0:57ece500234e 163 void OS::IdleProcessUserHook() {
daryl2110 0:57ece500234e 164 __WFI();
daryl2110 0:57ece500234e 165 }