Tak řekl bych, že mám ošetřené čtení jednotlivých číselných hodnot a řazení do složených čísel.
Nechal jsem se nakopnout příspěvkem
https://www.arduino-forum.cz/viewtopic. ... 063#p10355. Trochu mě trápil fakt, že knihovna
Keypad.h pracuje s řetězci a vrací znaky v
Char, já potřebují číslo, abych s ním mohl dále pracovat. Takže jsem výsledek ukládal do proměnné typu
Int, ale tím jsem nezískal zadaváné číslo z klávesnice, ale hodnotu v
Dec. To znamená, že číslo 0 má hodnotu 48 až po číslo 9, které má hodnotu 57 viz.
http://asciiset.com/. Toto jsem obešel konstantou (48), kterou jsem odečetl od příchozího čísla v
Dec.
Vše funguje do chvíle, než zadám nulu. Takže jsem "očůral" změnou konstanty na hodnotu 47 a po zpracování jsem chybějící jedničku odečetl. Asi to není úplně košer, ale funguje to i s nulou. Pokud zadávám číslo o třech znacích a první je nula, tak zapíše následné dva znaky, což mi vyhovuje.
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();
}