F746NG Test All Functions
Dependencies: TS_DISCO_F746NG LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP Arduino
Functions.h@10:4fef0d14dc70, 2020-12-29 (annotated)
- Committer:
- MaxScorda
- Date:
- Tue Dec 29 18:04:23 2020 +0000
- Revision:
- 10:4fef0d14dc70
- Parent:
- 7:f654d2b1f08b
Publish
Who changed what in which revision?
User | Revision | Line number | New 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 |