Arduino for循环完全不起作用



我正试图从Arduino将数据从加速计发送到Java。我使用增量时间来限制它只发送250毫秒。

问题是,Java程序正在读取的全部内容都是在setup()中反复发送的第一条消息。

我添加了一个测试Serial.write来检查程序是否进入了delta时间块,并且它似乎正在发送(或者至少正在读取(该消息的前2个字符。Arduino代码如下。

#include <SparkFun_MMA8452Q.h>
int sleepPin = 7;
int stepPin = 6;
int buttonPin = 8;
int stepCount = 0;
boolean stepMode = true;
int delTime = 5000;
MMA8452Q accel; //accelerometer
void setup() {
Serial.begin(9600);
while (millis() < 4000); //wait so I can start java program
Serial.write("Connected");
//set pins
pinMode(sleepPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(stepPin, HIGH); //starts in step mode
delTime = millis() + 250;
}
void loop() {
if (digitalRead(buttonPin) == HIGH) stepMode = !stepMode;
if (millis() > delTime) {
Serial.write("delTime"); //test case
//set led's according to mode
if (stepMode) {
digitalWrite(stepPin, HIGH);
digitalWrite(sleepPin, LOW);
} else {
digitalWrite(stepPin, HIGH);
digitalWrite(sleepPin, LOW);
}

//create string to store data
String data = "";
if (stepMode) data += "s"; //s is step mode key
else data += "z"; //z is sleep mode key
//add actual reading stuff
data += String(accel.getX()) + "," + String(accel.getY());
Serial.write(data.c_str()); //send the lad over
}
}

Java端与我以前使用过的用于串行通信的功能程序几乎相同(没有if语句的条件,但这并不重要,因为如果它不符合语句,它只会打印它看到的内容(。如果有必要,我可以把它包括在内。

Java控制台输出显示为:

Connected
de
Connected
de
Connected
de

其中新的迭代大约每秒出现一次。我在做什么来阻止Arduino发送数据?

这还不是一个正确的答案,更像是一个测试,但我无法将其放入注释中。

更改:

  • delTime现在是unsigned long int
  • CCD_ 5现在在CCD_
  • String对象和操作被更友好的堆代码所取代
  • 添加accel.begin();

请告诉我这是否适用于您,如果不适用,请告诉我它在哪里抱怨。尚未完全测试代码。您也可以尝试用数字替换accel.getX()accel.getY();我认为他们会返回short int

顺便说一句,按钮需要松开。

#include <SparkFun_MMA8452Q.h>
int sleepPin = 7;
int stepPin = 6;
int buttonPin = 8;
boolean stepMode = true;
unsigned long int delTime = 0;
MMA8452Q accel; //accelerometer
void setup(){
Serial.begin(9600);
while(millis() < 4000); //wait so I can start java program
Serial.write("Connected");
//set pins
pinMode(sleepPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(buttonPin, INPUT);
accel.begin();
digitalWrite(stepPin, HIGH); //starts in step mode
delTime = millis() + 250;
}
void loop() {
char str[15];
if (digitalRead(buttonPin) == HIGH)
stepMode = !stepMode;
if (millis() > delTime) {
//set led's according to mode
if (stepMode) {
digitalWrite(stepPin, HIGH);
digitalWrite(sleepPin, LOW);
Serial.write('s');
} else {
digitalWrite(stepPin, HIGH);
digitalWrite(sleepPin, LOW);
Serial.write('z');
}

sprintf(str, "%d", accel.getX());
Serial.write(str);
Serial.write(',');
sprintf(str, "%d", accel.getY());
Serial.write(str);
Serial.write('n');
delTime = millis() + 250;
}
}

最新更新