Proj 324 Final

Fork of ELEC351_Group_T by Plymouth ELEC351 Group T

main.cpp

Committer:
thomasmorris
Date:
2018-05-24
Revision:
55:e0e684531825
Parent:
54:a4c5949707ca
Child:
56:bc5345bc6650

File content as of revision 55:e0e684531825:


#include "SETUP.hpp"

#define Cubelet_data_ready 1
#define Not_Cubelet_data_ready 0
/*
Colour lookup table
1 = White
2 = Red
3 = Orange
4 = Blue
5 = Green
6 = Yellow
*/

//Colours Cubelet_Colours_string[];
int colour_data = 0;
int temp_colour_data_1 = 0;
int temp_colour_data_2 = 0;
int temp_colour_data_3 = 0;
int temp_colour_data_4 = 0;
int temp_colour_data_5 = 0;
int temp_colour_data_6 = 0;
int temp_colour_data_7 = 0;
int temp_colour_data_8 = 0;
int temp_colour_data_9 = 0;

int SPI_RX_DATA = 0;
int Cubelet_Colours[9] = {0,0,0,0,0,0,0,0,0};//9 cubelets store colours here
int Received_data = 0;
bool Data_from_slave[16] = {0};

//Interrupt service routine for handling the timeout of SW1
void SW1TimeOutHandler() {
    SW1TimeOut.detach();        //Stop the timeout counter firing
    SW1.fall(&SW1FallingEdge);  //Now wait for a falling edge
}
//Interrupt service routive for SW2 falling edge (release)
void SW1FallingEdge() {
    SW1.fall(NULL);                             //Disable this interrupt
    SW1TimeOut.attach(&SW1TimeOutHandler, SW1_SW2_Timeout_Time); //Start timeout counter    
}
//Interrupt service routine for handling the timeout of SW2
void SW2TimeOutHandler() {
    SW2TimeOut.detach();        //Stop the timeout counter firing
    SW2.fall(&SW2FallingEdge);  //Now wait for a falling edge
}
//Interrupt service routive for SW2 falling edge (release)
void SW2FallingEdge() {
    SW2.fall(NULL);                             //Disable this interrupt
    SW2TimeOut.attach(&SW2TimeOutHandler, SW1_SW2_Timeout_Time); //Start timeout counter    
}
void LCD_Output()
{
    while(1)
    {
        //Write to the LCD
    }
}
void Serial_Commands()
{
    while(1)
    {
        Serial_Commands_Output();           //Enable Serial Commands
    }
}
void LED_Logging()
{
    while(1)
    {
       Log_Leds();                          //Flashes the yellow led to indicate the logging mode
    }
}

void SPI_INTERFACE()
{
    //pc.printf("SPI Test \n");
    Thread::wait(1000);
    while(1)
    {
        cs= 0;
        SPI_RX_DATA = spi.write(0xF0);
        wait_us(3);
        cs= 1;
        colour_data = SPI_RX_DATA;
        pc.printf("Received data = %d\n", SPI_RX_DATA);
        Thread::wait(1000);
    }   
}

Colours convert (int Colour)
{
    Colours colours_return_value;
    if(Colour == 1)
    {
        colours_return_value = White;
    }
    else if(Colour == 2)
    {
        colours_return_value = Orange;   
    }
    else if(Colour == 3)
    {
        colours_return_value = Blue;   
    }
    else if(Colour == 4)
    {
        colours_return_value = Red;   
    }
    else if(Colour == 5)
    {
        colours_return_value = Green;   
    }
    else if(Colour == 6)
    {
        colours_return_value = Yellow;   
    }
    return colours_return_value;   
}
void Store_Cubelet_data()
{    
    if((8 >= colour_data) && (colour_data <= 15))
    {
     temp_colour_data_1 = colour_data - 8;//Result shall be the colour
     Cubelet_Colours[0] = temp_colour_data_1;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }
        
    if((16 >= colour_data) && (colour_data <= 23))
    {
     temp_colour_data_2 = colour_data - 16;//Result shall be the colour
     Cubelet_Colours[1] = temp_colour_data_2;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }
    if((24 >= colour_data) && (colour_data <= 31))
    {
     temp_colour_data_3 = colour_data - 24;//Result shall be the colour
     Cubelet_Colours[2] = temp_colour_data_3;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }   
    if((32 >= colour_data) && (colour_data <= 39))
    {
     temp_colour_data_4 = colour_data - 32;//Result shall be the colour
     Cubelet_Colours[3] = temp_colour_data_4;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    } 
    if((40 >= colour_data) && (colour_data <= 47))
    {
     temp_colour_data_5 = colour_data - 40;//Result shall be the colour
     Cubelet_Colours[4] = temp_colour_data_5;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }  
    if((48 >= colour_data) && (colour_data <= 55))
    {
     temp_colour_data_6 = colour_data - 48;//Result shall be the colour
     Cubelet_Colours[5] = temp_colour_data_6;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }   
    if((56 >= colour_data) && (colour_data <= 63))
    {
     temp_colour_data_7 = colour_data - 56;//Result shall be the colour
     Cubelet_Colours[6] = temp_colour_data_7;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }  
    if((64 >= colour_data) && (colour_data <= 71))
    {
     temp_colour_data_8 = colour_data - 64;//Result shall be the colour
     Cubelet_Colours[7] = temp_colour_data_8;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }  
    if((72 >= colour_data) && (colour_data <= 79))
    {
     temp_colour_data_9 = colour_data - 72;//Result shall be the colour
     Cubelet_Colours[8] = temp_colour_data_9;//Stores the colour value to the mememory map
     //take colour_data postion value and subtract it and you will be left with just the colour 
    }
        

    if(Cubelet_Colours[5] == 1)//Store data to the white side
    {
        CubeMap[0][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[0][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[0][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[0][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[0][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[0][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[0][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[0][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[0][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face    
    }  
    if(Cubelet_Colours[5] == 2)//Store data to the orange side
    {
        CubeMap[1][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[1][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[1][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[1][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[1][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[1][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[1][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[1][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[1][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face    
    }  
    if(Cubelet_Colours[5] == 3)//Store data to the blue side
    {
        CubeMap[2][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[2][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[2][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[2][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[2][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[2][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[2][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[2][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[2][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face    
    }  
    if(Cubelet_Colours[5] == 4)//Store data to the red side
    {
        CubeMap[3][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[3][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[3][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[3][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[3][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[3][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[3][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[3][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[3][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face    
    }  
    if(Cubelet_Colours[5] == 5)//Store data to the green side
    {
        CubeMap[4][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[4][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[4][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[4][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[4][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[4][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[4][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[4][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[4][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face     
    }   
    if(Cubelet_Colours[5] == 6)//Store data to the yellow side
    {
        CubeMap[5][0][0] = convert(Cubelet_Colours[0]);
        CubeMap[5][0][1] = convert(Cubelet_Colours[1]);
        CubeMap[5][0][2] = convert(Cubelet_Colours[2]);
        CubeMap[5][1][0] = convert(Cubelet_Colours[3]);
        CubeMap[5][1][1] = convert(Cubelet_Colours[4]);
        CubeMap[5][1][2] = convert(Cubelet_Colours[5]);
        CubeMap[5][2][0] = convert(Cubelet_Colours[6]);
        CubeMap[5][2][1] = convert(Cubelet_Colours[7]);
        CubeMap[5][2][2] = convert(Cubelet_Colours[8]);
        //Store this to the white face     
    }   
}

void Motor_Control()
{
    while(1)
    {
        if(Motor_To_Select !=0 and steps !=0)
        {
            if(Motor_To_Select == 1)
            {
                STEPPER_MOTOR_1.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
            else if(Motor_To_Select == 2)
            {
                STEPPER_MOTOR_2.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
             else if(Motor_To_Select == 3)
            {
                STEPPER_MOTOR_3.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
             else if(Motor_To_Select == 4)
            {
                STEPPER_MOTOR_4.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
             else if(Motor_To_Select == 5)
            {
                STEPPER_MOTOR_5.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
            
             else if(Motor_To_Select == 6)
            {
                STEPPER_MOTOR_6.Rotate_Steps(steps ,direction);
                //Motor_To_Select = 0;
            }
            
        }
    }
}

int main()
{
    pc.baud(9600);                                          //Sets the Serial Comms Baud Rate
    //SPI_INIT();
    cs = 1; //Active Low

    // Setup the spi for 8 bit data, high steady state clock,
    // second edge capture, with a 1MHz clock rate
    spi.format(16,1); // 8 Data bits phase 0 polarity 0 //CHECK THIS
    spi.frequency(1000000);//Output clock frequency 1Mhz
    //post();                                                 //Power on Self Test

    //Start Threads
    t1.start(Motor_Control);
    t2.start(SPI_INTERFACE);
    t3.start(Serial_Commands);
    //Interrupts
    SW1.fall(&SW1FallingEdge);
    SW2.fall(&SW2FallingEdge);
    
    //Main thread ID
    idMain = osThreadGetId();   //CMSIS RTOS call


    //Thread ID
    id1 = t1.gettid();
    id2 = t2.gettid();
    id3 = t3.gettid();
    id4 = t4.gettid();
    id5 = t5.gettid();
    id6 = t6.gettid();
    
    while(true) 
    {
        //Do nothing main thread will sleep        
    }
}