![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Proj 324 Final
Fork of ELEC351_Group_T by
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 } }