我想将从我的 Arduino 键盘(类型为“char”)输入的数字转换为类型“int”,以便我可以在变量中使用它们并使用数学。例如,如果我按下键“5”,我如何将它放入变量“keyPressed”并执行“X =(keyPressed * 3)”以获得“int X = 15”。我厌倦了 atol、atoi、reinterpret_cast、static_cast 等,但没有成功。我正在使用“开关盒”从我的键盘获取条目,但任何其他方法都可以。我拥有按下一个键并获得类似 Serial.println() 等输出所需的一切,但没有我可以在进一步计算中使用的 int 值。请帮忙。谢谢你。
这段代码终于可以工作了!:感谢您的所有帮助。
// 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();
}
}
}
我现在正在为“lcd ....”更改“Serial ....”,它适用于我的液晶显示器。这是基本代码,当然我必须对其进行微调。-cl