我正在尝试从串行监视器获取用户输入,以根据输入转动步进电机。但是我的代码返回ASCII值而不是原始输入。
#include <Stepper.h>
Stepper small_stepper(steps_per_motor_revolution, 8, 10, 9, 11);
void setup() {
// Put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Ready");
}
void loop() {
// Put your main code here, to run repeatedly:
int Steps2Take = Serial.read();
Serial.println(Steps2Take); // Printing
if (Steps2Take == -1)
Steps2Take = 0;
else {
small_stepper.setSpeed(1000); // Setting speed
if (Steps2Take > 0)
small_stepper.step(Steps2Take * 32);
else
small_stepper.step(-Steps2Take * 32);
delay(2);
}
}
答案 0 :(得分:0)
只需使用.toInt()函数即可。
您应该从序列中读取字符串,然后将其转换为整数。
Serial.print(Serial.readString().toInt());
答案 1 :(得分:0)
你可以通过三种方式做到这一点!请注意,如果数字大于 65535,则必须使用 long 变量。对于小数,使用浮点变量。
您可以使用需要字符串类型变量的 toInt() 或 toFloat()。注意,因为 toFloat() 非常耗时。
// CODE:
String _int = "00254";
String _float = "002.54";
int value1 = _int.toInt();
float value2 = _float.toFloat();
Serial.println(value1);
Serial.println(value2);
// OUTPUT:
254
2.54
你可以使用 atoi。该函数接受一个字符数组,然后将其转换为整数。
// CODE:
// For some reason you have to have +1 your final size; if you don't you will get zeros.
char output[5] = {'1', '.', '2', '3'};
int value1 = atoi(output);
float value2 = atof(output);
Serial.print(value1);
Serial.print(value2);
// OUTPUT:
1
1.23
如果您有一个字符数组,并且想将其转换为字符串,因为您不知道长度……例如消息缓冲区或其他东西,我不知道。您可以在下面使用它将其更改为字符串,然后实现 toInt() 或 toFloat()。
// CODE:
char _int[8];
String data = "";
for(int i = 0; i < 8; i++){
data += (char)_int[i];
}
char buf[data.length()+1];
data.toCharArray(buf, data.length()+1);
答案 2 :(得分:-1)
如果只是&#34;类型转换&#34;问题,你可以使用这样的东西:
int a_as_int = (int)'a';
或
#include <stdlib.h>
int num = atoi("23"); //atoi = ascii to integer
因为它指出here。
它能解决问题吗?