Proj 324 Final

Fork of ELEC351_Group_T by Plymouth ELEC351 Group T

Committer:
thomasmorris
Date:
Mon Jan 08 21:53:40 2018 +0000
Revision:
47:6d128e500875
Parent:
46:bd9e7e40b3f9
Child:
48:244d6d81bb52
FINAL working copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
thomasmorris 6:97f586597310 1 /*
thomasmorris 6:97f586597310 2 ELEC 351 Group T
thomasmorris 6:97f586597310 3 Team Members : Christopher Hills, Thomas Morris
thomasmorris 42:ae1640bca2e1 4 Current Verision 19
thomasmorris 42:ae1640bca2e1 5 Overiew: Working Tasks 1,2,3,5,6,7,8,9,10,11,12,13,14,15
thomasmorris 8:0e4481b64353 6
thomasmorris 12:536eca338ae8 7 Last Revision: Added Mail Box to serial
thomasmorris 8:0e4481b64353 8 Todo:
thomasmorris 42:ae1640bca2e1 9 Add functionality to SD card import chris's work on delete serial commnads
thomasmorris 42:ae1640bca2e1 10 Commnet code
thomasmorris 42:ae1640bca2e1 11 Check for race conditions
thomasmorris 42:ae1640bca2e1 12 Move code around
thomasmorris 42:ae1640bca2e1 13 Other fixes
thomasmorris 6:97f586597310 14 */
thomasmorris 6:97f586597310 15
thomasmorris 25:36699ed589ab 16 #include "SETUP.hpp"
thomasmorris 35:26b0a9b55d82 17 #include "NETWORK.hpp"
thomasmorris 47:6d128e500875 18 #include "FIFO.hpp"
thomasmorris 47:6d128e500875 19 #include "SD_CARD.hpp"
thomasmorris 47:6d128e500875 20 #include "SERIAL_COMMANDS.hpp"
thomasmorris 47:6d128e500875 21 #include "SAMPLE.hpp"
thomasmorris 47:6d128e500875 22 #include "THREADS.hpp"
thomasmorris 41:859b5e1e3d9a 23 void SD_Card()//Writes data to the SD card
thomasmorris 41:859b5e1e3d9a 24 {
thomasmorris 41:859b5e1e3d9a 25 while(1)
thomasmorris 41:859b5e1e3d9a 26 {
thomasmorris 42:ae1640bca2e1 27 Thread::wait(Sample_Rate*1000); //Waits until a new is taken before checking again
thomasmorris 47:6d128e500875 28 SD_Card_Write();
thomasmorris 41:859b5e1e3d9a 29 }
thomasmorris 38:8d86e0d8a816 30 }
thomasmorris 35:26b0a9b55d82 31 void Network()
thomasmorris 8:0e4481b64353 32 {
thomasmorris 35:26b0a9b55d82 33 while(1)
thomasmorris 35:26b0a9b55d82 34 {
thomasmorris 41:859b5e1e3d9a 35 Thread::wait(NetworkWait);//Waits Network Wait amount of time
thomasmorris 47:6d128e500875 36 Networking();
thomasmorris 35:26b0a9b55d82 37 }
chills 13:db857b3744c6 38 }
thomasmorris 47:6d128e500875 39 void LCD_Output()
thomasmorris 30:4cde05cc7c4f 40 {
thomasmorris 30:4cde05cc7c4f 41 while(1)
thomasmorris 29:64b1f95a807c 42 {
thomasmorris 41:859b5e1e3d9a 43 Thread::wait(10);//Small wait
thomasmorris 47:6d128e500875 44 LCD_Print_Output();
thomasmorris 7:dfe19413fdc2 45 }
thomasmorris 7:dfe19413fdc2 46 }
thomasmorris 47:6d128e500875 47 void Serial_Commands()
thomasmorris 22:eb4cc12087b2 48 {
thomasmorris 47:6d128e500875 49 while(1)
thomasmorris 47:6d128e500875 50 {
thomasmorris 47:6d128e500875 51 Serial_Commands_Output();
thomasmorris 47:6d128e500875 52 }
thomasmorris 42:ae1640bca2e1 53
thomasmorris 22:eb4cc12087b2 54 }
thomasmorris 5:2594b953f111 55
thomasmorris 47:6d128e500875 56 void Sample()
thomasmorris 5:2594b953f111 57 {
thomasmorris 47:6d128e500875 58 Sample_Event();
thomasmorris 25:36699ed589ab 59 }
thomasmorris 25:36699ed589ab 60 int main()
thomasmorris 25:36699ed589ab 61 {
thomasmorris 37:7c4d7f206039 62 set_time(1515352584); //Set RTC time to December 10 2017
thomasmorris 30:4cde05cc7c4f 63
chills 10:46946784326d 64 pc.baud(9600); //Sets the Serial Comms Baud Rate
thomasmorris 25:36699ed589ab 65
chills 20:cbb71f84cff9 66 LCD.Initialise();
thomasmorris 28:09b5c46c8afd 67 LCD.DDRAM_Address(0x00);
thomasmorris 29:64b1f95a807c 68
thomasmorris 25:36699ed589ab 69 post(); //Power on Self Test
thomasmorris 25:36699ed589ab 70
noutram 3:a88838ff33e7 71 //Initialise the SD card (this needs to move)
noutram 1:e1cf7663f5ff 72 if ( sd.init() != 0) {
thomasmorris 45:875f7e18a386 73 printf("SD Init failed \n");
thomasmorris 28:09b5c46c8afd 74 LCD.Display_Clear();
thomasmorris 28:09b5c46c8afd 75 LCD.Write_String("CANNOT INIT SD"); //Change me
noutram 1:e1cf7663f5ff 76 errorCode(FATAL);
thomasmorris 25:36699ed589ab 77 }
noutram 1:e1cf7663f5ff 78 //Create a filing system for SD Card
thomasmorris 25:36699ed589ab 79 FATFileSystem fs("sd", &sd);
noutram 0:36e89e3ed7c4 80
noutram 1:e1cf7663f5ff 81 //Open to WRITE
thomasmorris 41:859b5e1e3d9a 82 FILE* fp = fopen("/sd/test.csv","a");//test.csv is created in the SD Card
noutram 1:e1cf7663f5ff 83 if (fp == NULL) {
noutram 1:e1cf7663f5ff 84 error("Could not open file for write\n");
thomasmorris 28:09b5c46c8afd 85 LCD.Display_Clear();
thomasmorris 37:7c4d7f206039 86 LCD.Write_String("CANNOT OPEN FILE");
noutram 1:e1cf7663f5ff 87 errorCode(FATAL);
noutram 1:e1cf7663f5ff 88 }
thomasmorris 41:859b5e1e3d9a 89 //Close File
thomasmorris 41:859b5e1e3d9a 90 fclose(fp);
thomasmorris 37:7c4d7f206039 91 int network_temp;
thomasmorris 37:7c4d7f206039 92 network_temp = Network_Init();
thomasmorris 37:7c4d7f206039 93 if(network_temp == 1)//Sets up the network and checks if the network cable is not pluged in
thomasmorris 37:7c4d7f206039 94 {
thomasmorris 37:7c4d7f206039 95 error("Could not access network");
thomasmorris 37:7c4d7f206039 96 LCD.Display_Clear();
thomasmorris 37:7c4d7f206039 97 LCD.Write_String("Could not access network");
thomasmorris 41:859b5e1e3d9a 98 errorCode(NETWORK_FATAL);
thomasmorris 37:7c4d7f206039 99 }
noutram 3:a88838ff33e7 100 //Last message before sampling begins
thomasmorris 28:09b5c46c8afd 101 LCD.Display_Clear();
thomasmorris 35:26b0a9b55d82 102 LCD.Write_String("READY PLAYER");
thomasmorris 31:4a88bf97b53e 103 LCD.DDRAM_Address(0x40);
thomasmorris 35:26b0a9b55d82 104 LCD.Write_String(" One ");
thomasmorris 31:4a88bf97b53e 105 LCD.DDRAM_Address(0x00);
thomasmorris 25:36699ed589ab 106
thomasmorris 25:36699ed589ab 107 Sample_Rate = TimerInterval;
chills 24:7d2da96e05ad 108 //Run interrupt
chills 26:78f5e454e59f 109 Sampling_Timer.attach(&Sampling_ISR,Sample_Rate);
chills 24:7d2da96e05ad 110
thomasmorris 5:2594b953f111 111 t1.start(Sample);
thomasmorris 41:859b5e1e3d9a 112 t2.start(SD_Card);
thomasmorris 30:4cde05cc7c4f 113 t3.start(LCD_Output);
thomasmorris 35:26b0a9b55d82 114 t4.start(Network);
thomasmorris 23:3c85d7f657a2 115 t5.start(Serial_Commands);
thomasmorris 25:36699ed589ab 116
thomasmorris 5:2594b953f111 117 //Main thread ID
thomasmorris 25:36699ed589ab 118
thomasmorris 5:2594b953f111 119 idMain = osThreadGetId(); //CMSIS RTOS call
thomasmorris 25:36699ed589ab 120
thomasmorris 5:2594b953f111 121 //Thread ID
thomasmorris 5:2594b953f111 122 id1 = t1.gettid();
thomasmorris 5:2594b953f111 123 id2 = t2.gettid();
thomasmorris 21:3c078c799caa 124 id3 = t3.gettid();
thomasmorris 21:3c078c799caa 125 id4 = t4.gettid();
chills 24:7d2da96e05ad 126 id5 = t5.gettid();
thomasmorris 25:36699ed589ab 127
noutram 1:e1cf7663f5ff 128 while(true) {
thomasmorris 41:859b5e1e3d9a 129 if(onBoardSwitch == 1)
thomasmorris 41:859b5e1e3d9a 130 {
thomasmorris 41:859b5e1e3d9a 131 fclose(fp);//Close File
thomasmorris 41:859b5e1e3d9a 132 sd.deinit();//Close down
thomasmorris 41:859b5e1e3d9a 133 LCD.Display_Clear();
thomasmorris 41:859b5e1e3d9a 134 LCD.DDRAM_Address(0x00);
thomasmorris 41:859b5e1e3d9a 135 LCD.Write_String("SD Card");
thomasmorris 41:859b5e1e3d9a 136 LCD.DDRAM_Address(0x40);
thomasmorris 41:859b5e1e3d9a 137 LCD.Write_String("Unmounted");
thomasmorris 41:859b5e1e3d9a 138 LCD.DDRAM_Address(0x00);
chills 46:bd9e7e40b3f9 139 pc.printf("SD Card Unmounted\n");
thomasmorris 45:875f7e18a386 140 Green_led.switchOn();
thomasmorris 41:859b5e1e3d9a 141 }
noutram 0:36e89e3ed7c4 142 }
thomasmorris 45:875f7e18a386 143 }