Обратная пропорциональность

treur
Offline
Зарегистрирован: 18.10.2015

Есть функция -

void input (input)  
{
 freq = 65535 / b;
	    if (millis() - previousMillis > freq) {
	      previousMillis = millis();
	      if (value == LOW)
	        value = HIGH;
	      else
	        value = LOW;
	      digitalWrite(3, value);
}

где input - число от 0 до 65535, надо моргать светодиодом обратно пропорционально данному числу, правильно ли я рассчитываю переменную freq ибо нет ни какой линейности при данном подсчете?

какбы должно быть как то так -

при input = 0 freq = 65535

при input = 1 freq = 65534

.........................................

при input = 65535 freq = 1

при input = 65535 freq = 0

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016
treur
Offline
Зарегистрирован: 18.10.2015

Я правильно понимаю, в данном случае - freq = map(b, 0, 65535, 65535, 0); ?

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

Простите, но вам надо не сюда, а на форум математиков . Обратная пропорциональность это не то что вы себе надумали.

http://www.for6cl.uznateshe.ru/obratno-proporcionalnaya-zavisimost/

 

period=1000/freq;  где period это величина в миллисек, а freq (частота) в Гц.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Я думаю,в данном случае, все проще

void input (unsigned int input)  
{
     freq = 65535 - input;
         if (millis() - previousMillis > freq) {
	      previousMillis = millis();
              value = !value;
	      digitalWrite(3, value);
         };
};

 

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

Ну да: обратная пропорциональность и линейность - вещи взаимоисключающие.