前一个帖子 还没有弄出来,这个求助一个简单的
我想用arduino编一个,led on 100ms off 100ms, on 100ms off 700ms的一个程序(也就是说连闪两下),不用delay的现在用timer实在是编不出来了
文科生伤不起啊 ,求救各位大大了 最简单的方法是流水账;
loop{
Led On
delay()
Led off
delay()
Led On
delay()
Led off
delay()
} 林定祥 发表于 2013-11-27 16:45 static/image/common/back.gif
最简单的方法是流水账;
loop{
Led On
这个我知道,但是不能用delay,因为有别的程序也在跑,继续救助
在网上看用余数可以弄 led on 和 off 不同周期,但是on 两下就不会了:Q:Q 无名2587 发表于 2013-11-27 16:51 static/image/common/back.gif
这个我知道,但是不能用delay,因为有别的程序也在跑,继续救助
在网上看用余数可以弄 led on 和 off...
有定时命令milis()毫秒为单位 林定祥 发表于 2013-11-27 17:01 static/image/common/back.gif
有定时命令milis()毫秒为单位
if (m - time1 > interval1){
time1 = m;
if (value1 == LOW)
value1 = HIGH;
else
value1 = LOW;
digitalWrite(led1, value1);
这个的话 on 和off的时间是相同的,怎么弄成闪两下,就不会了,可能是我不会举一反三把,求助阿 无名2587 发表于 2013-11-27 17:12 static/image/common/back.gif
if (m - time1 > interval1){
time1 = m;
如果有其它程序跑就需要使用定时中断 万马奔腾 发表于 2013-11-27 17:52 static/image/common/back.gif
如果有其它程序跑就需要使用定时中断
interrupt,之后往上加,现在第一步,双闪还母有整出来呢:Q #define LED_PIN 1//led 引脚
enum LED_STATE
{
LED_ON,
LED_OFF,
};
struct led_t
{
LED_STATE state;
uint32_t timeout;
};
struct led_state_t
{
uint8_t i;
uint32_t time;
};
#define LED_MAX_COUNT 4
struct led_t g_led=
{
{
LED_ON, 100
}
,
{
LED_OFF, 100
}
,
{
LED_ON, 100
}
,
{
LED_OFF, 700
}
,
};
struct led_state_t g_led_state =
{
0, 0
};
void setLed(struct led_t *led)
{
switch (led->state)
{
case LED_ON:
digitalWrite(LED_PIN,LOW);
break;
case LED_OFF:
digitalWrite(LED_PIN, HIGH);
break;
}
g_led_state.time = millis() + led->timeout;
}
inline void checkLed()
{
if(millis() >= g_led_state.time)
{
g_led_state.i++;
if (g_led_state.i >= LED_MAX_COUNT)
g_led_state.i = 0;
setLed(&g_led);
}
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
setLed(&g_led);
}
void loop()
{
checkLed();
}
pathletboy 发表于 2013-11-27 20:24 static/image/common/back.gif
int LED_pin = 2;
long ON_time = 300;
long OFF_time = 700;
long time = millis();
int value = LOW;
void setup() {
pinMode(LED_pin,OUTPUT);
}
void loop() {
unsigned long PERIOD = ON_time + OFF_time;
unsigned M_time;
unsigned long m =millis();
M_time = millis() % PERIOD;
if(M_time < ON_time) {
if (m - time > 100){
time = m;
if (value == LOW);
value = HIGH;}
else
value = LOW;
digitalWrite(LED_pin, value);//turns LED on
} else {
digitalWrite(LED_pin, LOW); //turns LED off
}
} 谢谢大家回复,终于弄出来了 还是不对,灯的亮度很暗,但是加上serial print就亮了,求告人指点
int LED_pin = 2;
long ON_time = 400;
long OFF_time = 700;
long time = millis();
int value = LOW;
int i;
void setup() {
pinMode(LED_pin,OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long PERIOD = ON_time + OFF_time;
unsigned M_time;
unsigned long m =millis();
M_time = millis() % PERIOD;
if(M_time < ON_time) {
if (m - time > 190){
time = m;
if (value == LOW);
value = HIGH;}
else
value = LOW;
Serial.println(value);
digitalWrite(LED_pin, value);//turns LED on
} else
digitalWrite(LED_pin, LOW); //turns LED off
} pathletboy 发表于 2013-11-27 20:24 static/image/common/back.gif
好厉害,灯正常亮,(52行 54行 大大定义反了) 正在慢慢读,有很多行看不懂,谢谢大大了
页:
[1]