Генератор со случайной частотой (прошу помощи)

svi
Offline
Зарегистрирован: 19.10.2017

Добрый день. Оговорюсь сразу, что я новичок и начал ковырятся в Ардуино ради собственного интереса и саморазвития.

Идея проста (покрайней мере так кажется).

Сделать генератор меандра со случайной частотой от 5 до 200 Гц и случайной длительностью от 1сек до 60сек например.

Если с генератором все просто, tone ();

ТО


int F;
int T;

void setup()
{

}
 
void loop()
{
  for (int a=0; a<0; a=a+1)    // создал цикл для того что бы  F и T присвоить рандомное значение 1 раз в одном цикле loop (или они и так присваиваются 1 раз? не пойму)
  {
  F=random(5,200);              // присвоил F значение от 5Гц до 200Гц
  T=random(1000,60000);  // присвоил T значение от 1000мс до 60000мс
  }
                                                //  на сколько я понял то в этом месте переменные  F и T  не низменны до повторного выполнения loop (проверял это через Serial.print ();)
  tone(11,F,T);                        // выдаем на 11pin меандр с частотой F и длительностью в T
}

с Randon частотой и временем я подвис  уже 3 день =D

 

Итог некакой, непонимаю почему loop недожидается выполнения команды tone а именно параметра длительности (переменой T)

 

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

tone не блокирующая функция

P.S. 5 герц не получите, только от 31 без танцев с бубном

svi
Offline
Зарегистрирован: 19.10.2017

А может быть tone поместить внутрь другого цикла который будет выполняться (время T) в одном циклк loop

была у меня такая мысле реализовать через millis, но что то тоже не вышло  не чего

создал цикл в котором сравнивал millis c start_millis + время T, походу алгоритм рабочий а только реализовать не могу в коде

svi
Offline
Зарегистрирован: 19.10.2017

Почуму 5 Гц не получиться? где можно почерпать информации по поводу этих основ? какие функции блокирующие и что они могут, из за этого непониания я не могу отследить порядок выполнения скетча

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

https://www.arduino.cc/en/Reference/Tone

http://arduino.ru/tutorials/BlinkWithoutDelay

Во втором примере тоже самое только вместо свветодиода tone()

svi
Offline
Зарегистрирован: 19.10.2017

Penni пишет:

https://www.arduino.cc/en/Reference/Tone

http://arduino.ru/tutorials/BlinkWithoutDelay

Во втором примере тоже самое только вместо свветодиода tone()

Спасибо большое!) приду с работы поробую дома и отпишусь.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013
void loop(){
byte F=random(32,200);              // присвоил F значение от 32Гц до 200Гц
unsigned int  T=random(1000,60000);  // присвоил T значение от 1000мс до 60000мс
tone(11,F);                        // выдаем на 11pin меандр с частотой F и длительностью в T
delay(T);
}