极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 65746|回复: 11

新人请教如何停止arduino程序

[复制链接]
发表于 2013-11-21 17:42:44 | 显示全部楼层 |阅读模式
本帖最后由 jayhe 于 2013-11-25 14:11 编辑

如何才能完全停止arduino程序,使开发板不运行烧进去的程序??难道只有拔usb线??
新人求教
回复

使用道具 举报

发表于 2013-11-21 20:51:22 | 显示全部楼层
建个死循环,然后跳进去
回复 支持 反对

使用道具 举报

发表于 2013-11-21 20:56:12 | 显示全部楼层
给个信号,如按键,然后跳出loop。
回复 支持 反对

使用道具 举报

发表于 2013-11-22 01:09:35 | 显示全部楼层
林定祥 发表于 2013-11-21 20:56
给个信号,如按键,然后跳出loop。

跳出loop用什么?goto?
我是用 if判断条件(串口输入值或其他状态)让loop越过的
回复 支持 反对

使用道具 举报

发表于 2013-11-22 09:10:48 | 显示全部楼层
while(digitalRead(10)==LOW)
{
     //里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程序不运行
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 09:31:32 | 显示全部楼层
i7456 发表于 2013-11-22 09:10
while(digitalRead(10)==LOW)
{
     //里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程 ...

嗯,有点意思~
但如何使10脚在这两种状态间切换呢?需要设什么外部电路?还是直接拔导线?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 09:33:40 | 显示全部楼层
chaqing 发表于 2013-11-22 01:09
跳出loop用什么?goto?
我是用 if判断条件(串口输入值或其他状态)让loop越过的

if判断条件(串口输入值或其他状态)让loop越过的

如何越过?
回复 支持 反对

使用道具 举报

发表于 2013-11-22 09:37:13 | 显示全部楼层
jayhe 发表于 2013-11-22 09:31
嗯,有点意思~
但如何使10脚在这两种状态间切换呢?需要设什么外部电路?还是直接拔导线?

直接插拔线呗
回复 支持 反对

使用道具 举报

发表于 2013-11-22 10:15:55 | 显示全部楼层
Arduino的核心程序码如下:
  1. #include <Arduino.h>

  2. int main(void)
  3. {
  4.         init();

  5. #if defined(USBCON)
  6.         USBDevice.attach();
  7. #endif
  8.        
  9.         setup();
  10.    
  11.         for (;;) {
  12.                 loop();
  13.                 if (serialEventRun) serialEventRun();
  14.         }
  15.         
  16.         return 0;
  17. }
复制代码
其实在 *.ino 文件中也可以这样写法,
  1. #include <Arduino.h>

  2. int main(void)
  3. {
  4.         init();

  5.         /*** 写自己的程序码, 例如: ***/
  6.         pinMode(13,OUTPUT);
  7.         while(1) {
  8.             digitalWrite(13,HIGH);
  9.             delay(500);
  10.             digitalWrite(13,LOW);
  11.             delay(500);
  12.         }
  13.         /***********************/

  14.         return 0;
  15. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 10:36:33 | 显示全部楼层
hmjack2008 发表于 2013-11-22 10:15
Arduino的核心程序码如下:其实在 *.ino 文件中也可以这样写法,

不明白啊。。
回复 支持 反对

使用道具 举报

发表于 2013-11-22 10:49:00 | 显示全部楼层
jayhe 发表于 2013-11-22 09:33
if判断条件(串口输入值或其他状态)让loop越过的

如何越过?
  1. int state = 0;
  2. void setup()
  3. {
  4.   // start serial port at 9600 bps:
  5.   Serial.begin(9600);
  6.   pinMode(13, OUTPUT);
  7. }

  8. void loop()
  9. {
  10.   // if we get a valid byte, read analog ins:
  11.   if (Serial.available() > 0)
  12.   {
  13.    if(Serial.read()=='a')
  14.      state = 1;   
  15.   }
  16.   
  17.   while(state == 1)
  18.   {
  19.     if (Serial.available() > 0)
  20.        if(Serial.read()=='b')
  21.            state = 0;
  22. //下面写你自己的程序,串口接收到a时运行下面的程序,接收到b时停止下面的程序
  23.     digitalWrite(13,HIGH);
  24.     delay(100);
  25.     digitalWrite(13,LOW);
  26.     delay(100);
  27.   }  

  28. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-11-23 00:34:50 | 显示全部楼层
本帖最后由 hmjack2008 于 2013-11-23 00:47 编辑
jayhe 发表于 2013-11-22 10:36
不明白啊。。



因为题目设定为 “使开发板不运行烧进去的程序”… 所以我假设,做个” 死循环跳进去”也还在重复运行烧进去的死循环程序…

所以, 从C语言的跳出main()主程序 “return”方向思考….
  1. #include <Arduino.h>

  2. int main(void)
  3. {
  4.         init();

  5.         /*** 写自己的程序码, 例如: ***/
  6.         pinMode(2,INPUT_PULLUP); //将2号管脚设置为输入并且内部上拉模式
  7.         pinMode(13,OUTPUT);
  8.         while(1) { // 无穷循环,相当于原来的 loop()
  9.             digitalWrite(13,HIGH);
  10.             delay(500);
  11.             digitalWrite(13,LOW);
  12.             delay(500);
  13.             if(digitalRead(2)==LOW) { // 侦测 2脚按键是否被按下(接地)
  14.                 return 1; // 中止arduino的主程序main(),也就是中止arduino的运行了 !!
  15.             }
  16.         }
  17.         /*****************************/

  18.         return 0;
  19. }
复制代码
或者,
改写Arduino核心程序, 加一个 RUN_Switch程序执行开关
  1. #include <Arduino.h>

  2. /*** 改写Arduino核心程序, 加一个 RUN_Switch程序执行开关 ***/
  3. boolean RUN_Switch = HIGH; //设定一个程序执行开关

  4. int main(void)
  5. {
  6.         init();

  7. #if defined(USBCON)
  8.         USBDevice.attach();
  9. #endif
  10.         
  11.         setup();

  12.         for (;;) {
  13.                 loop();
  14.                 if (serialEventRun) serialEventRun();

  15.                 if(!RUN_Switch) // 侦测 程序执行开关
  16.                         return 1; // 中止arduino的主程序main(),也就是中止arduino的运行了 !!
  17.         }
  18.         
  19.         return 0;
  20. }

  21. /*** 以下按原来Arduino的写法, 只要将 RUN_Switch关闭, Arduino主程序便会被中止!! ***/
  22. void setup() {

  23.     /*** 写自己的程序码, 例如: ***/
  24.         pinMode(13,OUTPUT);
  25.         pinMode(2,INPUT_PULLUP); //将2号管脚设置为输入并且内部上拉模式

  26. }

  27. void loop() {


  28.     /*** 写自己的程序码, 例如: ***/
  29.         digitalWrite(13,HIGH);
  30.         delay(500);
  31.         digitalWrite(13,LOW);
  32.         delay(500);


  33.         RUN_Switch = digitalRead(2); // 侦测 2脚按键是否被按下(接地), 用来改变 程序执行开关
  34. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 21:35 , Processed in 0.040302 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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