Здравствуйте всем в ардуине иде есть готовая функция MAP . Преобразование аналогового значения в 8-битное число (от 0 до 255) */ void setup() {} void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); } Теперь как можно самому написать такую функцию в атмел студио
Спасибо всем нашел может кому то пригодится long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
Кстати сказать, я давно в непонятках - что мешало авторам Wiring сделать вот так: Код (C++): template <typename T> T map(T x, T in_min, T in_max, T out_min, T out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } ? Тупая привязка к long - не алё, а так - можно юзать вообще любой тип, реализующий операции сложения, вычитания и умножения. Хотя нет, я знаю, что мешало: если бы они сделали так, то было бы куча вони, когда пытались бы применить вот так: Код (C++): long val = 123456; long result = map(val,0,100,0,10000); Очевидно, что вменяемый компилятор такую конструкцию без явного указания типов всех параметров - не пропустит, поэтому надо Код (C++): long val = 123456; long result = map(val,0l,100l,0l,10000l); что введёт в ступор авторов проЭктов из натыренных из этих ваших интернетов скечей
хм... а нафига вообще делать для этого отдельную функцию? Еще меня прикалывают авторы, у которых сначала map . а потом еще constrain на те же пределы - видимо, для надежности
Не, ну определённый смысл в наличии некоторого кол-ва функций - есть, стоит рассматривать это как некое API. Тот же digitalWrite - все юзают, это тоже API: на какой-нибудь плате, поддержка для которой реализована для Arduino IDE, digitalWrite может тупо по Serial отправлять строку "PIN=13,ON", например. Я понял, о чём намёк: такие вещи надо знать искаропки, что называется. Мой пост только о том, что - если уж делаешь, то сделай поуниверсальней, благо - средства языка позволяют Но, чтобы не повышать порог вхождения - сделали в лоб.