谢谢你的时间。
我试图将Arduino IDE的serialEvent()中从串行端口读取的“字符串”转换为具有精确表示的整数值。
例如,如果字符串myString=200,那么int myInt应该是200。
我已经有点成功,但无法将字符串转换为超过255的精确int表示。
我尝试过的解决方案:
1) 用过。Arduino中的toInt()函数。
2) 使用了“atoi”和“atol”函数。
3) 连载。循环()中的parseInt()。
所有这些方法在每255个值之后从0开始重新计数。
我不能使用parseInt,因为它只在循环()内部工作。我的应用程序需要永久存储变量值,直到通过端口给出另一个值。对于这个Arduino由于的闪存已被使用。
存储代码的内存似乎只在SerialEvents()中工作。
代码片段如下所示:
#include <stdlib.h>
#include <DueFlashStorage.h>
DueFlashStorage memory;
String x = " ";
int x_size;
int threshold;
void setup(){
Serial.begin(115200);
}
void loop{
Serial.println(memory.read(0));
}
void serialEvent(){
while(Serial.available()){
x = Serial.readStringUntil('\n');
x_size = x.length();
char a[x_size+1];
x.toCharArray(a, x_size+1);
threshold = atoi(a);
memory.write(0, threshold);
}
}
由于Arduino IDE中缺乏用于字符/字符串类型到int类型转换(限制为255)的良好函数,我编写了自己的转换代码,似乎工作得很好。
int finalcount=0;
void setup(){
Serial.begin(115200);
}
void loop(){
if(Serial.available()) {
int count = 0;
char number[5]; // determine max size of array as 5
bool wait = true;
while(wait) { // stay in this loop until newline is read
if(Serial.available()) {
number[count] = Serial.read();
if (number[count] == '\n') {
finalcount = count; //max array size for integer; could be less than 5
wait = false; // exit while loop
}
count++;
}
}
int val[finalcount]; //array size determined for integer
int placeValue;
int finalval[finalcount];
int temp=0;
int threshold;
for(int i = 0; i<finalcount; i++){
val[i] = (int)number[i]-48; //convert each char to integer separately
placeValue = pow(10,(finalcount-1)-i); //calculate place value with a base of 10
finalval[i] = val[i]*placeValue; //update integers with their place value
temp += finalval[i] ; //add all integers
threshold = temp; //resulting number stored as threshold
}
Serial.println(threshold); //prints beyond 255 successfully !
}
}
每次只转换1个字符,这就是限制为255的原因。如果您没有做任何其他事情,您可以保持serial.read循环,直到所有字符都被读取。例如:
void loop() {
if(Serial.available()) {
byte count = 0;
char number[10]; // determine max size of array
bool wait = true;
while(wait) { // stay in this loop until newline is read
if(Serial.available()) {
number[count] = Serial.read();
if (number[count] == '\n') {
wait = false; // exit while loop
}
count++;
}
}
int threshold = atoi(number);
memory.write(0, threshold);
}
}
1)函数。toInt()返回LONG,你想要INT(我不知道为什么老实说,但它是在留档)...
#include <stdlib.h>
String x = "1000";
int x_ = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
x_ = (int) x.toInt();
Serial.println(x_);
delay(1000);
}
2)我不专业...但是serilEvents()是一种非常古老的做事方式,不建议使用它。您可以在循环()函数中“手动”完成。
问题内容: 我试图从返回的字符串转换成。Go中惯用的方式是什么? 问题答案: 例如,
问题内容: 我有一个使用long作为ID的定制类。但是,当我使用ajax调用操作时,我的ID被截断并且丢失了最后2个数字,因为javascript处理大数字时会失去精度。我的解决方案是给我的JavaScript字符串,但是ID必须在服务器端保留很长时间。 有没有一种方法可以将属性序列化为字符串?我在寻找某种属性。 控制者 模型 JSON结果 问题答案: 您可能可以创建一个自定义并将其应用于您的媒体
问题内容: 我正在从在Varchar中具有原始提要的表中导入数据,我需要将varchar中的列导入到字符串列中。我尝试使用以及,但是却遇到了错误,因为有一些空字段,我需要将它们作为空或null检索到新表中。 请让我知道是否有相同的功能。 问题答案: 大胆猜测:如果您的值是一个空字符串,则可以使用NULLIF将其替换为NULL:
如何将字符串值转换为整数,并将转换后的值乘以整数,这样我就可以得到300.00的结果。见下面的例子- 如果我像这样编码,那么我就会出错-
问题内容: 有没有一种方法可以将整数转换为PHP中的字符串? 问题答案: 您可以使用该函数将数字转换为字符串。 从维护的角度来看,它显然是您正在尝试做的事情,而不是其他一些更深奥的答案。当然,这取决于您的上下文。