我正在尝试等待用户输入以启动程序操作,然后当用户发送停止命令时,循环停止运行。在循环运行时,我无法让串口继续读取输入。
所以我希望用户按1然后它将进入循环并显示来自中断的数据。但我希望它继续监视串行输入,所以当我键入2时,我将退出循环并停止打印到串行端口。
串口未注册我的第二个输入。
我遗漏了一些代码,但重要的东西应该在那里。
int userStart = 0; // Holder for user input to start program
int userStop = 0; // Holder for user input to stop program
void setup() {
Serial.begin(115200);
pinMode(motorEncoderA, INPUT);
digitalWrite(motorEncoderA, HIGH); // Pull up resistor
pinMode(motorEncoderB, INPUT);
digitalWrite(motorEncoderB,HIGH); // Pull up resistor
// Interrupt on change of Pin A
attachInterrupt(digitalPinToInterrupt(2), encoderFunc, CHANGE);
Serial.print("Press 1 to start the Process & 2 to Stop");
}
void loop() {
if (Serial.available() > 0)
{
userStart = Serial.read();
if (userStart = 1) {
Serial.print('\n');
while(userStop != 2) {
unsigned long timee = millis();
// Only update if the shaft has moved
if (encoderPositionLast != rotationCounter) {
Serial.print("Time: ");
Serial.print(timee);
Serial.print(" Count: ");
Serial.print (rotationCounter);
Serial.print('\n');
encoderPositionLast = rotationCounter;
Serial.print(userStart);
}
if (Serial.available() > 0) {
userStop = Serial.read();
Serial.print(userStop);
}
}
}
}
答案 0 :(得分:0)
嗯,我认为您的问题是userStart
和userStop
不应该是1
和2
,而是'1'
和'2'
。
那就是说,你的代码中有些东西我不喜欢。
首先,为什么每个人都使用int
作为所有数字变量的基本类型?如果单个byte
足够,请使用它。在32位计算机上int
和byte
几乎相同,但在使用int
的8位计算机上浪费了空间和时间。
其次,我强烈反对阻止循环功能,否则你将无法做任何其他事情。相反,使用变量来跟踪您是否正在运行,使用串行接口更新它,然后在运行时执行代码。
此代码应该这样做。恕我直言,它比阻止循环要好得多:
bool running = false;
void setup()
{
...
running = false;
}
void loop()
{
if (Serial.available() > 0)
{
switch(Serial.read())
{
case '1':
running = true;
Serial.print('\n');
break;
case '2':
running = false;
Serial.print("stopped");
break;
}
}
if (running)
{
unsigned long timee = millis();
// Only update if the shaft has moved
if (encoderPositionLast != rotationCounter) {
Serial.print("Time: ");
Serial.print(timee);
Serial.print(" Count: ");
Serial.print (rotationCounter);
Serial.print('\n');
encoderPositionLast = rotationCounter;
Serial.print("running");
}
}
}