在這裡卡死是早預料到的, 因為程式中只有三個 while loop 可以卡死, 而你放的地方把三個 while loop 也包了, 卡死在這裡也很正常.
嘗試看看 IR 是否可接收到 HIGH / LOW, 以及 max_high 的值吧, 這都是決定程式進行的路徑的元素.
while(!exit)
{
Serial.println("loop for IR LOW");
while( digitalRead(IR_LED) == LOW )
delayMicroseconds(MICRO_STEP);
unsigned long start = micros();
int max_high = 0;
Serial.println("loop for IR HIGH");
while( digitalRead(IR_LED) == HIGH )
{
delayMicroseconds(MICRO_STEP);
max_high += MICRO_STEP;
Serial.println(max_high);
if( max_high > IDLE_PULSE )
{
exit = 1;
break;
}
}
unsigned long duration = micros() - start;
pulses = duration;
}
Super169 发表于 2014-5-6 16:28 static/image/common/back.gif
在這裡卡死是早預料到的, 因為程式中只有三個 while loop 可以卡死, 而你放的地方把三個 while loop 也包了 ...
这部分代码被完全跳过了,在上一个判断IR是不是LOW的那个地方,看着是做判断,然后就跳过了这一段。 Super169 发表于 2014-5-6 16:28 static/image/common/back.gif
在這裡卡死是早預料到的, 因為程式中只有三個 while loop 可以卡死, 而你放的地方把三個 while loop 也包了 ...
理论上这个地方的红外线接收IR_LED应该是低电平的,但是这里一直是高电平。难道是硬件上的问题了?我一直担心的就是温度传感器和这个红外线的通信会不会冲突 Super169 发表于 2014-5-6 16:28 static/image/common/back.gif
在這裡卡死是早預料到的, 因為程式中只有三個 while loop 可以卡死, 而你放的地方把三個 while loop 也包了 ...
我换了另一套代码,不检测输入口的电平,直接解码。现在做出来了。就是感觉没有这个那么灵敏 解决方案,换了一套红外接收代码,如下#include <Adafruit_ssd1306syp.h>
#define SDA_PIN 8
#define SCL_PIN 9
Adafruit_ssd1306syp display(SDA_PIN,SCL_PIN);
#include <IRremote.h>// 使用IRRemote函数库
const int irReceiverPin = 2;// 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口
IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
decode_results results; // 定义results变量为红外结果存放位置
int n; //整形变量n遥控器键位
int level; //转速等级
int mspeed; //电机转速
void setup()
{
delay(1000);
display.initialize();
level=0;//assignment speed level
mspeed=0;
pinMode(5,OUTPUT);
irrecv.enableIRIn(); // 启动红外解码
Serial.begin(9600); // 开启串口,波特率为9600
}
void loop()
{
int mode;
double T;
T=(analogRead(A5)*0.488);//assignment temperature
mode=1;//Mode number
if (irrecv.decode(&results))
{ // 解码成功,把数据放入results变量中
// 把数据输入到串口
n=int(results.value);
irrecv.resume(); // 继续等待接收下一组信号
}
mspeed=map(level,1,50,35,255);
if(n==-23971)
{
Serial.println("CH-");
level--;
n=0;
}
else if(n==25245)
{
Serial.println("CH");
level=0;
n=0;
}
else if(n==-7651)
{
Serial.println("CH+");
level++;
n=0;
}
if(((level)==(0)))
{
mspeed=0;
}
analogWrite(5,mspeed);
Serial.println(level);
display.clear();
display.setTextSize(1);
display.setCursor(0,0);
display.println("Temperature:");
display.setTextSize(2);
display.print(T);
display.setTextSize(1);
display.print("o");
display.setTextSize(2);
display.println("C");
display.println("");
display.setTextSize(1);
display.print("Speed Level:");
display.print(level);
display.println("");
display.setTextSize(1);
display.println("");
display.print("Mode:");
display.print(mode);
display.update();
}
页:
1
[2]