Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试在Arduino MKR1000上运行的Arduino Uno代码_C++_Arduino_Arduino Mkr1000 - Fatal编程技术网

C++ 调试在Arduino MKR1000上运行的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相同的方式工作,但是我在

所以,我是Arduino的业余程序员,以前从未使用过Arduino MKR1000。我使用Arduino Uno并编写了附加代码,使用Grove耳夹心跳传感器和Grove温度传感器检测心跳和温度,然后每20秒在控制台中打印一次。以前,这段代码是为了在Grove OLED屏幕上显示而编写的,但后来通过仅在控制台上读取而将其简化为使用它

由于我的项目的可穿戴性,我不得不改用MKR1000。我知道MKR1000使用相同的Arduino代码,并且应该以与我的Arduino Uno相同的方式工作,但是我在使用相同代码的MKR1000时遇到了一些问题

问题是代码只运行一次,然后停止。虽然我知道for循环以及它在某种程度上是如何工作的,但我找不到确切的问题,为什么它停止循环,而不是像以前使用我的Uno那样不断地获取数据并将其发布在控制台上

为了提醒大家,下面是我的代码对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作为中断

非常感谢,非常感谢。