jayhe 发表于 2013-11-21 17:42:44

新人请教如何停止arduino程序

本帖最后由 jayhe 于 2013-11-25 14:11 编辑

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

davidce 发表于 2013-11-21 20:51:22

建个死循环,然后跳进去

林定祥 发表于 2013-11-21 20:56:12

给个信号,如按键,然后跳出loop。

chaqing 发表于 2013-11-22 01:09:35

林定祥 发表于 2013-11-21 20:56 static/image/common/back.gif
给个信号,如按键,然后跳出loop。

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

i7456 发表于 2013-11-22 09:10:48

while(digitalRead(10)==LOW)
{
   //里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程序不运行
}

jayhe 发表于 2013-11-22 09:31:32

i7456 发表于 2013-11-22 09:10 static/image/common/back.gif
while(digitalRead(10)==LOW)
{
   //里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程 ...

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

jayhe 发表于 2013-11-22 09:33:40

chaqing 发表于 2013-11-22 01:09 static/image/common/back.gif
跳出loop用什么?goto?
我是用 if判断条件(串口输入值或其他状态)让loop越过的

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

如何越过?

i7456 发表于 2013-11-22 09:37:13

jayhe 发表于 2013-11-22 09:31 static/image/common/back.gif
嗯,有点意思~
但如何使10脚在这两种状态间切换呢?需要设什么外部电路?还是直接拔导线?

直接插拔线呗

hmjack2008 发表于 2013-11-22 10:15:55

Arduino的核心程序码如下:#include <Arduino.h>

int main(void)
{
        init();

#if defined(USBCON)
        USBDevice.attach();
#endif
       
        setup();
   
        for (;;) {
                loop();
                if (serialEventRun) serialEventRun();
        }
      
        return 0;
}
其实在 *.ino 文件中也可以这样写法,#include <Arduino.h>

int main(void)
{
        init();

        /*** 写自己的程序码, 例如: ***/
        pinMode(13,OUTPUT);
        while(1) {
            digitalWrite(13,HIGH);
            delay(500);
            digitalWrite(13,LOW);
            delay(500);
        }
        /***********************/

        return 0;
}

jayhe 发表于 2013-11-22 10:36:33

hmjack2008 发表于 2013-11-22 10:15 static/image/common/back.gif
Arduino的核心程序码如下:其实在 *.ino 文件中也可以这样写法,

不明白啊。。

i7456 发表于 2013-11-22 10:49:00

jayhe 发表于 2013-11-22 09:33 static/image/common/back.gif
if判断条件(串口输入值或其他状态)让loop越过的

如何越过?

int state = 0;
void setup()
{
// start serial port at 9600 bps:
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop()
{
// if we get a valid byte, read analog ins:
if (Serial.available() > 0)
{
   if(Serial.read()=='a')
   state = 1;   
}

while(state == 1)
{
    if (Serial.available() > 0)
       if(Serial.read()=='b')
         state = 0;
//下面写你自己的程序,串口接收到a时运行下面的程序,接收到b时停止下面的程序
    digitalWrite(13,HIGH);
    delay(100);
    digitalWrite(13,LOW);
    delay(100);
}

}

hmjack2008 发表于 2013-11-23 00:34:50

本帖最后由 hmjack2008 于 2013-11-23 00:47 编辑

jayhe 发表于 2013-11-22 10:36 static/image/common/back.gif
不明白啊。。


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

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

int main(void)
{
        init();

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

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

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

int main(void)
{
      init();

#if defined(USBCON)
      USBDevice.attach();
#endif
      
      setup();

      for (;;) {
                loop();
                if (serialEventRun) serialEventRun();

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

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

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

}

void loop() {


    /*** 写自己的程序码, 例如: ***/
      digitalWrite(13,HIGH);
      delay(500);
      digitalWrite(13,LOW);
      delay(500);


      RUN_Switch = digitalRead(2); // 侦测 2脚按键是否被按下(接地), 用来改变 程序执行开关
}
页: [1]
查看完整版本: 新人请教如何停止arduino程序