Test program for the RenBuggy drive boards

Dependencies:   mbed SevenSegmentDisplay

main.cpp

Committer:
ELloyd
Date:
2014-03-21
Revision:
1:c6cf7028e4a8
Parent:
0:f4c08d1eeaf1

File content as of revision 1:c6cf7028e4a8:

#include "mbed.h"
#include "SevenSegmentDisplay.h"

#define PLUS 1
#define DRIVE 2
#define MOTOR 3
#define STOP 4
#define MINUS 5



DigitalInOut   D(P0_11);         //Drive
DigitalInOut   M(P0_13);         //Motor
DigitalInOut   S(P0_14);         //Stop (brake)



void DisplayError(int, int);

SevenSegmentDisplay Screens(INSTANT);

int main()
{
    int Test = 0;

    D.input();
    M.input();
    S.input();

    D.mode(PullUp);
    M.mode(PullUp);
    S.mode(PullDown);


    /*************************************************************** TEST 1 - all pull ups, 0V = 0 **************************************************************/

    Test = 1;
    Screens.DisplayDigits(Test, 36); //Say we're doing test 1
    wait(0.5);

    if (D == 1) {                                                                       //Marling = 0 Amp board = 0 Marling + motor = 1
        //if (S == 1) {
            if (M == 0)                                                                 //Marling = 0 Amp board = 1 Marling + motor = 0
                {}
            else {
                DisplayError(Test, MOTOR);
            }
        //} else {
        //    DisplayError(Test, STOP);
        //}
    } else {
        DisplayError(Test, DRIVE);
    }

    /*************************************************************** TEST 2 - ALL PULL UPS, D = 0V **************************************************************/

    //Minus reverts to pull up, D is now pulled down.
    D.output();
    D = 0;

    Test = 2;

    Screens.DisplayDigits(Test, 36); 
    wait(0.5);
    
    if (M == 1) {
       // if (S == 1)
       // {}
       // else 
       // {
       //     DisplayError(Test, STOP);
       // }
    } 
    else 
    {
        DisplayError(Test, MOTOR);
    }



    /*************************************************************** TEST 3 - All pull ups, M = 0 ***************************************************************/


    Test = 3;
    Screens.DisplayDigits(Test, 36);
    wait(0.5);
    
    D.input();      //Set D back to an input so I can read it
    D.mode(PullUp); //And I'm testing things with pull ups
    
    M.output();     //Make it so I can drive M.
    M = 0;          //Drive M low


    if (D == 1) {                                                                        //Marling = 0 Amp board  = 0 Marling + motor = 1
        //if (S == 1)
        //{}
        //else 
       // {
       //     DisplayError(Test, STOP);
       // }
    } 
    else 
    {
        DisplayError(Test, DRIVE);
    }


    /*************************************************************** TEST 4 - ALL PULL UPS, S = 0 ***************************************************************/

    //Test = 4;
    
    //M.input();      //M is back to an input
    //M.mode(PullUp); 
    //S.output();     //Set S to be an output
    //S = 0;          // and drive it low.

    //Screens.DisplayDigits(Test, 36);
    //wait(0.5);

   // if (D == 0) {
   //     if (M == 1)
   //         {}
    //    else {
    //        DisplayError(Test, MOTOR);
    //    }
    //} else {
    //    DisplayError(Test, DRIVE);
   // }


    /*************************************************************** TEST 5 - ALL PULL DOWNS, 0V = 1 ************************************************************/
    Test = 5;
    Screens.DisplayDigits(Test, 36);
    wait(0.5);
    
    //S.input();  //Set S back to being an input
    //S.mode(PullDown); //We're testing pull downs now.
    
    D.mode(PullDown);
    M.mode(PullDown);

    if (D == 0) {
        if (M == 0) {                                                           //Marling = 0 amp board = 1 Marling + motor = 0
            //if (S == 0)
            //    {}
           // else {
           //     DisplayError(Test, STOP);
          //  }
        } else {
            DisplayError(Test, MOTOR);
        }
    } else {
        DisplayError(Test, DRIVE);
    }

    /*************************************************************** TEST 6 - ALL PULL DOWNS, D = 1 *************************************************************/
    Test = 6;
    Screens.DisplayDigits(Test, 36);
    wait(0.5);

    D.output();
    D = 1;      //Drive D high


    if (M == 1) {                                                               //Marling = 0 Amp board = 1
        //if (S == 0)
        //    {}
       // else {
       //     DisplayError(Test, STOP);
       // }
    } else {
        DisplayError(Test, MOTOR);
    }



    /*************************************************************** TEST 7 - ALL PULL DOWNS, M = 1 *************************************************************/

    Test = 7;
    Screens.DisplayDigits(Test, 36);
    wait(0.5);

    D.input();
    D.mode(PullDown);
    
    M.output(); //Testing M now
    M = 1;


    if (D == 0) {
        //if (S == 0)
         //   {}
        //else {
        //    DisplayError(Test, STOP);
        //}
    } else {
        DisplayError(Test, DRIVE);
    }

    /*************************************************************** TEST 8 - ALL PULL DOWNS, S = 1 *************************************************************/

    Test = 8;
    Screens.DisplayDigits(Test, 36);
    wait(0.5);

    M.input();
    M.mode(PullDown);
   // S.output();
   // S = 1;


   // if (D == 0) {
   //     if (M == 1)
   //         {}
   //     else {
   //         DisplayError(Test, MOTOR);
    //    }
    //} else {
   //     DisplayError(Test, DRIVE);
   // }
    
    //S = 0;

    /*************************************************************** TEST 9 - DRIVE THE MOTOR *******************************************************************/

    Test = 9;
    Screens.DisplayDigits(Test, 36);

    D.output();
    D = 1;
   // S.output();
    //S = 0;
    M.mode(PullNone);   //Highlight if there's a problem

    wait(0.5); //LEDs still aren't turning on.


    if (M == 0) 
    {} 
    else 
    {
        DisplayError(Test, MOTOR);
    }
    D = 0; //Making it look like there's a break between tests
    wait (0.3);



    /*************************************************************** TEST 10 - BRAKE THE MOTOR ******************************************************************/
//This seems to be giving an odd result.
 //   Test = 10;
 //   Screens.DisplayDigits(1, 0);
//wait(0.5);
//D = 0;
//S.output();
//S = 1;
 //   D = 0; //Turn the drive off
 //   S = 1;   //Turn the brake on
 //   M.mode(PullNone);   //I have to pull this down to make it perform as expected.

 //   wait(0.5); //Wait a little while to make sure the LEDs turn on, and panic if they don't.



 //   if (M == 1) 
 //   {} 
 //   else 
 //   {
  //      DisplayError(Test, MOTOR);
 //   }
  //  
  //  S = 0; //Turn off the LED for the success display.

/***************************************************************     CONGRATULATIONS     ************************************************************************/

    while(1) {
        Screens.DisplayDigits(36, 28); //_S
        wait(0.2);
        Screens.DisplayDigits(28, 31); //SU
        wait(0.2);
        Screens.DisplayDigits(31, 12); //UC
        wait(0.2);
        Screens.DisplayDigits(12, 12); //CC
        wait(0.2);
        Screens.DisplayDigits(12, 14); //CE
        wait(0.2);
        Screens.DisplayDigits(14, 28); //ES
        wait(0.2);
        Screens.DisplayDigits(28, 28); //SS
        wait(0.2);
        Screens.DisplayDigits(28, 36); //S_
        wait(0.2);
        Screens.DisplayDigits(36, 36); //__
        wait(0.5);
    }

}//End of main


/*Displays a message based on where the program thinks the error was found. Sits there blinking until the program is reset. */
void DisplayError (int WhichTest, int WhereTheProblemIs)
{
    int i = 0;
    D = 0;
    for (i = 0; i < 3; i++) {
        Screens.DisplayDigits(8,8);     //Flash all segments on and off three times to attract attention.
        wait(0.3);
        Screens.DisplayDigits(36,36);
        wait(0.3);
    }

    if (WhichTest < 10) {
        while (1) {
            switch(WhereTheProblemIs) {
                case DRIVE: {
                    Screens.DisplayDigits(WhichTest, 13);
                    wait(0.5);
                    break;
                }
                case MOTOR: {
                    Screens.DisplayDigits(WhichTest, 22);
                    wait(0.5);
                    break;
                }
            } //End switch
            Screens.DisplayDigits(36, 36);
            wait(0.5);
        } //End while loop  BUT IT WILL NEVER END MUA HA HA HA HA
    } //End of if less than 10
    else {
        while (1) {
            switch(WhereTheProblemIs) {

                case DRIVE: {
                    Screens.DisplayDigits(36, 13); //L = off, R = D
                    wait(0.5);
                    break;
                }
                case MOTOR: {
                    Screens.DisplayDigits(36, 22); //L = off, R = M
                    wait(0.5);
                    break;
                } //end case
            } //end switch
            Screens.DisplayDigits(WhichTest/10, WhichTest%10); //Display the test number over two digits
            wait(0.5);
        } //end while
    } //end else
} //End of DisplayError