C++ 调试在Arduino MKR1000上运行的Arduino Uno代码
所以,我是Arduino的业余程序员,以前从未使用过Arduino MKR1000。我使用Arduino Uno并编写了附加代码,使用Grove耳夹心跳传感器和Grove温度传感器检测心跳和温度,然后每20秒在控制台中打印一次。以前,这段代码是为了在Grove OLED屏幕上显示而编写的,但后来通过仅在控制台上读取而将其简化为使用它 由于我的项目的可穿戴性,我不得不改用MKR1000。我知道MKR1000使用相同的Arduino代码,并且应该以与我的Arduino Uno相同的方式工作,但是我在使用相同代码的MKR1000时遇到了一些问题 问题是代码只运行一次,然后停止。虽然我知道for循环以及它在某种程度上是如何工作的,但我找不到确切的问题,为什么它停止循环,而不是像以前使用我的Uno那样不断地获取数据并将其发布在控制台上 为了提醒大家,下面是我的代码对Arduino Uno的反应: 控制台中的结果显示:C++ 调试在Arduino MKR1000上运行的Arduino Uno代码,c++,arduino,arduino-mkr1000,C++,Arduino,Arduino Mkr1000,所以,我是Arduino的业余程序员,以前从未使用过Arduino MKR1000。我使用Arduino Uno并编写了附加代码,使用Grove耳夹心跳传感器和Grove温度传感器检测心跳和温度,然后每20秒在控制台中打印一次。以前,这段代码是为了在Grove OLED屏幕上显示而编写的,但后来通过仅在控制台上读取而将其简化为使用它 由于我的项目的可穿戴性,我不得不改用MKR1000。我知道MKR1000使用相同的Arduino代码,并且应该以与我的Arduino Uno相同的方式工作,但是我在
请准备好
现在开始
然后它每秒打印1到20个数字,然后是传感器读数。发布后,它会再次重复此过程
再次对给您带来的不便表示抱歉,并感谢您的帮助
我使用了传感器文档博客中的直接代码(链接页面底部):
#定义LED 4//指示灯,Grove-LED与Arduino的D4相连
布尔led_状态=低//每次外部中断时LED的状态
//将更改LED的状态
浮动坦帕;
int-tempPin=0;
无符号字符计数器;
无符号长临时[21];
无符号长子;
布尔数据_效应=真;
无符号整数心率//心率测量结果
最大心脏脉冲占空比=2000//您可以根据系统的要求进行更改。
//2000米等于2秒。系统返回错误
//如果负载超过2秒。
无效设置()
{
引脚模式(LED,输出);
Serial.begin(9600);
而(!串行){
;
}
Serial.println(“请准备好”);
延迟(5000);
arrayInit();
Serial.println(“现在将开始”);
attachInterrupt(0,中断,上升);//设置中断0,数字端口2
}
void循环()
{
digitalWrite(LED,LED_状态);//更新指示器的状态
}
/*功能:计算心率*/
无效金额()
{
如果(数据_效应)
{
心率=1200000/(温度[20]-温度[0]);/60*20*1000/20总时间
串行打印(“心率:\t”);
序列号:println(心率);
tempa=模拟读数(tempPin);
坦帕=坦帕*0.11;
串行打印(“体温=”);
串行打印(tempa);
连续打印(“*C”);
Serial.println();
延迟(1000);
}
data_effect=1;//符号位
}
/*功能:中断服务程序。从外部中断获取信号*/
无效中断()
{
温度[计数器]=毫秒();
串行打印LN(计数器,DEC);
开关(计数器)
{
案例0:
sub=温度[计数器]-温度[20];
打破
违约:
sub=温度[计数器]-温度[计数器-1];
打破
}
if(sub>max\u heartpluse\u duty)//将2秒设置为max heartpluse duty
{
data_effect=0;//符号位
计数器=0;
Serial.println(“测量错误,测试将重新启动!”);
arrayInit();
}
否则如果(计数器==20&&data\U效应)
{
计数器=0;
sum();
}
否则如果(计数器!=20和数据效应)
{
计数器++;
}
其他的
{
计数器=0;
数据_效应=1;
}
}
/*功能:阵列的初始化(临时)*/
void arrayInit()
{
for(无符号字符i=0;i<20;i++)
{
温度[i]=0;
}
温度[20]=毫度();
}
您的问题是中断引脚。在Arduino UNO上,数字引脚D2是中断引脚0,正如您在代码中所做的那样。在Arduino MKR1000上,中断管脚与物理管脚编号相同,因此,如果连接到管脚2,请更改attachInterrupt(0,中断,上升)代码>至连接中断(2,中断,上升)代码>
如果您想确保使用正确的引脚,可以使用数字引脚中断(pin)
在任何Arduino板上获得正确的中断号。像这样attachInterrupt(数字插针插入(pin)、中断、上升)代码>其中pin是物理pin号
信息
在Arduino MKR1000上,您可以使用引脚0、1、4、5、6、7、8、9、A1和A2作为中断非常感谢,非常感谢。