如何在Arduino UNO上实现开关控制一个固定频率的方波信号输出-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2463|回复: 4

[未解决] 如何在Arduino UNO上实现开关控制一个固定频率的方波信号输出

[复制链接]
发表于 2021-7-25 11:59 | 显示全部楼层 |阅读模式
本帖最后由 warnerchang 于 2021-7-25 12:03 编辑

我想要使用上升沿触发信号1.我该如何将下面的代码改为输出固定频率方波信号呢?
2.大佬们可以解释下attachIterrupt函数吗?
下面是我找的一段代码:
  1. #define led 13
  2. #define button 0
  3. int state = LOW;
  4. void setup(){
  5. pinMode(led,OUTPUT);
  6. attachInterrupt(button,use,RISING);
  7. }
  8. void loop(){
  9. digitalWrite(led,state);
  10. }
  11. void use(){
  12. state=!state;
  13. }
复制代码




发表于 2021-7-26 08:19 | 显示全部楼层
  1. 设置中断函数
  2. attachInterrupt()

  3. void attachInterrupt (uint8_t interruptNum, void(*)(void)userFunc, int mode)

  4. 设置中断

  5. 指定中断函数. 外部中断有0和1两种, 一般对应2号和3号数字引脚.


  6. 参数:

  7.     interrupt 中断类型, 0或1
  8.     fun 对应函数
  9.     mode 触发方式. 有以下几种:

  10.         LOW 低电平触发中断

  11.         CHANGE 变化时触发中断

  12.         RISING 低电平变为高电平触发中断

  13.         FALLING 高电平变为低电平触发中断


  14. 注解:
  15. 在中断函数中 delay 函数不能使用, millis 始终返回进入中断前的值. 读串口数据的话, 可能会丢失. 中断函数中使用的变量需要定义为 volatile 类型.
  16. 下面的例子如果通过外部引脚触发中断函数, 然后控制LED的闪烁.

  17. int pin = 13;
  18. volatile int state = LOW;

  19. void setup()
  20. {
  21.   pinMode(pin, OUTPUT);
  22.   attachInterrupt(0, blink, CHANGE);
  23. }

  24. void loop()
  25. {
  26.   digitalWrite(pin, state);
  27. }

  28. void blink()
  29. {
  30.   state = !state;
  31. }
复制代码
 楼主| 发表于 2021-7-28 09:46 | 显示全部楼层

感谢您的回答,那么我想问一下,使用中断函数和使用delay函数哪个精度更高呢?
发表于 2021-7-28 16:07 | 显示全部楼层
中断和延时概念不同,用处也不同。
 楼主| 发表于 2021-7-29 09:55 | 显示全部楼层
奥巴牛 发表于 2021-7-28 16:07
中断和延时概念不同,用处也不同。

噢噢,好的,我再回去研究研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 01:51 , Processed in 0.088846 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表