如何让这个arduino小程序在延迟后,切换前,重新检测一次if条件?
答案:2 悬赏:40 手机版
解决时间 2021-02-19 02:17
- 提问者网友:低吟詩仙的傷
- 2021-02-18 19:13
如何让这个arduino小程序在延迟后,切换前,重新检测一次if条件?
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-02-18 19:23
#include "xxx"
#define TIME_100MS 1
#define TIME_1S 10
#define TIME_5S 50
#define TIME_10S 100
#define TIME_30S 300
typedef struct
{
uint16_t modeChange;
uint16_t ledShow;
}timeCnt_t;
timeCnt_t timeCnt;
const byte ledPin = 13; // Use the LED on pin 13.
void setup(void)
{
//system init...
// LED init...
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // Turns the LED off.
}
void loop (void)
{
//task 1
if (rvotage > 49 && rhomecr < 4 && digitalRead(swich)) //电压大于49v 电流小于4A 逆变器状态开时
{
if (timeCnt.modeChange > TIME_30S)
{
h2s(); //转换到太阳能
}
}
else
{
timeCnt.modeChange = 0;
}
//task 2
if (timeCnt.ledShow > TIME_1S)
{
timeCnt.ledShow = 0;
digitalwrite(ledpin,!digitalread(ledpin));
}
//task 3
// ...
}
//定时器中断调用,arduino有现成的MsTimer2库,设置下就好。
void TimeCbk (void) //be called every 100ms
{
(timeCnt.modeChange < 65535) ? (timeCnt.modeChange++) : (timeCnt.modeChange = 0);
(timeCnt.ledShow < 65535) ? (timeCnt.ledShow++) : (timeCnt.ledShow = 0);
}
#define TIME_100MS 1
#define TIME_1S 10
#define TIME_5S 50
#define TIME_10S 100
#define TIME_30S 300
typedef struct
{
uint16_t modeChange;
uint16_t ledShow;
}timeCnt_t;
timeCnt_t timeCnt;
const byte ledPin = 13; // Use the LED on pin 13.
void setup(void)
{
//system init...
// LED init...
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // Turns the LED off.
}
void loop (void)
{
//task 1
if (rvotage > 49 && rhomecr < 4 && digitalRead(swich)) //电压大于49v 电流小于4A 逆变器状态开时
{
if (timeCnt.modeChange > TIME_30S)
{
h2s(); //转换到太阳能
}
}
else
{
timeCnt.modeChange = 0;
}
//task 2
if (timeCnt.ledShow > TIME_1S)
{
timeCnt.ledShow = 0;
digitalwrite(ledpin,!digitalread(ledpin));
}
//task 3
// ...
}
//定时器中断调用,arduino有现成的MsTimer2库,设置下就好。
void TimeCbk (void) //be called every 100ms
{
(timeCnt.modeChange < 65535) ? (timeCnt.modeChange++) : (timeCnt.modeChange = 0);
(timeCnt.ledShow < 65535) ? (timeCnt.ledShow++) : (timeCnt.ledShow = 0);
}
全部回答
- 1楼网友:狂恋
- 2021-02-18 21:02
再加一个判断呗追问你好,怎样写?追答if (rvotage > 49 && rhomecr < 4 && digitalRead(swich)) //电压大于49v 电流小于4A 逆变器状态开时
{
delay(3000); //延迟30秒
if (rvotage > 49 && rhomecr < 4 && digitalRead(swich)) //电压大于49v 电流小于4A 逆变器状态开时 { h2s(); //转换到太阳能
}
}追问不好意思,第二次判断无效,还是会根据第一次判断来动作。追答rvotage 和 rhomecr怎么来的?再取值一次
{
delay(3000); //延迟30秒
if (rvotage > 49 && rhomecr < 4 && digitalRead(swich)) //电压大于49v 电流小于4A 逆变器状态开时 { h2s(); //转换到太阳能
}
}追问不好意思,第二次判断无效,还是会根据第一次判断来动作。追答rvotage 和 rhomecr怎么来的?再取值一次
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯