Sehoon Shon and Tanvir Iqbal's mbed mini project

Dependencies:   Motordriver TextLCD mbed

Fork of TextLCD_HelloWorld by Simon Ford

Revision:
3:a59397561c9d
Parent:
2:ad0b044d0a10
--- a/main.cpp	Sat Dec 04 11:31:07 2010 +0000
+++ b/main.cpp	Thu Oct 11 20:59:05 2012 +0000
@@ -1,10 +1,430 @@
-// Hello World! for the TextLCD
+#include "mbed.h" 
+#include "TextLCD.h"
+#include <string.h>
+#include "motordriver.h"
+#include "mpr121.h"
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+DigitalIn a(p5);
+DigitalIn b(p6);
+DigitalIn c(p7);
+DigitalIn d(p8);
+
+InterruptIn interrupt(p11);
+// Setup the i2c bus on pins 28 and 27
+I2C i2c(p9, p10);
+// Setup the Mpr121:
+// constructor(i2c object, i2c address of the mpr121)
+Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
+
+//Motor
+Motor left(p21, p22, p23, 1); // pwm, fwd, rev, has brake feature
+Motor right(p26, p25, p24, 1);
+
+//TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
+TextLCD lcd(p15, p16, p17, p18, p19, p20);
+Serial pc(USBTX, USBRX); // tx, rx 
+Serial device(p13, p14);  // tx, rx 
+
+//forward or in reverse mode
+int forward;
+
+//stores directions
+int direction[10];
+
+//stores speeds
+float speed[10];
+
+//stores durations
+int duration[10];
+
+//speed of the car
+float car_speed;
+
+//duration of the car
+int car_duration;
+
+//stores the command of the touchpad
+int _command;
+
+//check if there has been input to the touchpad
+bool no_command;
+
+//count variable for card reader
+int count=0; 
+
+//Number of total moves 
+int num_moves;
+
+//stores buzzcard information
+char output[50];
+
+//number of card swipes on the reader
+int num_swipe=0;
+int o_a, o_b;
+//int count,ch, ignore_count;
+int command[12];
+int count_1=0; 
+
+
+//password variables
+int p_1, p_2,p_3,p_4;
 
-#include "mbed.h"
-#include "TextLCD.h"
+//interrupt routine for touchpad
+void fallInterrupt() {
+    no_command = true;
+    int s2=0;
+    int key_code=0;
+    int i=0;
+    int value=mpr121.read(0x00);
+    value +=mpr121.read(0x01)<<8;
+    // LED demo mod by J. Hamblen
+    //pc.printf("MPR value: %x \r\n", value);
+    i=0;
+    // puts key number out to LEDs for demo
+    for (i=0; i<12; i++) {
+        if (((value>>i)&0x01)==1) key_code=i+1;
+        }
+       
+    s2 = key_code - 1;
+    if(s2 > 0){
+    
+    _command=s2;
+    no_command = false;
+    led4=s2 & 0x01;
+    led3=(s2>>1) & 0x01;
+    led2=(s2>>2) & 0x01;
+    led1=(s2>>3) & 0x01;
+    }
+    
+    count_1++;
+    //pc.printf("hello %f\n",s);
+
+}
+
+//function to turn left
+void turnLeft(){
+  lcd.cls();
+  lcd.printf("Turning Left");
+  left.speed(0);
+  right.speed(0.4);
+  wait(2);
+  right.speed(0);
+  wait(1);
+}
+ 
+//function to turn right
+void turnRight(){
+  lcd.cls();
+  lcd.printf("Turning Right");
+  left.speed(0.4);
+  right.speed(0);
+  wait(2);
+  left.speed(0);
+  wait(1);
+}
+
+//function to turn around
+void turnAround(){
+  lcd.cls();
+  lcd.printf("Turning Around");
+  
+  left.speed(0.4);
+  right.speed(0);
+  wait(4);
+  left.speed(0);
+  wait(1);
+}
+
+
+//to move with input speed and duration of time
+void go(float _speed, int _time){
+    lcd.cls();
+    lcd.printf("Speed %f Duration %d sec", _speed, _time);
+    left.speed(_speed);
+    right.speed(_speed);
+    wait(_time);
+    left.speed(0);
+    right.speed(0);
+    wait(1);
+}
+
+//starts the card reader and verifies the user
+int cardReader(){
+    num_swipe++;  
+    int count=0;
+    int ch=0;
+    int ignore_count=0;
+   // char output[50];
+    while(1){
+        if(device.readable()){
 
-TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
+            ch=device.getc();
+            if(ignore_count>5){
+            output[count]=ch;
+            count++;
+            }
+            ignore_count++;
+            pc.putc(ch);
+            }
+            if (ignore_count>14){
+                lcd.cls();
+                
+                 if (strcmp(output,"902512409")==0){
+                   lcd.printf("Confirmed\n");
+                   lcd.printf("Welcome Sehoon\n");
+                   for (int i=0; i<1000; i++){
+                        if(device.readable())
+                        device.getc();
+                        }
+                   return 1;               
+                  }
+                  else if (strcmp(output,"902536564")==0){
+                   lcd.printf("Confirmed\n");
+                   lcd.printf("Welcome Tanvir\n");
+                   for (int i=0; i<1000; i++){
+                        if(device.readable())
+                        device.getc();
+                        }
+                   return 1;   
+                   }       
+                  else {
+                       for (int i=0; i<100; i++){
+                             if(device.readable())
+                             ch=device.getc();
+                             wait(.01);
+                        }
+                if (num_swipe==5){
+                    lcd.printf("Too many tries\nEnter password");
+                   
+                    _command=0;
+                    no_command=true;
+                    while(1){
+                    while(no_command){
+                        wait(0.1);
+                        }
+                        p_1=_command;
+                        _command=0;
+                        no_command=true;
+                        while(no_command){
+                        wait(0.1);
+                        }
+                        p_2=_command;
+                        _command=0;
+                        no_command=true;
+                        while(no_command){
+                        wait(0.1);
+                        }
+                        p_3=_command;
+                        _command=0;
+                        no_command=true;
+                        while(no_command){
+                        wait(0.1);
+                        }
+                        p_4=_command;
+                        _command=0;
+                        no_command=true;
+                        
+                        if (p_1==1&&p_2==3&&p_3==5&&p_4==7)
+                        {
+                        lcd.cls();
+                        lcd.printf("Correct!!!");
+                        wait(2);
+                        lcd.cls();
+                        lcd.printf("Try swiping AGAIN!!");
+                           break;
+                           }
+                           else{
+                           lcd.cls();
+                           lcd.printf("WRONG WRONG wROGNWRWEWERWER!@#!@");
+                           wait(2);
+                           lcd.cls();
+                           } 
+                           
+                        }
+                        
+                        
+                    }
+                else
+                lcd.printf("Try again\n");
+                return 0;
+                }
+        }
+    }    
+    
+}
+
+//number of moves for the car
+int number_of_moves(){
+      //select duration
+   //Selecting number of moves
+   lcd.printf("Select Number of Moves");
+   num_moves=100;
+   _command=100;
+   no_command = true;
+   while(no_command){
+    wait(0.1);
+
+   }
+
+   num_moves = _command;
+
+    
+ 
+    lcd.cls();
+    lcd.printf("Number of Moves: %d", num_moves); 
+    wait(2);
+    return 0;
+    }
+    
+int main() { 
+
+    interrupt.fall(&fallInterrupt);   
+  interrupt.mode(PullUp); 
+  //Swiping buzz card 
+   lcd.printf("Please Swipe your Buzzcard");
+  while(!cardReader());
+   wait(2);
+   lcd.cls();
+
+
 
-int main() {
-    lcd.printf("Hello World!\n");
+    number_of_moves();
+   if (a||b||c||d){
+        lcd.cls();
+        lcd.printf("please turn off all switches");
+        while(1){
+            if (!(a||b||c||d))
+            break;
+        }
+    }
+ 
+    lcd.cls();
+    
+   
+    for (int i=0; i<num_moves; i++){
+    
+    //select direction
+   lcd.printf("Select Direction2=L 10=R 7=F 5=B");
+   no_command = true;
+   _command=0;
+   while(_command!=2&&_command!=10&&_command!=7&&_command!=5){
+    wait(0.1);
+   }
+        if(_command==2){
+            direction[i]=1;
+            lcd.cls();
+            lcd.printf("Left");
+  
+            }
+        else if (_command==10){
+            direction[i]=2;
+            lcd.cls();
+            lcd.printf("Right");
+
+            
+            }
+        else if (_command==7){
+            direction[i]=3;
+            lcd.cls();
+            lcd.printf("Forward");
+
+            }
+        else if (_command==5){
+            direction[i]=4;
+            lcd.cls();
+            lcd.printf("Reverse");
+  
+            }
+            
+       
+   
+   wait(2);
+    lcd.cls();
+    
+    
+    //select speed
+   lcd.printf("Move Forward-1 or in Reverse-2");
+   car_speed=0;
+   _command=0;
+   forward=0;;
+   no_command = true;
+   while(_command!=1&&_command!=2){
+    wait(0.1);
+   }
+   if (_command==1){
+        forward=1;
+        lcd.cls();
+        lcd.printf("Car moves forward");
+        }
+        else if (_command==2){
+        forward=-1;
+        lcd.cls();
+        lcd.printf("Car moves in reverse");
+        }
+        wait(2);
+        lcd.cls();
+        _command=0;
+   lcd.printf("Select Car Speed 1-10");
+   while(_command!=1&&_command!=2&&_command!=3&&_command!=4&&_command!=5&&_command!=6&&_command!=7&&_command!=8&&_command!=9&&_command!=10){
+        wait(0.1);
+        }
+        car_speed=forward*_command*0.1;
+   
+   speed[i]=car_speed;
+   lcd.cls();
+   lcd.printf("car speed: %d\n", _command);
+   wait(2);
+   
+    lcd.cls();
+    
+    
+     //select duration
+ 
+   lcd.printf("Select Car duration 1-10 seconds");
+   car_duration=0;
+   _command=0;
+   while(_command!=1&&_command!=2&&_command!=3&&_command!=4&&_command!=5&&_command!=6&&_command!=7&&_command!=8&&_command!=9&&_command!=10){
+        wait(0.1);
+        }
+    car_duration=_command;
+    duration[i]=car_duration;
+    lcd.cls();
+   lcd.printf("car duration: %d seconds\n", _command);
+   wait(2);
+   
+
+ 
+    lcd.cls();
+    
+    }
+    
+    for (int i=10; i>0; i--){
+        lcd.printf("Car will start in %d seconds",i);
+        wait(1);
+        lcd.cls();
+    }
+    lcd.printf("GO GO GO GO GO GO GO GO GO !!!");
+    wait(1);
+    for (int i=0; i<num_moves; i++){
+ 
+       switch (direction[i]){
+            case 1:
+                turnLeft();
+                break;
+            case 2:
+                turnRight();
+                break;
+            case 3:
+                break;
+            case 4:
+                turnAround();
+                break;
+                }
+      go(speed[i], duration[i]);
+      }
+      lcd.cls();
+      lcd.printf("Finished");
 }