[英]Arduino for loop completely not functional
我正在尝试从 Arduino 将数据从加速度计发送到 Java。我正在使用增量时间将其限制为每 250 毫秒发送一次。
问题是所有 Java 程序正在读取的是setup()
中发送的第一条消息一遍又一遍。
我添加了一个测试Serial.write
来检查程序是否曾经进入增量时间块,它似乎正在发送(或至少读取)该消息的前 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 控制台 output 显示为:
Connected
de
Connected
de
Connected
de
大约每秒出现一次新的迭代。 我在做什么阻止 Arduino 发送数据?
还不是一个正确的答案,更多的是测试,但我无法将其放入评论中。
所做的更改:
delTime
现在是一个unsigned long int
;delTime
现在在loop()
结束时重置;String
object 和操作被堆友好代码取代。accel.begin();
让我知道这是否适合您,如果不适合,请告诉我它在哪里抱怨。 还没有完全测试代码。 您也可以尝试用数字替换accel.getX()
和accel.getY()
; 他们返回short int
s,我想。
顺便说一句,按钮需要去抖动。
#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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.