Как использовать millis вместо delay на Arduino для независимых интервалов времени для двух выходных контактов
Я хотел использовать миллис для кода ниже, но застрял между . может ли кто-нибудь помочь изменить данный код на миллис? Код здесь:
void set(){
digitalWrite(on, HIGH); // включаем двигатель (HIGH — уровень напряжения)
delay(1500);
digitalWrite(on, LOW);
delay(ont); //ждём заданное время
digitalWrite(off, HIGH ); // останавливаем мотор
delay(500);
digitalWrite(off, LOW );
delay(offt); //ждём другого
@Akshay Okate, 👍-1
Обсуждение1 ответ
▲ 0
Вот код для изменения значения PIN-кода без задержки. Прочтите и попробуйте.
#define on 2
#define off 3
//время задержки
const unsigned int ont = {1500, 500};
const unsigned int offt = {500, 300};
//последний миллис
unsigned long last_tm_on = 0;
unsigned long last_tm_off = 0;
//позиция
byte pos_on = 0;
byte pos_off = 0;
void setup(){
pinMode(on, OUTPUT);
pinMode(off, OUTPUT);
}
void loop(){
if(millis() - last_tm_on >= ont[pos_on]){ //проверяем, превышает ли millis() - последний millis() желаемое время
last_tm_on = millis(); //сохраняем последний миллис()
if(pos_on == 0) digitalWrite(on, HIGH);
if(pos_on == 1) digitalWrite(on, LOW);
pos_on ++; //добавляем позицию
if(pos_on > 1) pos_on = 0; //проверяем максимальную позицию
}
if(millis() - last_tm_off >= offt[pos_off]){
last_tm_off = millis();
if(pos_off == 0) digitalWrite(off, HIGH); // включаем двигатель (HIGH — уровень напряжения)
if(pos_off == 1) digitalWrite(off, LOW);
pos_off ++;
if(pos_off > 1) pos_off = 0;
}
}
,
@Matej
Матей, здесь только один мотор и два независимых программных таймера с миллисами., @Jot
@Jot Я думал, что включен один мотор и выключен второй. Ржу не могу, @Matej
Смотрите также:
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Отображение случайного числа для отображения в течение T секунд с помощью Millis() для Dice Roller
- Кнопка, которая дает ввод, имеет небольшую задержку - затем дает другой
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
См. https://www.arduino.cc/en/tutorial/BlinkWithoutDelay. Я вижу четыре разные вещи. Используйте счетчик от 0 до 3 и настройте интервал для каждой из четырех ситуаций. Можете ли вы попробовать и показать рабочий эскиз (чтобы мы могли опробовать ваш эскиз). У вас есть разные контакты для включения и выключения двигателя?, @Jot