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@1:c2232b1eaf31, 2016-01-24 (annotated)
- Committer:
- epgmdm
- Date:
- Sun Jan 24 16:15:53 2016 +0000
- Revision:
- 1:c2232b1eaf31
- Parent:
- 0:c0f34d23943d
- Child:
- 2:d1eae91343a9
Basic structure has Hub,Locker,Battery and Test
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 | 0:c0f34d23943d | 9 | #include "utils.h" |
epgmdm | 1:c2232b1eaf31 | 10 | #include "battery.h" |
epgmdm | 1:c2232b1eaf31 | 11 | #include "hub.h" |
epgmdm | 0:c0f34d23943d | 12 | #include "locker.h" |
epgmdm | 1:c2232b1eaf31 | 13 | #include "test.h" |
epgmdm | 0:c0f34d23943d | 14 | #define debug |
epgmdm | 0:c0f34d23943d | 15 | |
epgmdm | 1:c2232b1eaf31 | 16 | // Defines the role of mbed |
epgmdm | 1:c2232b1eaf31 | 17 | char role; |
epgmdm | 0:c0f34d23943d | 18 | unsigned int version = 1453505344; // Linux epoch time |
epgmdm | 0:c0f34d23943d | 19 | unsigned int sdVersion; |
epgmdm | 0:c0f34d23943d | 20 | int id; |
epgmdm | 1:c2232b1eaf31 | 21 | int channel; |
epgmdm | 0:c0f34d23943d | 22 | |
epgmdm | 0:c0f34d23943d | 23 | // Sd card |
epgmdm | 0:c0f34d23943d | 24 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
epgmdm | 0:c0f34d23943d | 25 | |
epgmdm | 0:c0f34d23943d | 26 | |
epgmdm | 0:c0f34d23943d | 27 | /** |
epgmdm | 0:c0f34d23943d | 28 | * Reads config file and configures the mbed |
epgmdm | 0:c0f34d23943d | 29 | */ |
epgmdm | 0:c0f34d23943d | 30 | void initialise() |
epgmdm | 0:c0f34d23943d | 31 | { |
epgmdm | 0:c0f34d23943d | 32 | char * name = "/sd/config.ini"; |
epgmdm | 0:c0f34d23943d | 33 | FILE *fp; |
epgmdm | 0:c0f34d23943d | 34 | |
epgmdm | 0:c0f34d23943d | 35 | // Initialise the SD card |
epgmdm | 0:c0f34d23943d | 36 | spiSD(); |
epgmdm | 0:c0f34d23943d | 37 | sd.large_frames(false); |
epgmdm | 0:c0f34d23943d | 38 | sd.mount(); |
epgmdm | 0:c0f34d23943d | 39 | wait(0.1); |
epgmdm | 0:c0f34d23943d | 40 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 41 | printf(" SD MOUNTED Card role: %d Capacity: %.1fMB\n\r", sd.card_type(),(sd.disk_sectors() * 512) / 1048576.0); |
epgmdm | 0:c0f34d23943d | 42 | #endif |
epgmdm | 0:c0f34d23943d | 43 | |
epgmdm | 0:c0f34d23943d | 44 | |
epgmdm | 0:c0f34d23943d | 45 | //Configuration |
epgmdm | 0:c0f34d23943d | 46 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 47 | printf("Reading config file...\n\r"); |
epgmdm | 0:c0f34d23943d | 48 | #endif |
epgmdm | 0:c0f34d23943d | 49 | fp = fopen(name, "r"); |
epgmdm | 0:c0f34d23943d | 50 | if (fp == NULL) { |
epgmdm | 0:c0f34d23943d | 51 | writeError ("Config file cannot be read"); |
epgmdm | 0:c0f34d23943d | 52 | } |
epgmdm | 1:c2232b1eaf31 | 53 | if (fscanf (fp,"%c %*c %*s",&role )!=1) writeError("Config: cannot read role"); |
epgmdm | 0:c0f34d23943d | 54 | if (fscanf (fp,"%d %*c %*s",&sdVersion )!=1) writeError("Config: cannot read version"); |
epgmdm | 0:c0f34d23943d | 55 | if (fscanf (fp,"%d %*c %*s",&id )!=1) writeError("Config: cannot read id"); |
epgmdm | 0:c0f34d23943d | 56 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 57 | printf(" Type:%c, Version %u, ID %d\n\r",role,sdVersion,id); |
epgmdm | 0:c0f34d23943d | 58 | #endif |
epgmdm | 1:c2232b1eaf31 | 59 | switch (role){ |
epgmdm | 0:c0f34d23943d | 60 | case('B'): { // Battery |
epgmdm | 1:c2232b1eaf31 | 61 | initialiseBattery(fp); |
epgmdm | 0:c0f34d23943d | 62 | break; |
epgmdm | 0:c0f34d23943d | 63 | } |
epgmdm | 0:c0f34d23943d | 64 | case('H'): { // Hub |
epgmdm | 0:c0f34d23943d | 65 | //initialiseHub(fp); |
epgmdm | 0:c0f34d23943d | 66 | break; |
epgmdm | 0:c0f34d23943d | 67 | } |
epgmdm | 0:c0f34d23943d | 68 | case('L'): { // Locker |
epgmdm | 0:c0f34d23943d | 69 | initialiseLocker(fp); |
epgmdm | 0:c0f34d23943d | 70 | break; |
epgmdm | 0:c0f34d23943d | 71 | } |
epgmdm | 1:c2232b1eaf31 | 72 | case('T'): { // Test |
epgmdm | 1:c2232b1eaf31 | 73 | initialiseTest(fp); |
epgmdm | 1:c2232b1eaf31 | 74 | break; |
epgmdm | 1:c2232b1eaf31 | 75 | } |
epgmdm | 0:c0f34d23943d | 76 | default:{ |
epgmdm | 0:c0f34d23943d | 77 | writeError ("Type declared in config not available."); |
epgmdm | 0:c0f34d23943d | 78 | } |
epgmdm | 0:c0f34d23943d | 79 | |
epgmdm | 0:c0f34d23943d | 80 | } |
epgmdm | 0:c0f34d23943d | 81 | fclose (fp); |
epgmdm | 0:c0f34d23943d | 82 | } |
epgmdm | 0:c0f34d23943d | 83 | |
epgmdm | 0:c0f34d23943d | 84 | /** |
epgmdm | 0:c0f34d23943d | 85 | * main loop. Set up timers and interupts then wait |
epgmdm | 0:c0f34d23943d | 86 | */ |
epgmdm | 0:c0f34d23943d | 87 | int main() |
epgmdm | 0:c0f34d23943d | 88 | { |
epgmdm | 0:c0f34d23943d | 89 | struct tm * timeInf = localtime(&version); |
epgmdm | 0:c0f34d23943d | 90 | 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 | 91 | // |
epgmdm | 0:c0f34d23943d | 92 | // Read config and initialise |
epgmdm | 0:c0f34d23943d | 93 | // |
epgmdm | 0:c0f34d23943d | 94 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 95 | printf("\n\rInitialise \n\r"); |
epgmdm | 0:c0f34d23943d | 96 | #endif |
epgmdm | 0:c0f34d23943d | 97 | initialise(); |
epgmdm | 0:c0f34d23943d | 98 | #ifdef debug |
epgmdm | 0:c0f34d23943d | 99 | printf("\n\r> START LOOP\n\r"); |
epgmdm | 0:c0f34d23943d | 100 | #endif |
epgmdm | 0:c0f34d23943d | 101 | while (true) { |
epgmdm | 0:c0f34d23943d | 102 | // do slower routines |
epgmdm | 0:c0f34d23943d | 103 | |
epgmdm | 0:c0f34d23943d | 104 | } |
epgmdm | 0:c0f34d23943d | 105 | } |