F746NG Test All Functions

Dependencies:   TS_DISCO_F746NG LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP Arduino

Functions.h

Committer:
MaxScorda
Date:
2020-12-29
Revision:
10:4fef0d14dc70
Parent:
7:f654d2b1f08b

File content as of revision 10:4fef0d14dc70:

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

string i2s(unsigned long number)
{
    // integer to string
    if (number == 0)
        return "0";
    string temp="";
    string returnvalue="";
    while (number>0) {
        temp+=number%10+48;
        number/=10;
    }
    for (int i=0; i<temp.length(); i++)
        returnvalue+=temp[temp.length()-i-1];
    return returnvalue;
}


int min(int a, int b)
{
    return  (a<b?a:b);
}

int max(int a, int b)
{
    return (a>b?a:b);
}


void FattorizzazioneFunction(unsigned long  risultato, unsigned long  *Divisori)
{
    unsigned long long int idxPrimi=2;
    int idxFattorizzati=0;
  //  Divisori[0]=0;
    while (risultato>1)  {
        if (risultato%idxPrimi==0) {
            Divisori[idxFattorizzati++]=idxPrimi;            ;
            risultato=risultato/idxPrimi;
        } else {
            idxPrimi++;
        }
    }
    Divisori[idxFattorizzati]=0;
}



void FattorizzazioneCiclica()
{
    static unsigned long numdatrovare=2;
    static long long int conteggio=0;
    unsigned long Divisori[49];
    int i=0;
    int deltaconteggio;
    static int nowval=0,  maxval=0, minval=9999;
    string elencostringa="";
     char mmm[128];

    FattorizzazioneFunction(numdatrovare, Divisori );
  
    if (nummenu==1) {
        while ((Divisori[i]>0) && (i<49)) {
            // sprintf(substr, "%d%s", Divisori[i]),(Divisori[i+1]>0?" * ":"") ;
           elencostringa+=i2s(Divisori[i])+(Divisori[i+1]>0?" * ":"");
            i++;
        }
        elencostringa=elencostringa.substr(0,45);
        sprintf(mmm, "%u= %s", numdatrovare,elencostringa);
        BSP_LCD_.SetFont(&Font12);
        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
        BSP_LCD_FillRect(42, 100, DimX-84, 15); //cancella riga
        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
        BSP_LCD_DisplayStringAt(50, 100, (uint8_t *) mmm, LEFT_MODE);
    }
    
    if ((conteggio+1000<millis()) ) {
        deltaconteggio=numdatrovare-nowval;
        maxval=max(maxval,deltaconteggio);
        if (conteggio>0)
        minval=min(minval, deltaconteggio);
        if (nummenu==1) {
            sprintf(mmm, "Fattorizzati %d interi-sec. Min val= %d  Max val=%d", deltaconteggio,minval,maxval);
            BSP_LCD_DisplayStringAt(50, 120, (uint8_t *) mmm, LEFT_MODE);
        }
        nowval=numdatrovare;
        conteggio=millis();
    }

    numdatrovare++;

}



string addEOS(string sttde)
{
    string ret=sttde;
    if (sttde.substr(sttde.size()-1,1) != "\n") ret=sttde+"\n";
    return ret;
}

string padstr(string sttde, int maxlen, char fillchar)
{
    bool flagEOS=false;
    string ret=sttde;
    if (ret.size()>0) {
        //se ha EOS lo tolgo
        if (ret.substr(ret.size()-1,1) == "\n") {
            ret=ret.substr(0,ret.size()-1);
            flagEOS=true;
        }
        //pad
        if (maxlen> ret.size()) ret.insert(ret.size(), maxlen - ret.size(), fillchar);
        //se aveva EOS, lo rimetto
        if (flagEOS==true) ret=addEOS(ret);
    }
    return ret;
}



string subEOS(string sttde)
{
    string ret=sttde;
    if (sttde.substr(sttde.size()-1,1) == "\n") ret=sttde.substr(0,sttde.size()-2);
    return ret;
}

char* string2char(string sttde)
{
    //ora aggiunge comunque l'EOS. Decidere se parametrizzare
    sttde=addEOS(sttde);
    char *cstr = new char[sttde.length() + 1];
    strcpy(cstr, sttde.c_str());
    // delete [] cstr;
    return cstr;
}

int c2i(char sttde)
{
    // single char to integer
    return sttde-'0';;
}





/* atof: convert string s to double */
double atof(char s[])
{
    double val, power;
    int i, sign;


    for (i = 0; isspace(s[i]); i++); /* skip white space */

    sign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-') i++;
    for (val = 0.0; isdigit(s[i]);  i++) {
        val = 10.0 * val + (s[i] - '0');
    }
    if (s[i] == '.') i++;
    for (power = 1.0; isdigit(s[i]); i++) {
        val = 10.0 * val + (s[i] - '0');
        power *= 10.0;
    }
    return sign * val / power;
}



/* reverse: reverse string s in place */
void reverse(char s[])
{
    int c, i, j;
    for (i = 0, j = strlen(s)-1; i < j; i++, j-- ) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}


/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
    int i, sign;
    if ((sign = n) < 0) /* record sign */
        n = -n; /* make n positive */
    i = 0;
    do { /* generate digits in reverse order */
        s[i++] = n % 10 + '0'; /* get next digit */
    } while ((n /= 10) > 0); /* delete it */
    if (sign < 0) s[i++] = '-';
    s[i] = '\0';
    reverse(s) ;
}


/* atoi: convert s to integer; version 2 */
int atoi(char s[])
{
    int i, n, sign;
    for (i = 0; isspace(s[i]) ; i++) {
        ;   /* skip white space */
    }
    sign= (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-') i++; /* skip sign */
    for (n = 0; isdigit(s[i]); i++ ) {
        ;
    }
    n = 10 * n + (s[i] - '0');
    return sign * n;
}

int constrain(int amt, int low, int high)
{
    int ret=amt;
    if (amt>high) ret=high;
    else if (amt<low) ret= low;
    return ret;
    //return ((amt)<(low)?(low):((amt)>(high)?(high):(amt)));
}


/* trim: remove trailing blanks, tabs, newlines */
int trim(char s[])
{
    int n;
    for (n = strlen(s)-1; n >= 0; n--) {
        if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')  break;
    }
    s[n+1] = '\0';
    return n;
}

#endif