Как в ардуино сделать мультивибратор

permpermskaya
Offline
Зарегистрирован: 08.11.2020

Доброго времени суток, работаю в фл прог, обнаружил такой прикол. Есть генератор, он работает как мультивибратор. Делаю его симметричным, отрабатывает ровно половину периода и вырубает сигнал на пине. 

Вот код самого мультивибратора, подозрение на последнюю строку.

bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
 
void setup()
{
pinMode(7, OUTPUT); 
digitalWrite(7, 0); 
}
void loop()
{
 
//Плата:1
if (!(0)) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 1 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
digitalWrite(7, _gen1O);
}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
 
permpermskaya
Offline
Зарегистрирован: 08.11.2020

  

sadman41
Offline
Зарегистрирован: 19.10.2016

FLProg к Ардуине имеет такое же отношение, как и мухоморы к здоровому питанию. Обратитесь на форум сообщества этого генератора бреда.

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

Обратитесь на https://flprog.ru/forum/

permpermskaya
Offline
Зарегистрирован: 08.11.2020

Увы, там тоже не всё так просто, мне удалось понять из переписки, это глюк millis.  Может просто поправить в коде и больше не заморачиваться? Мне она нравится по быстроте, но вот некоторые ее функции просто убивают.

apg_777
Offline
Зарегистрирован: 22.09.2020

Не повредит почитать "прерывания по таймеру".

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

Вы не поняли. Здесь очень не любят flprog и Ваше упорное желание навязать его обсуждение выглядит троллингом.

permpermskaya
Offline
Зарегистрирован: 08.11.2020

Спасибо

permpermskaya
Offline
Зарегистрирован: 08.11.2020

При преобразовании в иде - код вроде читаемый. У меня подозрение на последнюю строку.  Про то что не любят, это жаль, надо смотреть шире,   в паре случаев мне приходилось делать солянку из одной и другой проги.  

permpermskaya
Offline
Зарегистрирован: 08.11.2020

Спасибо всем, ушёл читать про прерывания.

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

permpermskaya пишет:

надо смотреть шире

Вы решили поучить нас? Весьма мило! Спасибо!

permpermskaya
Offline
Зарегистрирован: 08.11.2020

Нет, просто жизнь увы заставляет осваивать смежные специальности.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если "вроде читаемый", объясните что в нем происходит.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Это вот это читаемое ???

if (!(0)) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 1 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
digitalWrite(7, _gen1O);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

permpermskaya пишет:

Нет, просто жизнь увы заставляет осваивать смежные специальности.

работая санитаром в психбольнице, заодно осваиваешь роль пациента?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Мультивибратор - это просто. На си:

void loop(){
digitalWrite(rele, 1);
delay(vremia);
digitalWrite(rele, 0);
delay(vremia);
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Два транзистора четыре резистра и две ёмкости, паяльник. И не ипите тут моск.

а если вам охота штаны через голову одевать в особо извращенной форме, то не выставляйте свой позор на всеобщее обозрение.

Гриша
Offline
Зарегистрирован: 27.04.2014

inspiritus пишет:

Два транзистора четыре резистра и две ёмкости, паяльник. И не ипите тут моск.

а если вам охота штаны через голову одевать в особо извращенной форме, то не выставляйте свой позор на всеобщее обозрение.

Жестковато сказано, ТС вроде согласился, что на грабли наступил - так зачем его еще пинать? :)))) 

mykaida пишет:

Мультивибратор - это просто. На си:

void loop(){
digitalWrite(rele, 1);
delay(vremia);
digitalWrite(rele, 0);
delay(vremia);
}

таки и этот вариант получше будет

Гриша
Offline
Зарегистрирован: 27.04.2014

permpermskaya, на этой странице есть примеры, начните с изучения их и вообще всего содержания страницы... ну и учебники по С 

permpermskaya
Offline
Зарегистрирован: 08.11.2020

СПАСИБО всем, буду читать. Хотя можно обойтись и внешним генератором, но спасибо за знания.!!

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

mykaida пишет:

Мультивибратор - это просто. На си:

void loop(){
digitalWrite(rele, 1);
delay(vremia);
digitalWrite(rele, 0);
delay(vremia);
}

 

А почему не tone()?

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

andriano пишет:

А почему не tone()?

555 - наше фсё!

apg_777
Offline
Зарегистрирован: 22.09.2020

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

555 - наше фсё!

Эх, молодёж-ж-ж-ж! Наше фсё — дискретная электроника, лучше тёплая ламповая!

SLKH
Offline
Зарегистрирован: 17.08.2015

permpermskaya пишет:

Увы, там тоже не всё так просто, мне удалось понять из переписки, это глюк millis.  Может просто поправить в коде и больше не заморачиваться? Мне она нравится по быстроте, но вот некоторые ее функции просто убивают.

у миллис нет глюков. глюк не у миллис.

SLKH
Offline
Зарегистрирован: 17.08.2015

mykaida пишет:

Мультивибратор - это просто. На си:

void loop(){
digitalWrite(rele, 1);
delay(vremia);
digitalWrite(rele, 0);
delay(vremia);
}

 

tone(13, 500);

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

SLKH пишет:

tone(13, 500);

Мне уже доложили, что так можно :)

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

apg_777 пишет:
лучше тёплая ламповая!

https://www.youtube.com/watch?v=2H9StVnc6xc

Полюбуйтесь на моё решение для подавления дребезга кнопки.