常常有人问到要一次传许多个整数给 Arduino, 我来写一个简单函数给大家用:
// 首先弄个全局便量 Global Variable 存放答案:
long iAns[13]; // 最多 12 个, 是 Global variable
// iAns[0] 第 0 个故意不用, 浪费一个 :-)
///
// 用法:
/ int howMany = getNums( );
// 如果 howMany 是 0 表示没 data
/// 函数如下
int getNums( ) {
if ( ! Serial.available( ) ) return 0;
String gg = "";
while (Serial.available( ) ) {
gg += (char)Serial.read( );
delay(2);
}
String tmps = " ";
int p, t, len;
len = gg.length( );
p = t = 0;
for (int i = 1; i < 13; ++i) {
t = gg.indexOf(",", p); // 找下一个 ","
if (t < 0) t = len; // 没找到 ! 已经最后一个 !
tmps = gg.substring(p, t);
tmps.trim( ); // 去掉头尾空白
iAns[i] = tmps.toInt( );
p = t + 1;
if (t == len) return i;
} // for(
return 12; // 最多支援 12
} // getNums(
/
void setup( ) {
Serial.begin(9600);
//...
}
void loop( ) {
int ans = getNums( );
if (ans > 0) {
Serial.print(iAns[1]);
for (int i = 2; i <= ans; ++i)
Serial.print(String(", ") + iAns);
Serial.println("\r\n========");
for (int i = 1; i <= ans; ++i) {
Serial.println(String("") + i + ": " + iAns);
}
} // if(
}// loop(
/************
好啦, 你可以测试看看从 Serial Monitor 串口监视器, 输入 123, 5566, 33888, 432, 55555, 999999, 然后按 ENTER 或点 Send
如果要输入友小数点的 float 也可以呢 ?
很简单, 把前面 long iAns[13]; 的 long 改为 float 即可
当然
for Loop 内那句
kk[ i ] = tmps.toInt( );
要改为
kk[ i ] = tmps.toFloat( );
这样就可以了 !
**************************************************/