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
使用Arduino生成平滑色调扫描_Arduino_Alert_Alarm - Fatal编程技术网

使用Arduino生成平滑色调扫描

使用Arduino生成平滑色调扫描,arduino,alert,alarm,Arduino,Alert,Alarm,我试图用一个压电蜂鸣器在一秒钟内从大约100Hz的频率线性上升到800Hz,发出呼啸声警报。我该怎么做 我不需要精确的测量或计时,只需要吸引注意力的东西 我相信这是唯一的解决办法?当我读到你的问题时,我碰巧在另一个项目的部分屏幕上打开了这个。我通常不只是分发代码,但我今天感觉很慷慨,我所要做的就是复制粘贴并为您添加一些注释 记住保持所有其他代码不阻塞(没有延迟或长时间等待或在物理世界中等待),否则这将不起作用 正如所写的,它未经测试,但它是从测试代码中提取出来的,为了清晰起见,只进行了轻微的编辑

我试图用一个压电蜂鸣器在一秒钟内从大约100Hz的频率线性上升到800Hz,发出呼啸声警报。我该怎么做

我不需要精确的测量或计时,只需要吸引注意力的东西


我相信这是唯一的解决办法?

当我读到你的问题时,我碰巧在另一个项目的部分屏幕上打开了这个。我通常不只是分发代码,但我今天感觉很慷慨,我所要做的就是复制粘贴并为您添加一些注释

记住保持所有其他代码不阻塞(没有延迟或长时间等待或在物理世界中等待),否则这将不起作用

正如所写的,它未经测试,但它是从测试代码中提取出来的,为了清晰起见,只进行了轻微的编辑。除非我在某个地方打错了字,否则这应该没问题

字节sirenPin=8;//或者别的别针
字节startPin=7;//启动警报器的按钮,连接在插脚和接地之间。
字节stopPin=6;//取消按钮
字节heartbeatPin=5;//闪烁的灯光
布尔sirenOn=false;
无符号整数totalSirenTime=1000;//一秒警报
无符号int startFreq=100;
无符号int stopFreq=800;
无符号整数步长=10;//让我们采取10Hz的步骤
无符号整数电流频率;
无效播放警报(){
静态布尔环=假;
静态无符号长lastStep=millis();
无符号长延时=毫秒()-最后一步;
unsigned int numberOfSteps=(stopFreq startFreq)/stepSize;
unsigned int-timePerStep=totalSirenTime/numberOfSteps;
如果(!中环){
//新一轮,重置我们的变量
最后一步=毫秒();
currentFreq=startFreq;
中环=真;
}
如果(elapsedTime>=timePerStep){
currentFreq+=步长;
最后一步=毫秒();
如果(当前频率>停止频率){
停止警报器();
中环=假;
返回;
}
}
音调(sirenPin、currentFreq);
}
void startSiren(){
sirenOn=true;
}
无效停止警报(){
sirenOn=false;
诺通(sirenPin);
}
无效心跳(){
静态无符号长lastBlink=millis();
无符号长延时=毫秒()-lastBlink;
如果(elapsedTime>=250){//0.5 hz闪烁)
数码写入(heartbeatPin,!数码读取(heartbeatPin));
lastBlink=millis();
}
}
无效设置(){
pinMode(sirenPin,输出);
pinMode(启动输入,输入/上拉);
pinMode(停止、输入和上拉);
pinMode(heartbeatPin,输出);
}
void循环(){
//任何其他可以调用startSiren()使其启动的代码
//保持循环中的所有代码不阻塞。
如果((数字读取(起始点)=低)和&!sirenOn){
startSiren();
}
如果(数字读取(停止)=低){
停止警报器();
}
如果(sirenOn){
播放警报器();
}
心跳();
}

当我读到你的问题时,我碰巧在另一个项目的屏幕上打开了这个。我通常不只是分发代码,但我今天感觉很慷慨,我所要做的就是复制粘贴并为您添加一些注释

记住保持所有其他代码不阻塞(没有延迟或长时间等待或在物理世界中等待),否则这将不起作用

正如所写的,它未经测试,但它是从测试代码中提取出来的,为了清晰起见,只进行了轻微的编辑。除非我在某个地方打错了字,否则这应该没问题

字节sirenPin=8;//或者别的别针
字节startPin=7;//启动警报器的按钮,连接在插脚和接地之间。
字节stopPin=6;//取消按钮
字节heartbeatPin=5;//闪烁的灯光
布尔sirenOn=false;
无符号整数totalSirenTime=1000;//一秒警报
无符号int startFreq=100;
无符号int stopFreq=800;
无符号整数步长=10;//让我们采取10Hz的步骤
无符号整数电流频率;
无效播放警报(){
静态布尔环=假;
静态无符号长lastStep=millis();
无符号长延时=毫秒()-最后一步;
unsigned int numberOfSteps=(stopFreq startFreq)/stepSize;
unsigned int-timePerStep=totalSirenTime/numberOfSteps;
如果(!中环){
//新一轮,重置我们的变量
最后一步=毫秒();
currentFreq=startFreq;
中环=真;
}
如果(elapsedTime>=timePerStep){
currentFreq+=步长;
最后一步=毫秒();
如果(当前频率>停止频率){
停止警报器();
中环=假;
返回;
}
}
音调(sirenPin、currentFreq);
}
void startSiren(){
sirenOn=true;
}
无效停止警报(){
sirenOn=false;
诺通(sirenPin);
}
无效心跳(){
静态无符号长lastBlink=millis();
无符号长延时=毫秒()-lastBlink;
如果(elapsedTime>=250){//0.5 hz闪烁)
数码写入(heartbeatPin,!数码读取(heartbeatPin));
lastBlink=millis();
}
}
无效设置(){
pinMode(sirenPin,输出);
pinMode(启动输入,输入/上拉);
pinMode(停止、输入和上拉);
pinMode(heartbeatPin,输出);
}
void循环(){
//任何其他可以调用startSiren()使其启动的代码
//保持循环中的所有代码不阻塞。
如果((数字读取(起始点)=低)和&!sirenOn){
startSiren();
}
如果(数字读取(停止)=低){
停止警报器();
}
如果(sirenOn){
播放警报器();
}
心跳();
}

总有其他方法…如果你需要一种真正的正弦波音调,你可以使用Mozzi()例如…总有其他方法…如果你需要一种真正的正弦波音调,你可以使用Mozzi()例如…频率是对数的。可能
currentFreq=(长)currentFreq*(1000+步长)/1000将导致更自然的变化?在本例中,频率不会线性上升?@Delta_G不会
返回
停止
播放警报器()
?是的。是的。这就是我们想要它做的。当我们到达最后一步的末尾时,该函数需要退出。如果它没有在那里退出,那么下一条线路将发出呼叫音并将警报器调回