Как использовать 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);                  //ждём другого

, 👍-1

Обсуждение

См. https://www.arduino.cc/en/tutorial/BlinkWithoutDelay. Я вижу четыре разные вещи. Используйте счетчик от 0 до 3 и настройте интервал для каждой из четырех ситуаций. Можете ли вы попробовать и показать рабочий эскиз (чтобы мы могли опробовать ваш эскиз). У вас есть разные контакты для включения и выключения двигателя?, @Jot


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;
  } 
}
,

Матей, здесь только один мотор и два независимых программных таймера с миллисами., @Jot

@Jot Я думал, что включен один мотор и выключен второй. Ржу не могу, @Matej