Отказ от оператора Delay

vitez
Offline
Зарегистрирован: 04.11.2015

Помогите с изменением оператора Delay на millis в скетче. никак не могу догнать, как правильно сделать.

if ( In_sms   ==  true)
    {  
    Serial1.print("AT + CMGS = \"");
    delay(300);
    Serial1.print( Phone );
    delay(300);
    Serial1.println("\"");
    delay(300);
//
    Serial1.println(  text  );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
    Serial1.println(    text1    );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
    Serial1.println(    text2    );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
Serial1.println(     text3     );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
Serial1.println(     text4     );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
Serial1.println(     text5     );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
Serial1.println(      text6      );
    delay(300);
    Serial1.println(  "\n"  );
    delay(300);
//
    Serial1.println((char)26);
    delay(300);
    Serial1.println();
    delay(300);
}

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
void antidelay(unsigned long timing){
timing += millis();
while(millis()<=timing);
}
void setup() {
 pinMode(13, OUTPUT);
}
void loop() {
 digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  antidelay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  antidelay(1000);  
}

лови код

 

vitez
Offline
Зарегистрирован: 04.11.2015

Я не совсем понял, как это работает, но реализовать попробую. Спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не нужно.

Это такой прикол был.

Посмотрите лучше здесь: https://www.google.ru/#newwindow=1&q=blink+without+delay

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

vitez пишет:

Помогите с изменением оператора Delay на millis в скетче. никак не могу догнать, как правильно сделать.

и, очки чукче-писателю пришлите, что бы не писал на осчупь, но и читал прибитые гвоздями темы

nanotroll
Offline
Зарегистрирован: 24.07.2016
#define DATA_SEND_START 1
#define DATA_SEND_COMPLETED 0

unsigned long interval = 300;
unsigned long previousMillis = 0;

uint8_t inSMS = 1;

uint8_t counter = 0;

int dataArray[]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

uint8_t state;

void sendData(int data[]) {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    
    Serial.println(data[counter]);

    counter += 1;
  }

  if (counter == sizeof(dataArray) / sizeof(int)) {
    counter = 0;
    state = DATA_SEND_COMPLETED;
  }
}

void checkSMS() {
  if (inSMS == 1) {
    state = DATA_SEND_START;
  }
}

void doTask() {
  if (state == DATA_SEND_START) {
    sendData(dataArray);
  }
  if (state == DATA_SEND_COMPLETED) {
    Serial.println("COMPLETED");
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  checkSMS();
  doTask();
}

Только вместо строк числа.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

;)