I want to get numbers entered from my Arduino keypad (which are of type 'char') converted to type 'int' so I can use them in variables and use math. For instance, if I press key "5", how do i put it into a variable "keyPressed" and do "X = (keyPressed * 3)" to get "int X = 15". I tired atol, atoi, reinterpret_cast, static_cast, etc. without success. I'm using a 'switch case' to get the entries from my keypad but any other method is ok. I have all that's needed to press a key and get an output like Serial.println(), etc. but no as an int value I can use in further calculations. Please help. Thank you.
This code finally works!: Thank you for all the help.
// Keypad***********************************************************************
#include <Keypad.h>
#include <Streaming.h>
#include <AFMotor.h>
#include <LiquidCrystal.h>
AF_Stepper motor1(200, 1); // steps for 360 degrees = 1.8 degree/step
AF_Stepper motor2(200, 2);
const byte ROWS = 4;
const byte COLS = 4;
const int debounceTime = 20;
char keys[ROWS] [COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'} };
byte rowPins[ROWS] = {9, 8, 7, 6}; // Arduino pins -red/yellow/green/blue
byte colPins[COLS] = {10, 11, 12, 13}; // Arduino pins- brown/gray/white/black
Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//**************************************************************************************
char customKey;
int customKeyINT;
int keyINT;
char mtID;
char mtDir;
int mtIDINT;
int mtDirINT;
boolean mtDirBLN;
char mtSteps;
char mtSteps1;
char mtSteps2;
char mtSteps3;
int mtSteps1INT;
int mtSteps2INT;
int mtSteps3INT;
int steps;
// function entry() *****************************************************************
void entry()
{
for (int i = 1; i > 0; i--)
{
Serial << "Custom FM move" << endl;
Serial << "Enter: ";
Serial << "1: Right/Left or " << endl;
Serial << "2: Front/Back:" << endl;
while(Serial.available() == 0)
{
customKey = customKeypad.getKey();
if (customKey)
{
mtID = customKey;
Serial.print("You entered Motor: ");
Serial << mtID << endl;
Serial.println();
break;
}
}
}
// ------------------------------------------------------------------------
for (int i = 1; i > 0; i--)
{
Serial << "Enter: " << endl;
Serial << "1: Front - 2: Back" << endl;
while(Serial.available() == 0)
{
customKey = customKeypad.getKey();
if (customKey)
{
mtDir = customKey;
if (mtDir == '1')
{
Serial.print("You entered: ");
Serial << "Front" << endl;
Serial.println();
break;
}
if (mtDir == '2')
{
Serial.print("You entered: ");
Serial << "Back" << endl;
Serial.println();
break;
}
}
}
}
// ---------------------------------------------------------------------
for (int i = 1; i > 0; i--)
{
Serial << "Enter # of steps" << endl;
Serial << "i.e., 025 :" << endl;
while(Serial.available() == 0)
{
customKey = customKeypad.getKey();
if (customKey)
{
mtSteps1 = customKey;
Serial.print("You entered: ");
Serial << "First digit: " << endl;
Serial << mtSteps1 << endl;
Serial.println();
break;
}
}
}
// ---------------------------------------------------------------------
for (int i = 1; i > 0; i--)
{
Serial << "Enter 2nd digit:" << endl;
while(Serial.available() == 0)
{
customKey = customKeypad.getKey();
if (customKey)
{
mtSteps2 = customKey;
Serial.print("You entered: ");
Serial << mtSteps1 << mtSteps2 << endl;
Serial.println();
break;
}
}
}
// ---------------------------------------------------------------------
for (int i = 1; i > 0; i--)
{
Serial << "Enter last digit:" << endl;
while(Serial.available() == 0)
{
customKey = customKeypad.getKey();
if (customKey)
{
mtSteps3 = customKey;
Serial.print("You entered: ");
Serial << mtSteps1 << mtSteps2 << mtSteps3 << endl;
Serial.println();
break;
}
}
}
// 'steps' conversion from char to int -----------------------------------
mtSteps1INT = char2int(mtSteps1);
if (mtSteps1INT == 48)
{ mtSteps1INT = 0; }
delay(20);
mtSteps2INT = char2int(mtSteps2);
if (mtSteps2INT == 48)
{ mtSteps2INT = 0; }
delay(20);
mtSteps3INT = char2int(mtSteps3);
if (mtSteps3INT == 48)
{ mtSteps3INT = 0; }
delay(20);
steps = (mtSteps1INT * 100)+(mtSteps2INT * 10)+mtSteps3INT;
Serial << steps << " steps" << endl;
// 'motor ID' and 'direction' conversion from char to int ----------------------
mtIDINT = char2int(mtID);
mtDirINT = char2int(mtDir);
if (mtDirINT == 1)
{ mtDirBLN = HIGH; }
delay(20);
if (mtDirINT == 2)
{ mtDirBLN = LOW; }
delay(20);
if (mtIDINT == 1)
{
motor1.step(steps, mtDirBLN, DOUBLE); // this will run the motor
Serial << "motor1.step(" << steps << ", " << mtDirBLN << ", " << "DOUBLE)" << endl;
}
else
if (mtIDINT == 2)
{
motor2.step(steps, mtDirBLN, DOUBLE); // this will run the motor
Serial << "motor2.step(" << steps << ", " << mtDirBLN << ", " << "DOUBLE)" << endl;
}
delay(20);
// ---------------------------------------------------------------------
} // end of function
// *****************************************************************************
void setup()
{
Serial.begin(9600);
} // end of SETUP *************************************************************
// *****************************************************************************
void loop()
{
customKey = customKeypad.getKey();
if (customKey)
{
if (customKey == 'A')
{
entry();
}
}
}
I'm now changing the "Serial...." for "lcd...." and it works fine with my lcd displays. This is the basic code now I have to fine tune it of course. -cl
First of all, approach this problem in increments. That is, first simply read the keypad and display its output via the serial line back at the PC. After you get this to work then write code to convert the entry into an integer.
Please provide code examples of simply displaying the keypad entry and then an example of converting that entry into an integer.