新人请教如何停止arduino程序
本帖最后由 jayhe 于 2013-11-25 14:11 编辑如何才能完全停止arduino程序,使开发板不运行烧进去的程序??难道只有拔usb线??
新人求教 建个死循环,然后跳进去 给个信号,如按键,然后跳出loop。 林定祥 发表于 2013-11-21 20:56 static/image/common/back.gif
给个信号,如按键,然后跳出loop。
跳出loop用什么?goto?
我是用 if判断条件(串口输入值或其他状态)让loop越过的 while(digitalRead(10)==LOW)
{
//里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程序不运行
} i7456 发表于 2013-11-22 09:10 static/image/common/back.gif
while(digitalRead(10)==LOW)
{
//里面写你自己的程序,10脚接GND时这里的程序运行,接vcc时这里的程 ...
嗯,有点意思~
但如何使10脚在这两种状态间切换呢?需要设什么外部电路?还是直接拔导线? chaqing 发表于 2013-11-22 01:09 static/image/common/back.gif
跳出loop用什么?goto?
我是用 if判断条件(串口输入值或其他状态)让loop越过的
if判断条件(串口输入值或其他状态)让loop越过的
如何越过? jayhe 发表于 2013-11-22 09:31 static/image/common/back.gif
嗯,有点意思~
但如何使10脚在这两种状态间切换呢?需要设什么外部电路?还是直接拔导线?
直接插拔线呗 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;
} hmjack2008 发表于 2013-11-22 10:15 static/image/common/back.gif
Arduino的核心程序码如下:其实在 *.ino 文件中也可以这样写法,
不明白啊。。 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: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]