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