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:
epgmdm
Date:
Thu Jan 28 14:38:45 2016 +0000
Revision:
2:d1eae91343a9
Parent:
1:c2232b1eaf31
Child:
3:86773d65ed58
Child:
4:74afa8c5ffe9
Got roles sorted

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