Samozřejmě by to mohl počítat třeba v HEX, to už záleží na kontextu a následného využití.
A teoreticky by ani nemusel uchovávat int pocetZnaku; a mohl si ho spočítat jako:
Kód: Vybrat vše
floor(log(vysledneCislo) / log(10) + 1)
Kód: Vybrat vše
floor(log(vysledneCislo) / log(10) + 1)
Ja bych volil spis neco jako (ono je to to same, ale nejak se mi to esteticky libi vic, ze nemusim tolik osetrovat zvlastni pripady)kiRRow píše: ↑31 led 2020, 16:04Já bych asi šel metodou přičítání do proměnné.Ale já jsem hodně omezený dostupnou operační pamětí v projektu, kde tu klávesnici mám. Zamapatuji si kolikátý znak přichází. První znak bude s číslem 0. Jen tak nastřelím princip ...
Kód: Vybrat vše
int prichoziZnak; int pocetZnaku; int vysledneCislo; if(prichaziNovyZnak){ // přichází nový znak z klávesnice if(pocetZnaku == 0){ // jedná se o první znak ?? vysledneCislo = prichoziZnak; // je to první znak, vynuluji vysledneCislo tím, že do něj uložím ten znak } else { vysledneCislo = (vysledneCislo * 10) + prichoziZnak; // je to následující znak, předchozí číslo vynásobím 10ti (tím se posune celé do leva) a přičtu znak } }
Kód: Vybrat vše
int prichoziZnak;
int pocetZnaku;
int vysledneCislo; // na zacatku je to nula
if(prichaziNovyZnak){ // přichází nový znak z klávesnice
if (novyZnak == HASH ) { // nevim, co vraci #, ale presne to
// TADY nejak zpracuju vstup - navic vim, jak je dlouhe a kolika nulama tedy zacinalo
// (pokud me to tedy zajima - pouhe 7 neni agent 007 )
vysledneCislo=0; // uz jsem to cislo pouzil, tak ho nepotrebuju
pocetZnaku=0;
};
if ( (novyZnak >= 0) && (novyZnak <= 9) ) { //je to cislo
pocetZnaku++;
if (pocetZnaku >4) { // CHYBA, moc dlouhe, vypisu error a zacnu znovu
vysledneCislo=0; // zrusim nactenou hodnotu
pocetZnaku=1; // zacinam se zadanou cifrou
}
vysledneCislo = (vysledneCislo * 10) + prichoziZnak; // pridam dalsi cifru
}
}
Kód: Vybrat vše
#include <Keypad.h>
byte Num = 3; // počet cislic v poli znakyKey
int count = 0; //pocitani cycklu
int cisloKey; // vysledne cislo
int NewKey; // prichozi znak z klavesnice
byte konst = 47; // konstanta pro vypocet cisla z Char znaku
const byte ROWS = 4; //řádky
const byte COLS = 4; // sloupce
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; //řádky
byte colPins[COLS] = {8, 7, 6, 5}; // sloupce
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void Keypad(){ //čtení z klávesnice
char customKey = customKeypad.getKey();
if (customKey){
NewKey = (customKey - konst) ; //vypocet cisla z Char (0-9)
if(NewKey){ // přichází nový znak z klávesnice
if(count ==0){ // jedná se o první znak ??
cisloKey = NewKey - 1; // je to první znak, vynuluji vysledneCislo tím, že do něj uložím ten znak
count++;}
else if (count < (Num)){
cisloKey = ((cisloKey * 10) + NewKey)-1; // je to následující znak, předchozí číslo vynásobím 10ti (tím se posune celé do leva) a přičtu znak
count++;}
else if (count = Num){
cisloKey = cisloKey; // je-li dosazeno poctu pozadovanych znaku, neprovadim zadny vypocet
}
}
Serial.print("Vysledne cislo: ");
Serial.println(cisloKey);
}
}
void loop(){
Keypad();
}
Já právě potřebuji, aby zadání 01 byla ta 1, tedy jedna minuta Nula dokáže zamotat hlavu
Příkaz atoi() jsem doposud neznal, jak jsem vyčetl, je to klasický příkaz C++. V oficiální podpoře na arduino.cc jsem nic nenašel, ale mrknu na to.
Jo, to mne někdy dost "sere", ale naštěstí se to dozvíme zde.
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů