F746NG Test All Functions

Dependencies:   TS_DISCO_F746NG LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP Arduino

Committer:
MaxScorda
Date:
Tue Dec 29 18:04:23 2020 +0000
Revision:
10:4fef0d14dc70
Parent:
7:f654d2b1f08b
Publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MaxScorda 2:65480fe798bf 1 #ifndef FUNCTIONS_H
MaxScorda 2:65480fe798bf 2 #define FUNCTIONS_H
MaxScorda 2:65480fe798bf 3
MaxScorda 7:f654d2b1f08b 4 string i2s(unsigned long number)
MaxScorda 6:ba00a5cd9466 5 {
MaxScorda 7:f654d2b1f08b 6 // integer to string
MaxScorda 7:f654d2b1f08b 7 if (number == 0)
MaxScorda 7:f654d2b1f08b 8 return "0";
MaxScorda 7:f654d2b1f08b 9 string temp="";
MaxScorda 7:f654d2b1f08b 10 string returnvalue="";
MaxScorda 7:f654d2b1f08b 11 while (number>0) {
MaxScorda 7:f654d2b1f08b 12 temp+=number%10+48;
MaxScorda 7:f654d2b1f08b 13 number/=10;
MaxScorda 6:ba00a5cd9466 14 }
MaxScorda 7:f654d2b1f08b 15 for (int i=0; i<temp.length(); i++)
MaxScorda 7:f654d2b1f08b 16 returnvalue+=temp[temp.length()-i-1];
MaxScorda 7:f654d2b1f08b 17 return returnvalue;
MaxScorda 7:f654d2b1f08b 18 }
MaxScorda 7:f654d2b1f08b 19
MaxScorda 7:f654d2b1f08b 20
MaxScorda 7:f654d2b1f08b 21 int min(int a, int b)
MaxScorda 7:f654d2b1f08b 22 {
MaxScorda 7:f654d2b1f08b 23 return (a<b?a:b);
MaxScorda 7:f654d2b1f08b 24 }
MaxScorda 7:f654d2b1f08b 25
MaxScorda 7:f654d2b1f08b 26 int max(int a, int b)
MaxScorda 7:f654d2b1f08b 27 {
MaxScorda 7:f654d2b1f08b 28 return (a>b?a:b);
MaxScorda 6:ba00a5cd9466 29 }
MaxScorda 6:ba00a5cd9466 30
MaxScorda 7:f654d2b1f08b 31
MaxScorda 7:f654d2b1f08b 32 void FattorizzazioneFunction(unsigned long risultato, unsigned long *Divisori)
MaxScorda 1:3fca41f3ed30 33 {
MaxScorda 7:f654d2b1f08b 34 unsigned long long int idxPrimi=2;
MaxScorda 7:f654d2b1f08b 35 int idxFattorizzati=0;
MaxScorda 7:f654d2b1f08b 36 // Divisori[0]=0;
MaxScorda 7:f654d2b1f08b 37 while (risultato>1) {
MaxScorda 7:f654d2b1f08b 38 if (risultato%idxPrimi==0) {
MaxScorda 7:f654d2b1f08b 39 Divisori[idxFattorizzati++]=idxPrimi; ;
MaxScorda 7:f654d2b1f08b 40 risultato=risultato/idxPrimi;
MaxScorda 7:f654d2b1f08b 41 } else {
MaxScorda 7:f654d2b1f08b 42 idxPrimi++;
MaxScorda 7:f654d2b1f08b 43 }
MaxScorda 6:ba00a5cd9466 44 }
MaxScorda 7:f654d2b1f08b 45 Divisori[idxFattorizzati]=0;
MaxScorda 2:65480fe798bf 46 }
MaxScorda 2:65480fe798bf 47
MaxScorda 3:e7e663758e6d 48
MaxScorda 3:e7e663758e6d 49
MaxScorda 7:f654d2b1f08b 50 void FattorizzazioneCiclica()
MaxScorda 7:f654d2b1f08b 51 {
MaxScorda 7:f654d2b1f08b 52 static unsigned long numdatrovare=2;
MaxScorda 7:f654d2b1f08b 53 static long long int conteggio=0;
MaxScorda 7:f654d2b1f08b 54 unsigned long Divisori[49];
MaxScorda 7:f654d2b1f08b 55 int i=0;
MaxScorda 7:f654d2b1f08b 56 int deltaconteggio;
MaxScorda 7:f654d2b1f08b 57 static int nowval=0, maxval=0, minval=9999;
MaxScorda 7:f654d2b1f08b 58 string elencostringa="";
MaxScorda 7:f654d2b1f08b 59 char mmm[128];
MaxScorda 7:f654d2b1f08b 60
MaxScorda 7:f654d2b1f08b 61 FattorizzazioneFunction(numdatrovare, Divisori );
MaxScorda 7:f654d2b1f08b 62
MaxScorda 7:f654d2b1f08b 63 if (nummenu==1) {
MaxScorda 7:f654d2b1f08b 64 while ((Divisori[i]>0) && (i<49)) {
MaxScorda 7:f654d2b1f08b 65 // sprintf(substr, "%d%s", Divisori[i]),(Divisori[i+1]>0?" * ":"") ;
MaxScorda 7:f654d2b1f08b 66 elencostringa+=i2s(Divisori[i])+(Divisori[i+1]>0?" * ":"");
MaxScorda 7:f654d2b1f08b 67 i++;
MaxScorda 7:f654d2b1f08b 68 }
MaxScorda 7:f654d2b1f08b 69 elencostringa=elencostringa.substr(0,45);
MaxScorda 7:f654d2b1f08b 70 sprintf(mmm, "%u= %s", numdatrovare,elencostringa);
MaxScorda 7:f654d2b1f08b 71 BSP_LCD_.SetFont(&Font12);
MaxScorda 7:f654d2b1f08b 72 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
MaxScorda 7:f654d2b1f08b 73 BSP_LCD_FillRect(42, 100, DimX-84, 15); //cancella riga
MaxScorda 7:f654d2b1f08b 74 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
MaxScorda 7:f654d2b1f08b 75 BSP_LCD_DisplayStringAt(50, 100, (uint8_t *) mmm, LEFT_MODE);
MaxScorda 3:e7e663758e6d 76 }
MaxScorda 7:f654d2b1f08b 77
MaxScorda 7:f654d2b1f08b 78 if ((conteggio+1000<millis()) ) {
MaxScorda 7:f654d2b1f08b 79 deltaconteggio=numdatrovare-nowval;
MaxScorda 7:f654d2b1f08b 80 maxval=max(maxval,deltaconteggio);
MaxScorda 7:f654d2b1f08b 81 if (conteggio>0)
MaxScorda 7:f654d2b1f08b 82 minval=min(minval, deltaconteggio);
MaxScorda 7:f654d2b1f08b 83 if (nummenu==1) {
MaxScorda 7:f654d2b1f08b 84 sprintf(mmm, "Fattorizzati %d interi-sec. Min val= %d Max val=%d", deltaconteggio,minval,maxval);
MaxScorda 7:f654d2b1f08b 85 BSP_LCD_DisplayStringAt(50, 120, (uint8_t *) mmm, LEFT_MODE);
MaxScorda 7:f654d2b1f08b 86 }
MaxScorda 7:f654d2b1f08b 87 nowval=numdatrovare;
MaxScorda 7:f654d2b1f08b 88 conteggio=millis();
MaxScorda 6:ba00a5cd9466 89 }
MaxScorda 6:ba00a5cd9466 90
MaxScorda 7:f654d2b1f08b 91 numdatrovare++;
MaxScorda 3:e7e663758e6d 92
MaxScorda 3:e7e663758e6d 93 }
MaxScorda 3:e7e663758e6d 94
MaxScorda 6:ba00a5cd9466 95
MaxScorda 6:ba00a5cd9466 96
MaxScorda 7:f654d2b1f08b 97 string addEOS(string sttde)
MaxScorda 7:f654d2b1f08b 98 {
MaxScorda 7:f654d2b1f08b 99 string ret=sttde;
MaxScorda 7:f654d2b1f08b 100 if (sttde.substr(sttde.size()-1,1) != "\n") ret=sttde+"\n";
MaxScorda 7:f654d2b1f08b 101 return ret;
MaxScorda 7:f654d2b1f08b 102 }
MaxScorda 7:f654d2b1f08b 103
MaxScorda 7:f654d2b1f08b 104 string padstr(string sttde, int maxlen, char fillchar)
MaxScorda 7:f654d2b1f08b 105 {
MaxScorda 7:f654d2b1f08b 106 bool flagEOS=false;
MaxScorda 7:f654d2b1f08b 107 string ret=sttde;
MaxScorda 7:f654d2b1f08b 108 if (ret.size()>0) {
MaxScorda 7:f654d2b1f08b 109 //se ha EOS lo tolgo
MaxScorda 7:f654d2b1f08b 110 if (ret.substr(ret.size()-1,1) == "\n") {
MaxScorda 7:f654d2b1f08b 111 ret=ret.substr(0,ret.size()-1);
MaxScorda 7:f654d2b1f08b 112 flagEOS=true;
MaxScorda 7:f654d2b1f08b 113 }
MaxScorda 7:f654d2b1f08b 114 //pad
MaxScorda 7:f654d2b1f08b 115 if (maxlen> ret.size()) ret.insert(ret.size(), maxlen - ret.size(), fillchar);
MaxScorda 7:f654d2b1f08b 116 //se aveva EOS, lo rimetto
MaxScorda 7:f654d2b1f08b 117 if (flagEOS==true) ret=addEOS(ret);
MaxScorda 7:f654d2b1f08b 118 }
MaxScorda 7:f654d2b1f08b 119 return ret;
MaxScorda 7:f654d2b1f08b 120 }
MaxScorda 7:f654d2b1f08b 121
MaxScorda 7:f654d2b1f08b 122
MaxScorda 7:f654d2b1f08b 123
MaxScorda 7:f654d2b1f08b 124 string subEOS(string sttde)
MaxScorda 7:f654d2b1f08b 125 {
MaxScorda 7:f654d2b1f08b 126 string ret=sttde;
MaxScorda 7:f654d2b1f08b 127 if (sttde.substr(sttde.size()-1,1) == "\n") ret=sttde.substr(0,sttde.size()-2);
MaxScorda 7:f654d2b1f08b 128 return ret;
MaxScorda 7:f654d2b1f08b 129 }
MaxScorda 7:f654d2b1f08b 130
MaxScorda 7:f654d2b1f08b 131 char* string2char(string sttde)
MaxScorda 7:f654d2b1f08b 132 {
MaxScorda 7:f654d2b1f08b 133 //ora aggiunge comunque l'EOS. Decidere se parametrizzare
MaxScorda 7:f654d2b1f08b 134 sttde=addEOS(sttde);
MaxScorda 7:f654d2b1f08b 135 char *cstr = new char[sttde.length() + 1];
MaxScorda 7:f654d2b1f08b 136 strcpy(cstr, sttde.c_str());
MaxScorda 7:f654d2b1f08b 137 // delete [] cstr;
MaxScorda 7:f654d2b1f08b 138 return cstr;
MaxScorda 7:f654d2b1f08b 139 }
MaxScorda 7:f654d2b1f08b 140
MaxScorda 7:f654d2b1f08b 141 int c2i(char sttde)
MaxScorda 7:f654d2b1f08b 142 {
MaxScorda 7:f654d2b1f08b 143 // single char to integer
MaxScorda 7:f654d2b1f08b 144 return sttde-'0';;
MaxScorda 7:f654d2b1f08b 145 }
MaxScorda 7:f654d2b1f08b 146
MaxScorda 7:f654d2b1f08b 147
MaxScorda 7:f654d2b1f08b 148
MaxScorda 7:f654d2b1f08b 149
MaxScorda 7:f654d2b1f08b 150
MaxScorda 7:f654d2b1f08b 151 /* atof: convert string s to double */
MaxScorda 7:f654d2b1f08b 152 double atof(char s[])
MaxScorda 7:f654d2b1f08b 153 {
MaxScorda 7:f654d2b1f08b 154 double val, power;
MaxScorda 7:f654d2b1f08b 155 int i, sign;
MaxScorda 7:f654d2b1f08b 156
MaxScorda 7:f654d2b1f08b 157
MaxScorda 7:f654d2b1f08b 158 for (i = 0; isspace(s[i]); i++); /* skip white space */
MaxScorda 7:f654d2b1f08b 159
MaxScorda 7:f654d2b1f08b 160 sign = (s[i] == '-') ? -1 : 1;
MaxScorda 7:f654d2b1f08b 161 if (s[i] == '+' || s[i] == '-') i++;
MaxScorda 7:f654d2b1f08b 162 for (val = 0.0; isdigit(s[i]); i++) {
MaxScorda 7:f654d2b1f08b 163 val = 10.0 * val + (s[i] - '0');
MaxScorda 7:f654d2b1f08b 164 }
MaxScorda 7:f654d2b1f08b 165 if (s[i] == '.') i++;
MaxScorda 7:f654d2b1f08b 166 for (power = 1.0; isdigit(s[i]); i++) {
MaxScorda 7:f654d2b1f08b 167 val = 10.0 * val + (s[i] - '0');
MaxScorda 7:f654d2b1f08b 168 power *= 10.0;
MaxScorda 7:f654d2b1f08b 169 }
MaxScorda 7:f654d2b1f08b 170 return sign * val / power;
MaxScorda 7:f654d2b1f08b 171 }
MaxScorda 7:f654d2b1f08b 172
MaxScorda 7:f654d2b1f08b 173
MaxScorda 7:f654d2b1f08b 174
MaxScorda 7:f654d2b1f08b 175 /* reverse: reverse string s in place */
MaxScorda 7:f654d2b1f08b 176 void reverse(char s[])
MaxScorda 7:f654d2b1f08b 177 {
MaxScorda 7:f654d2b1f08b 178 int c, i, j;
MaxScorda 7:f654d2b1f08b 179 for (i = 0, j = strlen(s)-1; i < j; i++, j-- ) {
MaxScorda 7:f654d2b1f08b 180 c = s[i];
MaxScorda 7:f654d2b1f08b 181 s[i] = s[j];
MaxScorda 7:f654d2b1f08b 182 s[j] = c;
MaxScorda 7:f654d2b1f08b 183 }
MaxScorda 7:f654d2b1f08b 184 }
MaxScorda 7:f654d2b1f08b 185
MaxScorda 7:f654d2b1f08b 186
MaxScorda 7:f654d2b1f08b 187 /* itoa: convert n to characters in s */
MaxScorda 7:f654d2b1f08b 188 void itoa(int n, char s[])
MaxScorda 7:f654d2b1f08b 189 {
MaxScorda 7:f654d2b1f08b 190 int i, sign;
MaxScorda 7:f654d2b1f08b 191 if ((sign = n) < 0) /* record sign */
MaxScorda 7:f654d2b1f08b 192 n = -n; /* make n positive */
MaxScorda 7:f654d2b1f08b 193 i = 0;
MaxScorda 7:f654d2b1f08b 194 do { /* generate digits in reverse order */
MaxScorda 7:f654d2b1f08b 195 s[i++] = n % 10 + '0'; /* get next digit */
MaxScorda 7:f654d2b1f08b 196 } while ((n /= 10) > 0); /* delete it */
MaxScorda 7:f654d2b1f08b 197 if (sign < 0) s[i++] = '-';
MaxScorda 7:f654d2b1f08b 198 s[i] = '\0';
MaxScorda 7:f654d2b1f08b 199 reverse(s) ;
MaxScorda 7:f654d2b1f08b 200 }
MaxScorda 7:f654d2b1f08b 201
MaxScorda 7:f654d2b1f08b 202
MaxScorda 7:f654d2b1f08b 203 /* atoi: convert s to integer; version 2 */
MaxScorda 7:f654d2b1f08b 204 int atoi(char s[])
MaxScorda 7:f654d2b1f08b 205 {
MaxScorda 7:f654d2b1f08b 206 int i, n, sign;
MaxScorda 7:f654d2b1f08b 207 for (i = 0; isspace(s[i]) ; i++) {
MaxScorda 7:f654d2b1f08b 208 ; /* skip white space */
MaxScorda 7:f654d2b1f08b 209 }
MaxScorda 7:f654d2b1f08b 210 sign= (s[i] == '-') ? -1 : 1;
MaxScorda 7:f654d2b1f08b 211 if (s[i] == '+' || s[i] == '-') i++; /* skip sign */
MaxScorda 7:f654d2b1f08b 212 for (n = 0; isdigit(s[i]); i++ ) {
MaxScorda 7:f654d2b1f08b 213 ;
MaxScorda 7:f654d2b1f08b 214 }
MaxScorda 7:f654d2b1f08b 215 n = 10 * n + (s[i] - '0');
MaxScorda 7:f654d2b1f08b 216 return sign * n;
MaxScorda 7:f654d2b1f08b 217 }
MaxScorda 7:f654d2b1f08b 218
MaxScorda 7:f654d2b1f08b 219 int constrain(int amt, int low, int high)
MaxScorda 7:f654d2b1f08b 220 {
MaxScorda 7:f654d2b1f08b 221 int ret=amt;
MaxScorda 7:f654d2b1f08b 222 if (amt>high) ret=high;
MaxScorda 7:f654d2b1f08b 223 else if (amt<low) ret= low;
MaxScorda 7:f654d2b1f08b 224 return ret;
MaxScorda 7:f654d2b1f08b 225 //return ((amt)<(low)?(low):((amt)>(high)?(high):(amt)));
MaxScorda 7:f654d2b1f08b 226 }
MaxScorda 7:f654d2b1f08b 227
MaxScorda 7:f654d2b1f08b 228
MaxScorda 7:f654d2b1f08b 229 /* trim: remove trailing blanks, tabs, newlines */
MaxScorda 7:f654d2b1f08b 230 int trim(char s[])
MaxScorda 7:f654d2b1f08b 231 {
MaxScorda 7:f654d2b1f08b 232 int n;
MaxScorda 7:f654d2b1f08b 233 for (n = strlen(s)-1; n >= 0; n--) {
MaxScorda 7:f654d2b1f08b 234 if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') break;
MaxScorda 7:f654d2b1f08b 235 }
MaxScorda 7:f654d2b1f08b 236 s[n+1] = '\0';
MaxScorda 7:f654d2b1f08b 237 return n;
MaxScorda 7:f654d2b1f08b 238 }
MaxScorda 7:f654d2b1f08b 239
MaxScorda 2:65480fe798bf 240 #endif