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
main.cpp@2:d1eae91343a9, 2016-01-28 (annotated)
- Committer:
- epgmdm
- Date:
- Thu Jan 28 14:38:45 2016 +0000
- Revision:
- 2:d1eae91343a9
- Parent:
- 1:c2232b1eaf31
Got roles sorted
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
epgmdm | 0:c0f34d23943d | 1 | /** |
epgmdm | 0:c0f34d23943d | 2 | * This is a multi-purpose mbed. Duiring initialisation it reads the config file and then configures the mbed appropriately. |
epgmdm | 0:c0f34d23943d | 3 | * L Locker |
epgmdm | 0:c0f34d23943d | 4 | * H main Hub |
epgmdm | 0:c0f34d23943d | 5 | * B Battery |
epgmdm | 0:c0f34d23943d | 6 | */ |
epgmdm | 0:c0f34d23943d | 7 | #include "mbed.h" |
epgmdm | 0:c0f34d23943d | 8 | #include "SDFileSystem.h" |
epgmdm | 2:d1eae91343a9 | 9 | #include "NRF2401P.h" |
epgmdm | 0:c0f34d23943d | 10 | #include "utils.h" |
epgmdm | 1:c2232b1eaf31 | 11 | #include "battery.h" |
epgmdm | 1:c2232b1eaf31 | 12 | #include "hub.h" |
epgmdm | 0:c0f34d23943d | 13 | #include "locker.h" |
epgmdm | 1:c2232b1eaf31 | 14 | #include "test.h" |
epgmdm | 0:c0f34d23943d | 15 | #define debug |
epgmdm | 0:c0f34d23943d | 16 | |
epgmdm | 1:c2232b1eaf31 | 17 | // Defines the role of mbed |
epgmdm | 1:c2232b1eaf31 | 18 | char role; |
epgmdm | 0:c0f34d23943d | 19 | unsigned int version = 1453505344; // Linux epoch time |
epgmdm | 0:c0f34d23943d | 20 | unsigned int sdVersion; |
epgmdm | 0:c0f34d23943d | 21 | int id; |
epgmdm | 1:c2232b1eaf31 | 22 | int channel; |
epgmdm | 2:d1eae91343a9 | 23 | char txBuff[100]; |
epgmdm | 0:c0f34d23943d | 24 | |
epgmdm | 0:c0f34d23943d | 25 | // Sd card |
epgmdm | 0:c0f34d23943d | 26 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
epgmdm | 0:c0f34d23943d | 27 | |
epgmdm | 2:d1eae91343a9 | 28 | // nrf |
epgmdm | 2:d1eae91343a9 | 29 | NRF2401P nrf1(PTD6,PTD7, PTD5,PTD4, PTC12); //mosi, miso, sclk, csn, ce) |
epgmdm | 0:c0f34d23943d | 30 | /** |
epgmdm | 0:c0f34d23943d | 31 | * Reads config file and configures the mbed |
epgmdm | 0:c0f34d23943d | 32 | */ |
epgmdm | 0:c0f34d23943d | 33 | void initialise() |
epgmdm | 0:c0f34d23943d | 34 | { |
epgmdm | 0:c0f34d23943d | 35 | char * name = "/sd/config.ini"; |
epgmdm | 0:c0f34d23943d | 36 | FILE *fp; |
epgmdm | 0:c0f34d23943d | 37 | |
epgmdm | 0:c0f34d23943d | 38 | // Initialise the SD card |
epgmdm | 0:c0f34d23943d | 39 | spiSD(); |
epgmdm | 0:c0f34d23943d | 40 | sd.large_frames(false); |
epgmdm | 0:c0f34d23943d | 41 | sd.mount(); |
epgmdm | 0:c0f34d23943d | 42 | wait(0.1); |
epgmdm | 0:c0f34d23943d | 43 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 44 | printf(" SD MOUNTED Card role: %d Capacity: %.1fMB\n\r", sd.card_type(),(sd.disk_sectors() * 512) / 1048576.0); |
epgmdm | 0:c0f34d23943d | 45 | #endif |
epgmdm | 0:c0f34d23943d | 46 | |
epgmdm | 0:c0f34d23943d | 47 | |
epgmdm | 0:c0f34d23943d | 48 | //Configuration |
epgmdm | 0:c0f34d23943d | 49 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 50 | printf("Reading config file...\n\r"); |
epgmdm | 0:c0f34d23943d | 51 | #endif |
epgmdm | 0:c0f34d23943d | 52 | fp = fopen(name, "r"); |
epgmdm | 0:c0f34d23943d | 53 | if (fp == NULL) { |
epgmdm | 0:c0f34d23943d | 54 | writeError ("Config file cannot be read"); |
epgmdm | 0:c0f34d23943d | 55 | } |
epgmdm | 1:c2232b1eaf31 | 56 | if (fscanf (fp,"%c %*c %*s",&role )!=1) writeError("Config: cannot read role"); |
epgmdm | 0:c0f34d23943d | 57 | if (fscanf (fp,"%d %*c %*s",&sdVersion )!=1) writeError("Config: cannot read version"); |
epgmdm | 0:c0f34d23943d | 58 | if (fscanf (fp,"%d %*c %*s",&id )!=1) writeError("Config: cannot read id"); |
epgmdm | 0:c0f34d23943d | 59 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 60 | printf(" Type:%c, Version %u, ID %d\n\r",role,sdVersion,id); |
epgmdm | 0:c0f34d23943d | 61 | #endif |
epgmdm | 1:c2232b1eaf31 | 62 | switch (role){ |
epgmdm | 0:c0f34d23943d | 63 | case('B'): { // Battery |
epgmdm | 1:c2232b1eaf31 | 64 | initialiseBattery(fp); |
epgmdm | 0:c0f34d23943d | 65 | break; |
epgmdm | 0:c0f34d23943d | 66 | } |
epgmdm | 0:c0f34d23943d | 67 | case('H'): { // Hub |
epgmdm | 2:d1eae91343a9 | 68 | initialiseHub(fp); |
epgmdm | 0:c0f34d23943d | 69 | break; |
epgmdm | 0:c0f34d23943d | 70 | } |
epgmdm | 0:c0f34d23943d | 71 | case('L'): { // Locker |
epgmdm | 0:c0f34d23943d | 72 | initialiseLocker(fp); |
epgmdm | 0:c0f34d23943d | 73 | break; |
epgmdm | 0:c0f34d23943d | 74 | } |
epgmdm | 1:c2232b1eaf31 | 75 | case('T'): { // Test |
epgmdm | 1:c2232b1eaf31 | 76 | initialiseTest(fp); |
epgmdm | 1:c2232b1eaf31 | 77 | break; |
epgmdm | 1:c2232b1eaf31 | 78 | } |
epgmdm | 0:c0f34d23943d | 79 | default:{ |
epgmdm | 2:d1eae91343a9 | 80 | writeError ("Type declared in config not available."); |
epgmdm | 2:d1eae91343a9 | 81 | } |
epgmdm | 2:d1eae91343a9 | 82 | |
epgmdm | 0:c0f34d23943d | 83 | } |
epgmdm | 0:c0f34d23943d | 84 | fclose (fp); |
epgmdm | 0:c0f34d23943d | 85 | } |
epgmdm | 0:c0f34d23943d | 86 | |
epgmdm | 0:c0f34d23943d | 87 | /** |
epgmdm | 0:c0f34d23943d | 88 | * main loop. Set up timers and interupts then wait |
epgmdm | 0:c0f34d23943d | 89 | */ |
epgmdm | 0:c0f34d23943d | 90 | int main() |
epgmdm | 0:c0f34d23943d | 91 | { |
epgmdm | 0:c0f34d23943d | 92 | struct tm * timeInf = localtime(&version); |
epgmdm | 0:c0f34d23943d | 93 | printf("\n\r SOLAR NANO GRID CONTROLLER. Version %04d-%02d-%02d %02d:%02d \n\r", timeInf->tm_year+1900,timeInf->tm_mon+1,timeInf->tm_mday,timeInf->tm_hour, timeInf->tm_sec); |
epgmdm | 0:c0f34d23943d | 94 | // |
epgmdm | 0:c0f34d23943d | 95 | // Read config and initialise |
epgmdm | 0:c0f34d23943d | 96 | // |
epgmdm | 0:c0f34d23943d | 97 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 98 | printf("\n\rInitialise \n\r"); |
epgmdm | 0:c0f34d23943d | 99 | #endif |
epgmdm | 0:c0f34d23943d | 100 | initialise(); |
epgmdm | 0:c0f34d23943d | 101 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 102 | printf("\n\r> START LOOP\n\r"); |
epgmdm | 0:c0f34d23943d | 103 | #endif |
epgmdm | 0:c0f34d23943d | 104 | while (true) { |
epgmdm | 0:c0f34d23943d | 105 | // do slower routines |
epgmdm | 2:d1eae91343a9 | 106 | switch (role){ |
epgmdm | 2:d1eae91343a9 | 107 | case('B'): { // Battery |
epgmdm | 2:d1eae91343a9 | 108 | loopBattery(); |
epgmdm | 2:d1eae91343a9 | 109 | break; |
epgmdm | 2:d1eae91343a9 | 110 | } |
epgmdm | 2:d1eae91343a9 | 111 | case('H'): { // Hub |
epgmdm | 2:d1eae91343a9 | 112 | loopHub(); |
epgmdm | 2:d1eae91343a9 | 113 | break; |
epgmdm | 2:d1eae91343a9 | 114 | } |
epgmdm | 2:d1eae91343a9 | 115 | case('L'): { // Locker |
epgmdm | 2:d1eae91343a9 | 116 | loopLocker(); |
epgmdm | 2:d1eae91343a9 | 117 | break; |
epgmdm | 2:d1eae91343a9 | 118 | } |
epgmdm | 2:d1eae91343a9 | 119 | case('T'): { // Test |
epgmdm | 2:d1eae91343a9 | 120 | loopTest(); |
epgmdm | 2:d1eae91343a9 | 121 | break; |
epgmdm | 2:d1eae91343a9 | 122 | } |
epgmdm | 2:d1eae91343a9 | 123 | default:{ |
epgmdm | 2:d1eae91343a9 | 124 | writeError ("Type declared in config not available."); |
epgmdm | 2:d1eae91343a9 | 125 | } |
epgmdm | 2:d1eae91343a9 | 126 | } |
epgmdm | 0:c0f34d23943d | 127 | |
epgmdm | 0:c0f34d23943d | 128 | } |
epgmdm | 0:c0f34d23943d | 129 | } |