working version of song control with initialization from sd card

Dependencies:   MFRC522 NRF2401P SDFileSystem SPI_TFT_ILI9341 TFT_fonts mbed

Fork of Song_Control by Malcolm McCulloch

Committer:
dxyang
Date:
Sun Feb 21 00:09:29 2016 +0000
Revision:
4:74afa8c5ffe9
Parent:
2:d1eae91343a9
same as "Got roles sorted" but added an enter - makes my other commit of integration into a separate branch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
epgmdm 1:c2232b1eaf31 1 /**
epgmdm 1:c2232b1eaf31 2 * All the code associated to run the mbed as a hub.
epgmdm 1:c2232b1eaf31 3 * Link with locker
epgmdm 1:c2232b1eaf31 4 */
epgmdm 1:c2232b1eaf31 5 #include "mbed.h"
epgmdm 1:c2232b1eaf31 6 #include "utils.h"
epgmdm 2:d1eae91343a9 7 #include "NRF2401P.h"
dxyang 4:74afa8c5ffe9 8
epgmdm 1:c2232b1eaf31 9 #define debug
epgmdm 1:c2232b1eaf31 10
epgmdm 1:c2232b1eaf31 11 // Flags
epgmdm 2:d1eae91343a9 12 unsigned char flag1sH = 0;
epgmdm 2:d1eae91343a9 13
epgmdm 1:c2232b1eaf31 14 // Variables
epgmdm 2:d1eae91343a9 15 Ticker tick1sHub;
epgmdm 2:d1eae91343a9 16 float currentMaxH = 1.5; // Maximum current that each cube can consume.
epgmdm 2:d1eae91343a9 17
epgmdm 1:c2232b1eaf31 18 // tx nRF2401
epgmdm 2:d1eae91343a9 19 extern char txBuff[];
epgmdm 2:d1eae91343a9 20 extern NRF2401P nrf1;
epgmdm 2:d1eae91343a9 21 extern int channel;
epgmdm 1:c2232b1eaf31 22 long long addrLcker=0xBBBBBBBBBB;
epgmdm 2:d1eae91343a9 23 // -----------------------------------------------------------------------------
epgmdm 2:d1eae91343a9 24 // Interupt routines
epgmdm 2:d1eae91343a9 25 // -----------------------------------------------------------------------------
epgmdm 2:d1eae91343a9 26 /**
epgmdm 2:d1eae91343a9 27 * Fast interrupt routine for every 1 second
epgmdm 2:d1eae91343a9 28 */
epgmdm 2:d1eae91343a9 29 void int1sH()
epgmdm 2:d1eae91343a9 30 {
epgmdm 2:d1eae91343a9 31 flag1sH=1;
epgmdm 2:d1eae91343a9 32 // add only fast code.
epgmdm 2:d1eae91343a9 33 }
epgmdm 2:d1eae91343a9 34 /**
epgmdm 2:d1eae91343a9 35 * Sends a time stamp
epgmdm 2:d1eae91343a9 36 */
epgmdm 2:d1eae91343a9 37 void txTimeH()
epgmdm 2:d1eae91343a9 38 {
epgmdm 2:d1eae91343a9 39 #ifdef debug
epgmdm 2:d1eae91343a9 40 printf("Send time \n\r");
epgmdm 2:d1eae91343a9 41 #endif
epgmdm 2:d1eae91343a9 42 time_t now= time(NULL);
epgmdm 2:d1eae91343a9 43 sprintf(txBuff,"T %X",now);
epgmdm 2:d1eae91343a9 44 nrf1.transmitData(txBuff,strlen(txBuff));
epgmdm 2:d1eae91343a9 45 #ifdef debug
epgmdm 2:d1eae91343a9 46 printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString());
epgmdm 2:d1eae91343a9 47 #endif
epgmdm 2:d1eae91343a9 48 }
epgmdm 2:d1eae91343a9 49
epgmdm 2:d1eae91343a9 50 /**
epgmdm 2:d1eae91343a9 51 * Sends max Current
epgmdm 2:d1eae91343a9 52 */
epgmdm 2:d1eae91343a9 53 void txCurrentH()
epgmdm 2:d1eae91343a9 54 {
epgmdm 2:d1eae91343a9 55 #ifdef debug
epgmdm 2:d1eae91343a9 56 printf("Send current \n\r");
epgmdm 2:d1eae91343a9 57 #endif
epgmdm 2:d1eae91343a9 58 sprintf(txBuff,"I %04X", *((int *) &currentMaxH));
epgmdm 2:d1eae91343a9 59 nrf1.transmitData(txBuff,strlen(txBuff));
epgmdm 2:d1eae91343a9 60 #ifdef debug
epgmdm 2:d1eae91343a9 61 printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString());
epgmdm 2:d1eae91343a9 62 #endif
epgmdm 2:d1eae91343a9 63 }
epgmdm 1:c2232b1eaf31 64
epgmdm 2:d1eae91343a9 65 /**
epgmdm 2:d1eae91343a9 66 * Slow interrupt routine for every 1 second
epgmdm 2:d1eae91343a9 67 */
epgmdm 2:d1eae91343a9 68 void do1sH()
epgmdm 2:d1eae91343a9 69 {
epgmdm 2:d1eae91343a9 70 #ifdef debug
epgmdm 2:d1eae91343a9 71 printf("Hub 1s \n\r");
epgmdm 2:d1eae91343a9 72 #endif
epgmdm 2:d1eae91343a9 73
epgmdm 2:d1eae91343a9 74 time_t now= time(NULL);
epgmdm 2:d1eae91343a9 75 if ((now % 60)==0){
epgmdm 2:d1eae91343a9 76 txTimeH();
epgmdm 2:d1eae91343a9 77 }
epgmdm 2:d1eae91343a9 78 txCurrentH();
epgmdm 2:d1eae91343a9 79 #ifdef debug
epgmdm 2:d1eae91343a9 80 printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString());
epgmdm 2:d1eae91343a9 81 #endif
epgmdm 2:d1eae91343a9 82 }
epgmdm 2:d1eae91343a9 83 // -----------------------------------------------------------------------------
epgmdm 1:c2232b1eaf31 84 // Initializaton
epgmdm 2:d1eae91343a9 85 // -----------------------------------------------------------------------------
epgmdm 2:d1eae91343a9 86 /**
epgmdm 2:d1eae91343a9 87 * Sets up the interrupts for the hub
epgmdm 2:d1eae91343a9 88 */
epgmdm 2:d1eae91343a9 89 void initInteruptsHub(){
epgmdm 2:d1eae91343a9 90 tick1sHub.attach(&int1sH, 10.0);
epgmdm 2:d1eae91343a9 91 }
epgmdm 2:d1eae91343a9 92 /**
epgmdm 2:d1eae91343a9 93 * asks the user for the time
epgmdm 2:d1eae91343a9 94 */
epgmdm 2:d1eae91343a9 95
epgmdm 2:d1eae91343a9 96 void setRTCpc()
epgmdm 2:d1eae91343a9 97 {
epgmdm 2:d1eae91343a9 98 // get the current time from the terminal
epgmdm 2:d1eae91343a9 99 struct tm t;
epgmdm 2:d1eae91343a9 100 printf("Enter current date :\n\r");
epgmdm 2:d1eae91343a9 101 printf("YYYY MM DD [enter]\n\r");
epgmdm 2:d1eae91343a9 102 scanf("%d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday);
epgmdm 2:d1eae91343a9 103 printf("Enter current time:\n\r");
epgmdm 2:d1eae91343a9 104 printf("HH MM SS [enter]\n\r");
epgmdm 2:d1eae91343a9 105 scanf("%d %d %d", &t.tm_hour, &t.tm_min, &t.tm_sec);
epgmdm 2:d1eae91343a9 106
epgmdm 2:d1eae91343a9 107 // adjust for tm structure required values
epgmdm 2:d1eae91343a9 108 t.tm_year = t.tm_year - 1900;
epgmdm 2:d1eae91343a9 109 t.tm_mon = t.tm_mon - 1;
epgmdm 2:d1eae91343a9 110
epgmdm 2:d1eae91343a9 111 // set the time
epgmdm 2:d1eae91343a9 112 set_time(mktime(&t));
epgmdm 2:d1eae91343a9 113
epgmdm 2:d1eae91343a9 114 }
epgmdm 2:d1eae91343a9 115
epgmdm 2:d1eae91343a9 116
epgmdm 2:d1eae91343a9 117
epgmdm 1:c2232b1eaf31 118 /**
epgmdm 1:c2232b1eaf31 119 * Initialise for a locker
epgmdm 1:c2232b1eaf31 120 * fp is the config file if additonal information is needed.
epgmdm 1:c2232b1eaf31 121 */
epgmdm 1:c2232b1eaf31 122 void initialiseHub(FILE *fp){
epgmdm 1:c2232b1eaf31 123 #ifdef debug
epgmdm 1:c2232b1eaf31 124 printf("Initialise Hub\n\r");
epgmdm 1:c2232b1eaf31 125 #endif
epgmdm 1:c2232b1eaf31 126
epgmdm 1:c2232b1eaf31 127 // Read in hub address and channel
epgmdm 1:c2232b1eaf31 128 if (fscanf (fp,"%x %*c %*s",&channel )!=1) writeError("Hub config: cannot read channel");
epgmdm 1:c2232b1eaf31 129 if (fscanf (fp,"%llx %*c %*s",&addrLcker )!=1) writeError("Hub config: cannot read hub address");
epgmdm 1:c2232b1eaf31 130
epgmdm 1:c2232b1eaf31 131 #ifdef debug
epgmdm 1:c2232b1eaf31 132 printf(" Channel:%x, Hub Address %llx \n\r",channel, addrLcker);
epgmdm 1:c2232b1eaf31 133 #endif
epgmdm 2:d1eae91343a9 134 setRTCpc();
epgmdm 2:d1eae91343a9 135
epgmdm 2:d1eae91343a9 136 // Setup nrf
epgmdm 2:d1eae91343a9 137
epgmdm 2:d1eae91343a9 138 #ifdef debug
epgmdm 2:d1eae91343a9 139 printf("Steup doNrf \n\r");
epgmdm 2:d1eae91343a9 140 #endif
epgmdm 2:d1eae91343a9 141 spiNrf();
epgmdm 2:d1eae91343a9 142 nrf1.quickTxSetup(channel, addrLcker);
epgmdm 2:d1eae91343a9 143 #ifdef debug
epgmdm 2:d1eae91343a9 144 nrf1.printDetails();
epgmdm 2:d1eae91343a9 145 nrf1.checkStatus();
epgmdm 2:d1eae91343a9 146 printf("Setup doNrf complete [nrf:%s]\n\r",nrf1.statusString());
epgmdm 2:d1eae91343a9 147 #endif
epgmdm 2:d1eae91343a9 148
epgmdm 2:d1eae91343a9 149 // Setup interupts
epgmdm 2:d1eae91343a9 150 initInteruptsHub();
epgmdm 1:c2232b1eaf31 151
epgmdm 1:c2232b1eaf31 152
epgmdm 1:c2232b1eaf31 153 }
epgmdm 2:d1eae91343a9 154
epgmdm 1:c2232b1eaf31 155 // Interupt routines
epgmdm 1:c2232b1eaf31 156
epgmdm 1:c2232b1eaf31 157 // Loop through slow routines
epgmdm 1:c2232b1eaf31 158
epgmdm 1:c2232b1eaf31 159 void loopHub(){
epgmdm 1:c2232b1eaf31 160
epgmdm 2:d1eae91343a9 161 if (flag1sH){
epgmdm 2:d1eae91343a9 162 do1sH();
epgmdm 2:d1eae91343a9 163 flag1sH=0;
epgmdm 2:d1eae91343a9 164 }
epgmdm 1:c2232b1eaf31 165 }