請問可以b如何取代delay 的指令
本帖最后由 弘毅 于 2018-1-9 15:13 编辑想請問各位大大
我想在我的程式中加入delay
可是delay 會影響整個程式的執行
請問要如何取代delay 的功能, 而不讓程式有問題呢
例如 :
int pin = 10;
int photocellPin1 = 3;
int val2 = 0;
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
val2 = digitalRead(photocellPin1);
if(val2==HIGH){
delay(5000);
digitalWrite(pin, HIGH);
}
else{
digitalWrite(pin, LOW);
}
}
另外有個問題..
當 val2 成立時, 會delay 5秒後 pin HIGH
但是當 val2 不成立時,也會延遲幾秒才變成pin LOW
想請問要如何修改或用其他方式取代delay
感謝各位大大幫忙解惑 想請問各位大大
我想在我的程式中加入delay
可是delay 會影響整個程式的咦 奇怪..怎麼只出現部分內容??? 代码尽量使用code标签,否则会和表情等冲突。 可以使用定时器 弘毅 发表于 2018-1-9 14:07
代码尽量使用code标签,否则会和表情等冲突。
謝謝大大教導 通幽境 发表于 2018-1-9 17:11
可以使用定时器
可以請問大大要如何修改呢
謝謝~~ 本帖最后由 最帅的老饼 于 2018-1-9 21:57 编辑
你没有说清楚你意图啊!!
你想实现什么功能? 最帅的老饼 发表于 2018-1-9 21:43
你没有说清楚你意图啊!!
你想实现什么功能?
謝謝大大
在第一樓裡面有說明了
有甚麼方式可以取代delay 的指令
當val2 變HIGH 時 , 會delay 5秒後 pin HIGH
當val2 變LOW 時, 要馬上 pin LOW.
在delay的這5秒間, 如果val2 又變回LOW , 那pin 還是要變回LOW..
而delay 的部分要重新計算...以val2 變回HIGH 回時重新算5 秒..
這是我大約需要的功能
感謝喔~ Arduino有个函数 millis() 是实时读取系统工作时间.
先做如下变量声明
unsigned longTime1 = 0 ;
再在程序的合适位置
Time1 =millis() ;
mickeyhuang 发表于 2018-1-9 22:43
謝謝大大
在第一樓裡面有說明了
有甚麼方式可以取代delay 的指令
有个 函数 millis ()
先声明个 unsigned long变量 ,如:
unsigned longTime1 = 0 ;
现在 不是大大,是菜鸟一员。
有个millis() 函数读取系统当前时间, 返回值是 unsigned long
你先自己写代码,真的搞不定再问吧。 用millis()吧 最帅的老饼 发表于 2018-1-9 23:30
Arduino有个函数 millis() 是实时读取系统工作时间.
先做如下变量声明
unsigned longTime1 = 0 ;
謝謝大大
不知可以在多說明一些嗎
因為新手, 還不知怎麼去改
謝謝喔~ 本帖最后由 最帅的老饼 于 2018-1-10 19:52 编辑
/*
开关一端接7号脚,另一端接GND
LED 接 13号脚
*/
#define photocellPin1 7
#define pin 13
#defineTime 5000 //延时的时间,单位是ms.
booleanval2 = 0 ;
booleanlock = 0 ;
unsigned longvalTime = 0 ;
void setup() {
Serial.begin(9600);
pinMode ( photocellPin1 , INPUT );
digitalWrite ( photocellPin1 , HIGH );
pinMode ( pin , OUTPUT);
}
void loop() {
if ( !digitalRead ( photocellPin1 )){ //读取引脚状态
delay ( 50 );
if ( !digitalRead ( photocellPin1 )){ //延时后再读取引脚状态,为了抗干扰。
while ( !digitalRead ( photocellPin1 )){ //不放开按键就不进行下一步,防抖动。
;
}
val2 = !val2; //把val2 反转,0变1,1变0. 注意:val2 是布尔类型变量。
valTime = millis() ; //把当前系统时间赋值给 valTime
lock = 1 ; //这是我习惯做法,控制程序流程。如果你不做多余的流程控制,可以用 if .....else .
}
}
if ( val2 == 1 && lock == 1 && ( millis() - valTime ) > Time){ // ( millis() - valTime ) > Time,这就是你要的延时控制.
digitalWrite( pin , HIGH ); //下面的注就不写了,自己打开串口监视吧。
lock = 0 ;
Serial.print ( " val2 = ");
Serial.println ( val2);
}
if ( val2 == 0 && lock == 1) {
digitalWrite( pin , LOW );
lock = 0 ;
Serial.print ( " val2 = ");
Serial.println ( val2);
}
}
页:
[1]
2