gpt4 book ai didi

Arduino - 使用中断会卡住处理和串行输出吗?

转载 作者:行者123 更新时间:2023-12-04 16:34:43 28 4
gpt4 key购买 nike

因此,就事件发生时的“中断”而言,中断似乎是有效的。我唯一的问题是我的中断会发生 2-3 次并且一切基本上都停止了(串行输出,一切)。

我正在对电路板进行编程,以根据 HC-SR04 距离 IC 的输出串行输出计算出的距离。距离计算准确,但就像我之前说的,一切似乎都卡住了。下面是串行监视器的代码和图像。

enter image description here

#define TRIGPIN 4
#define ECHOPIN 3
#define RED 2
#define GREEN 13
#define INTNUM 1 //interrupt pin 1 is digital pin 3 on the duemilanove
#define PULSE 10 //microseconds
#define CYCLETIME 50 //milliseconds

void ledWrite(int), trigPulse(), getTime();
int millisNow, millisPrev = 0;
int microsPrev;

boolean isHigh = false;


void setup() {
Serial.begin (9600);

pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);

attachInterrupt(INTNUM, getTime, CHANGE);
}

void loop() {
trigPulse();
// some other code while waiting on HC-SR04 to interrupt us when echo goes HIGH
}

void trigPulse(){
if( (millisNow = millis()) - millisPrev >= CYCLETIME){ //sufficient cycle time
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(PULSE);
digitalWrite(TRIGPIN, LOW);
millisPrev = millisNow; //reset clock
}
return;
}


void ledWrite(int dTime){
int distance = dTime/58.2;

if (distance < 4) {
digitalWrite(RED,HIGH);
digitalWrite(GREEN,LOW);
}
else {
digitalWrite(RED,LOW);
digitalWrite(GREEN,HIGH);
}

if (distance >= 200 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}

}

void getTime(){
int timeNow = micros();
Serial.println("Interrupted");

if(isHigh == false){
microsPrev = timeNow; //get time now, pin LOW->HIGH
isHigh = true;
Serial.println("Returning ..");
return;
}

else { //pin HIGH->lOW
ledWrite(timeNow - microsPrev);
isHigh = false;
microsPrev = micros();
Serial.println("Returning ..");
return;
}

return;
}

最佳答案

我知道这是一个旧线程,但我只是遇到了我自己的问题。这里的问题是你不能使用:

Serial.Print()

在中断服务程序内。 Serial.Print()的原因在 ISR 中不起作用是它使用中断将字符从串行缓冲区中拉出,但在 ISR 中屏蔽了某个级别的中断。基本上发生的是,arduino 会抛出所有其他优先级较低的中断,而 Serial.Read() 属于这些中断。

它记录在许多地方: link1 , link2 , link3

关于Arduino - 使用中断会卡住处理和串行输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985830/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com