Data sample and LCD plot

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG SDRAM_DISCO_F746NG mbed

main.cpp

Committer:
tapiov
Date:
2018-02-23
Revision:
1:c3c61d08f31b
Parent:
0:b3e6088c873f
Child:
2:386f65563144

File content as of revision 1:c3c61d08f31b:

// LoadCell_STM32_RAM v2 main
// (C) Tapio Valli 2018-02-17

#include "mbed.h"
#include <mbed_stats.h>
#include "mbed_mem_trace.h"

#include "LCD_DISCO_F746NG.h"

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>

#include "main.h"

// define the Serial object
Serial pc1(USBTX, USBRX);
LCD_DISCO_F746NG lcd1;


// Global heap stats
mbed_stats_heap_t heap_stats;
//mbed_stats_stack_t stack_stats;
//mbed_mem_trace_cb_t mem_trace_result;

// Mem trace callback
// mbed_mem_trace_cb_t mem_trace(void) 
// {
//     pc1.printf("Heap = %lu, Max = %lu Percentage = %lu \r\n",
//                heap_stats.current_size,heap_stats.max_size,
//                (100*(heap_stats.current_size/heap_stats.max_size)));
                   
//    pc1.printf("Stack = %lu, Max = %lu Percentage = %lu \r\n",
//                stack_stats.reserved_size,stack_stats.max_size,
//                (100*(stack_stats.reserved_size/stack_stats.max_size)));    
//}

int main() {

    char CmdBuffer[30];
    char Arg[30]=" ";
    char Cmd[30]=" ";

    uint32_t    NoOfPoints=19200;  
    uint32_t    AvgSize=10;
    uint32_t    Period_us=100;
    uint32_t    Count_ms=1000;
        
//    mbed_mem_trace_set_callback(mem_trace);
        
    // Clear screen, set it up 
    InitScreen(LCD_COLOR_BLACK,LCD_COLOR_WHITE);
    
    //Initialize data storage
    Array Data;
    initArray(&Data,NoOfPoints);  // initially 19200 elements
    
    while (Cmd!="quit") {
        
        // Print Ready and current settings 
        pc1.printf("Ready. Settings are Points = %u, Avg = %u, Period_us = %u, Count_ms = %u \r\n",
                   NoOfPoints,AvgSize,Period_us,Count_ms);

        mbed_stats_heap_get(&heap_stats);                
        pc1.printf("Heap = %lu, Max = %lu Percentage = %lu \r\n",
                   heap_stats.current_size,heap_stats.max_size,
                   (100*(heap_stats.current_size/heap_stats.max_size)));
                                                                            
        pc1.gets(CmdBuffer,30);
        // pc1.printf("I got %s \r\n", CmdBuffer);
        strcpy(Cmd," ");
        strcpy(Arg," ");
                
        // Parse command and possible numeric arg
        char s[] = "Initial string";
        char ** word_array = NULL;
        
        strcpy(s,CmdBuffer);
        size_t n = string_parser(s, &word_array );

        for ( size_t i = 0; i < n; i++ ) {
            if (i==0) {strcpy(Cmd,word_array[i]);}
            if (i==1) {strcpy(Arg,word_array[i]);}
            if (i>1) {pc1.printf("Wrong number of arguments \r\n");}
        }
        
        // pc1.printf("Cmd = %s Arg = %s \r\n",Cmd,Arg);
        for ( size_t i = 0; i < n; i++ ) free( word_array[i] );
        free( word_array );
    
        // Branch based on command        
        // meas: Sample and plot a data set
        if(strcmp(Cmd,"meas") == 0) {
            
            // Countdown
            CountDown(Count_ms);
                                 
            // Sample & plot data one time
            SamplePoints(&Data,NoOfPoints,Period_us);
            
            AvgAndPlotPoints(&Data,NoOfPoints,AvgSize);
        }
        
        // setpoints: Adjust sampled points                          
        else if(strcmp(Cmd,"setpoints") == 0) {
            // Allocate more or less data space
            NoOfPoints=(uint32_t) strtol(Arg,NULL,10);
            insertArray(&Data,NoOfPoints);
        }
            
        // setavg: Adjust average amount in samples            
        else if(strcmp(Cmd,"setavg") == 0) {
            AvgSize=(uint32_t) strtol(Arg,NULL,10);
        }
            
        // setperiod: Adjust sample period in us
        else if(strcmp(Cmd,"setperiod") == 0) {
            Period_us=(uint32_t) strtol(Arg,NULL,10);
        }
        
        // setcount: Adjust countdown period in ms
        else if(strcmp(Cmd,"setcount") == 0) {
            Count_ms=(uint32_t) strtol(Arg,NULL,10);
        }        
    }
    
    // Free memory after quit
    freeArray(&Data);
    pc1.printf("Exit. Data freed. \r\n", CmdBuffer);
    
    // Infinite loop
    while(1) 
    {
        // Do nothing
    }
}