Таймер для миксера

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019
int FRWD=12;
int REV=13;
int Start_Butt=11;
byte counter=0;
byte count=0;
bool forvard=true;
bool _Stop=false;
unsigned int _timer;
void setup() {
  Serial.begin(115200);
  pinMode(FRWD, OUTPUT); 
  pinMode(REV, OUTPUT); 
  pinMode(Start_Butt, INPUT_PULLUP); 
 }
void work()
{count++;
byte k;
k=(_Stop?2:40);
  if(count>=k) 
  {if(_Stop)
  {_Stop=false;
 digitalWrite((forvard?FRWD:REV),HIGH);
    forvard=!forvard;
  count=0;
  counter++;
    }
    else
    {
     digitalWrite(REV,LOW);
     digitalWrite(FRWD,LOW);
    _Stop=true;
    count=0;
    }
    }
   }
void loop() {
if (millis()-_timer>=50&&counter<15)
{_timer=millis();
  work();
  
}
if(counter>15&&!digitalRead(Start_Butt))
{counter=0;
_Stop=false;
forvard=false;
}
}

 

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019
int FRWD=12;
int REV=13;
int Start_Butt=11;
byte counter=0;
byte count=0;
bool forvard=true;
bool _Stop=false;
unsigned long _timer;
void setup() {
  Serial.begin(115200);
  pinMode(FRWD, OUTPUT); 
  pinMode(REV, OUTPUT); 
  pinMode(Start_Butt, INPUT_PULLUP); 
 }
void work()
{count++;
byte k;
k=(_Stop?2:40);
  if(count>=k) 
  {if(_Stop)
  {_Stop=false;
 digitalWrite((forvard?FRWD:REV),HIGH);
    forvard=!forvard;
  count=0;
  counter++;
    }
    else
    {
     digitalWrite(REV,LOW);
     digitalWrite(FRWD,LOW);
    _Stop=true;
    count=0;
    }
    }
   }
void loop() {
if (millis()-_timer>=500&&counter<15)
{_timer=millis();
  work();
  
}
if(counter>15&&!digitalRead(Start_Butt))
{counter=0;
_Stop=false;
forvard=false;
}
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
unsigned int _timer;

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Да бывает, хотя на данный момент работает:( К нам, сирым, ардуина снисходительна

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Интересно, это так оптимизатор сработал?

Исходное:

int FRWD = 12;
int REV = 13;
int Start_Butt = 11;
byte counter = 0;
byte count = 0;
bool forvard = true;
bool _Stop = false;
unsigned long _timer;

void setup() {
  Serial.begin(115200);
  pinMode(FRWD, OUTPUT);
  pinMode(REV, OUTPUT);
  pinMode(Start_Butt, INPUT_PULLUP);
}

void work() {
  count++;
  byte k;
  k = (_Stop ? 2 : 40);
  if (count >= k) {
    if (_Stop) {
      _Stop = false;
      digitalWrite((forvard ? FRWD : REV), HIGH);
      forvard = !forvard;
      count = 0;
      counter++;
    }
    else {
      digitalWrite(REV, LOW);
      digitalWrite(FRWD, LOW);
      _Stop = true;
      count = 0;
    }
  }
}

void loop() {
  if (millis() - _timer >= 500 && counter < 15) {
    _timer = millis();
    work();
  }
  if (counter > 15 && !digitalRead(Start_Butt)) {
    counter = 0;
    _Stop = false;
    forvard = false;
  }
}
Скетч использует 1832 байт (22%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 193 байт (18%) динамической памяти, оставляя 831 байт для локальных переменных. Максимум: 1024 байт.

"Подпиленное":

uint8_t FRWD = 12;
uint8_t REV = 13;
uint8_t Start_Butt = 11;
uint8_t counter = 0;
uint8_t count = 0;
bool forvard = true;
bool _Stop = false;
uint32_t _timer;

void setup() {
  Serial.begin(115200);
  pinMode(FRWD, OUTPUT);
  pinMode(REV, OUTPUT);
  pinMode(Start_Butt, INPUT_PULLUP);
}

void work() {
  count++;
  uint8_t k;
  k = (_Stop ? 2 : 40);
  if (count >= k) {
    if (_Stop) {
      _Stop = false;
      digitalWrite((forvard ? FRWD : REV), HIGH);
      forvard = !forvard;
      count = 0;
      counter++;
    }
    else {
      digitalWrite(REV, LOW);
      digitalWrite(FRWD, LOW);
      _Stop = true;
      count = 0;
    }
  }
}

void loop() {
  if (millis() - _timer >= 500 && counter < 15) {
    _timer = millis();
    work();
  }
  if (counter > 15 && !digitalRead(Start_Butt)) {
    counter = 0;
    _Stop = false;
    forvard = false;
  }
}
Скетч использует 1832 байт (22%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 193 байт (18%) динамической памяти, оставляя 831 байт для локальных переменных. Максимум: 1024 байт.

ЗЫ: В код не вникал, просто эксперимент.

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Это не оптимизатор это защита от дурака(ов) ;) А эти каракули работают стопудово даже не подпилинные на MEGA 2560 

Павел К.
Павел К. аватар
Offline
Зарегистрирован: 01.01.2021

Может и работают, весь цикл не крутил. Только первым зажигается светодиод на ноге 12 (да это и не важно), но делает он это через 20 сек после запуска. А в течении этих 20 - ти секунд, полная тишина.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Павел К. пишет:

МА в течении этих 20 - ти секунд, полная тишина.

Вам в #24 сказано как сделать, Вы не слушаете - дело Ваше.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Евгений Петрович, слишком просто для Вас, но можете свой комментарий оставить по поводу #55?

Мне интересно так ли это? Должна была быть разница в несколько байт.

Павел К.
Павел К. аватар
Offline
Зарегистрирован: 01.01.2021

Спасибо всем за помощь. Я уже что хотел, сделал (необходимый минимум). И получилось, как мне кажется. интереснее "семикопирования". Это была моя первая самоделка в этой области. По этому, теперь смотрю что здесь пишут, "из любви к искусству". И занялся самоделкой №2

Green
Offline
Зарегистрирован: 01.10.2015

Советую пользоваться препроцессором, что бы явно было видно что изменено.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

Советую пользоваться препроцессором, что бы явно было видно что изменено.

Если ответ мне, то я не умею ((. Что почитать?

Green
Offline
Зарегистрирован: 01.10.2015

Почитать гугль хотя бы.

#define NEW 1

#if NEW
...
#else
...
#endif

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

Почитать гугль хотя бы.

#define NEW 1

#if NEW
...
#else
...
#endif

 

Отлично! Я это немного знаю. Но как это мне поможет с вопросом в #55?

Green
Offline
Зарегистрирован: 01.10.2015

Блин. Ну видно же будет что подпилено. И самому видно, и для людей удобно.
Так я должен или глазами сравнивать, или грузить в редактор.
 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

BOOM пишет:

Мне интересно так ли это? Должна была быть разница в несколько байт.

Ну, если я ничего не пропустил, то разница там только в типах переменных в первых трёх строках. Всё? Другой нету? Если так, тот нет, не должно быть разницы, он их все подставил в места использования, предварительно преобразовав к нужному типу.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ЕвгенийП пишет:

BOOM пишет:

Мне интересно так ли это? Должна была быть разница в несколько байт.

Ну, если я ничего не пропустил, то разница там только в типах переменных в первых трёх строках. Всё? Другой нету? Если так, тот нет, не должно быть разницы, он их все подставил в места использования, предварительно преобразовав к нужному типу.

Да, ничего не пропустили. То есть оптимизатор. Спасибо. Но я (последнее время) стараюсь не "полагаться". Все равно было интересно понять. Спасибо Евгений Петрович. Дополнительные знания. Не всегда оптимизатор так делает.

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

Green пишет:

Почитать гугль хотя бы.

#define NEW 1


 

Это непрактично. 

#define VERSION_81_326_4768_bis

 

Green
Offline
Зарегистрирован: 01.10.2015

"Зато дёшево, надёжно и практично.")
 Serial.println(F(NAME " " VERSION " " __DATE__ " " __TIME__));
Давеча человек прислал 3 скетча, не помнит какой рабочий... И, вроде бы, грамотно написано, но никаких следов о номере версии.(