Ночной, помоги! Куда я ещё пойду в третьем часу ночи.Есть набор значений от ~1010 до ~490, всего 12. Промежутки между значениями изменяются от 70 (~940 после ~1010) до 30 (~520 перед ~490). Значения нужно сопоставить числам от 1 до 12. Как сделать без case и лесенки If? Не хочу так деревянно, наверняка есть более изящный способ.Могу ответить на вопросы про arduino
Бампать буду тухлятинкой из ЗП-тредов
и рандомными бабами из ВК
Нарисуй эти точки на графике, прикинь на какую функцию они похожи, подбери или аппроксимируй коэффициенты.
бамп скоростными пилюлями
>>149476180Так в коде надо сопоставить, лол
Вот это ещё посмотри http://www.wolframalpha-ru.com/2011/10/wolframalpha_18.html?m=1
бамп
Без ифов и кейсов наверное придется пердолить численные методы, забей.
>>149475931 (OP)Сортируешь - сопоставляешь.
>>149476454Видимо, зря решил не описывать подробности. Фича в том, что всех значений сразу у меня на руках нет, потому что каждое соответствует отдельной кнопке, и в программе появляется только пока кнопка нажата. Однако сама по себе идея здравая, ведь примерные значения я знаю, и можно текущее значение на входе сравнивать с имеющимися в массиве. Спасибо ха наводку, анон! Держи няшу 3д и 2д
зачем тебе ардуино?
>>149475931 (OP)>>149476604Нихуя непонятно чего ты сделать пытаешься.Объясняй нормально.
>>149475931 (OP)>~Это что значит?Примерно?Компьютеры не умеют с приблизительными значениями работать.
>>149476604Откуда эти значения берутся? Можешь промежутки в виде интервалов сделать 490-520, 521-525, ... и в цикле перебирать:int upL = 490for(int i = 0; i <12; i++) { upL += 30 + i; if(value <= upL) return i + 1;}Но без деталей все равно не ясно нихуя.
>>149477184upL сам уже рассчитывай как надо, можешь хоть массив с предрасчитанными значениями использовать.
>>149475931 (OP)а что ты делаешь.
>>149477247>массив с предрасчитанными значениями использоватьЯ так и сделал, в итоге>>149477077Есть аналоговый вход, есть 12 кнопок, каждой кнопке соответствует некоторый уровень напряжения. Считываю уровень напряжения, он выдаётся как число от 490 до 1023. Промежутки между значениями неодинаковые. Нужно сделать сопоставление каждого значения числу от 1 до 12. Сделал через сравнение с массивом с 12 приблизительными значениями.>>149476959За деревом.
побампаю ещё немношко и спатеньки
а когда кнопка нажата несколько раз подряд значение напряжения одинаковые?
>>149477496>Есть аналоговый вход, есть 12 кнопок, каждой кнопке соответствует некоторый уровень напряжения.1) Эм, но зачем? Я как бы не очень помогаю твоей проблеме, но ты непробувал цифрой кнопки обрабатывать?2) Если дело в системе кнопок, почему бы не сделать преобразователь в цифру хардварно?3) > Нужно сделать сопоставление каждого значения числу от 1 до 12. Сделал через сравнение с массивом с 12 приблизительными значениями.Допустим у тебя есть диапазон чисел от 1 до 1000. А тебе надо от 1 до 10.новое_число = взять_целую_часть(исходное_число\100)>Сделал через сравнение с массивом с 12 приблизительными значениями.Округляй лучше, и case делай.
>>149477496а может так получиться, что ты нажал на 10 и на подлете напряжения его считал и получилось 9?
>>149477718В идеале да, но гугли дребезг контактов>>1494777691)Меня не спрашивалиА вообще для 12 кнопок понадобилось бы либо 12 пинов(столько на Uno нет), либо мультиплексор(его нет у меня), либо какая-нибудь клава с последовательным интерфейсом(тоже нет)2)Так вот это я по сути и делаю3)Я же сказал - промежутки неравномерные. При делении на, например, на 50 последние 5-6 значений будут смешиваться друг с другом.Case, по-моему, очень громоздкий. Хотя может он и быстрее, тут не могу утверждать. Но, по-моему, это не так уж важно на 16 МГц.
>>149477865Может, но это вроде схемотехнически решается, завтра буду смотреть уже.
>>149477973>2)Так вот это я по сути и делаюТы делаешь софтварно.>3)Я же сказал - промежутки неравномерные. При делении на, например, на 50 последние 5-6 значений будут смешиваться друг с другом.Обрабатывай два промежутка отдельно.>1)Меня не спрашивалиТебе платят за эту работу?>>149477973>А вообще для 12 кнопок понадобилось бы либо 12 пинов(столько на Uno нет), либо мультиплексор(его нет у меня), либо какая-нибудь клава с последовательным интерфейсом(тоже нет)Лулвут?Делаешь на элементарной логике, на диодах можно, на шифраторе. Тебе всего в 4 бита кодировать надо то.
>>1494782412)Ок, а как тогда хардварно, по-твоему?3)Как?1)Ну почти, это часть диплома.Опуская идеологический аспект, озвучу два пункта: а)лаборатории с рассыпухой у меня под рукой нет б)клавиатура - не самоцель, поэтом изобретать велосипед смысла нет.
>>149478351>2)Ок, а как тогда хардварно, по-твоему?С индикаторами уровня сигнала никогда не сталкивался?>3)Как?Если один промежуток, то хуякИначе хуяк хяк.>а)лаборатории с рассыпухой у меня под рукой нет>б)клавиатура - не самоцель, поэтом изобретать велосипед смысла нет.Делаешь умный дом небось.
>>149478651>>а)лаборатории с рассыпухой у меня под рукой нетИ интернета нет.И находишься ты на южном полюсе.
>>1494786512)Теми, которые светодиодики в ряд? Сталкивался, но при чём тут они? Или не они?3)Ну так это, опять же, case(хотя про него не уверен) или if.Нихуя не угадал. Да и нахуй там клавиатура?
>>149478707А таки шо ви предлагаете? Вот я зашёл в интеr'нет и спr'ашиваю помощи людей. Таки шо вам не нr'авится?
>>149478747>2)Теми, которые светодиодики в ряд? Сталкивался, но при чём тут они? Или не они?Ну, из значения напряжения получишь цифру.>3)Ну так это, опять же, case(хотя про него не уверен) или if.А цикл у тебя 12 ифов делает.Чем тебе 1 не нравится?>>149478779>А таки шо ви предлагаете? Вот я зашёл в интеr'нет и спr'ашиваю помощи людей. Таки шо вам не нr'авится?Предлагаю купить нормальную клавиатуру.Ибо твоя клавиатура при демонстрации\защите даст сбой, и ты соснешь.
>>1494788582)Так я и так из значения напряжения получаю цифру. Не понимаю, что ты хочешь предложить.3)Он делает до совпадения, при совпадении выводит нужное число и выполняет break. Т.е. с точки зрения производительности - то же самое, просто кода меньше написал.Говорю же, железки выбирал не я, а научрук. А научрук хотел КРАСИВЕНЬКУЮ клавиатуру и шоб без разводки плат обойтись. На али под эти критерии попадала только такая аналоговая приблуда.
>>149479162>Т.е. с точки зрения производительности - то же самоеНет.С точки зрения производительности, у цикла в среднем 6 сравнений и 6 условных переходов.В предложенном мною способе - всего одно.>А научрук хотел КРАСИВЕНЬКУЮ клавиатуру и шоб без разводки плат обойтись. На али под эти критерии попадала только такая аналоговая приблуда.Он за тебя диплом делает?Сочувствую.>2)Так я и так из значения напряжения получаю цифру. Не понимаю, что ты хочешь предложить.Делать это в железе, а не программно.Но это похоже не твое.Зойчем тебе в дипломе вообще хрень в которой ты не шаришь?Имхо, в таких случаях просят кого-то со стороны помочь.
>>149479347>всего одноКак ты в один If запихнёшь сравнение с 12 значениями? >за тебя диплом делаетон за меня железки покупает, мне вообще похуй, какую клавиатуру приделывать>делать это в железе, а не программноЕсли ты мне тут два часа затираешь про аналогово-цифровое преобразование в обход микроконтроллеров, на голой логике, то тебе следует проследовать в 1983 год, там это вроде ещё актуально.
>>149476265Меж тем тот анон дело посоветовал. Не думай о графике, а думай о том, что между исходным значением и получаемым есть зависимость, которую можно выразить функцией. А график просто поможет тебе понять что это за функция и какие нужны в ней коэффициенты.
>>149479456>Как ты в один If запихнёшь сравнение с 12 значениями? Ты вообще походу понял процентов 10 из написанного.>он за меня железки покупает, мне вообще похуй, какую клавиатуру приделыватьОкей.>Если ты мне тут два часа затираешь про аналогово-цифровое преобразование в обход микроконтроллеров, на голой логике, то тебе следует проследовать в 1983 год, там это вроде ещё актуально. Я тебе тут много про что уже рассказал.И как аппаратно делать нормальную клавиатуру, и как программно в один иф обрабатывать. И про АЦП.Только бестолку походу все.Надеюсь твоя специальность не связанна с программирование и с радиоэлектроникой.
>>149479513Бестолку, чел не понимает математику.
>>149479586Ты аутист что ли?Если ты про тот кусок кода, то там всё равно if внутри цикла. Если >>149477184>int upL = 490>for(int i = 0; i <12; i++) {>upL += 30 + i;>if(value <= upL) return i + 1;>}это не твой кусок кода - покажи, где ты что-то нормально пояснил про if.Рассказал ты нихуя, набор слов какой-то. Надеюсь, твоя специальность связана с выебонами, потому что хорошо получаются у тебя только они.
>>149479765больше того, я прочитал кодВ нём пришлось бы искать какой-то коэффициент для i. Зачем вообще так мудрить? Всё равно, так или иначе, для значения 1023 цикл бы выполнился 12 раз. В чём разница с пикрилейтед?inb4 кококо ардуино
>>149479765>это не твой кусок кода - покажи, где ты что-то нормально пояснил про if.То есть "нормально пояснил" в твоем понимании, это предоставил работающий код?>Рассказал ты нихуя, набор слов какой-то. Надеюсь, твоя специальность связана с выебонами, потому что хорошо получаются у тебя только они.Мда, проговорился ты знатно.Да, выебонов у тебя выше крыши, а знаний оче мало. В РФ сейчас этому в вузах учат?>покажи, где ты что-то нормально пояснил про if.>>149477769>Допустим у тебя есть диапазон чисел от 1 до 1000. А тебе надо от 1 до 10.>новое_число = взять_целую_часть(исходное_число\100)>>149477973>3)Я же сказал - промежутки неравномерные. При делении на, например, на 50 последние 5-6 значений будут смешиваться друг с другом.>>149478241>Обрабатывай два промежутка отдельно.>>149478351>3)Как?>>149478651>Если один промежуток, то хуяк>Иначе хуяк хяк.
>>149479962>предоставил работающий кодНе вижу тут чего-то особенного, лучший способ объяснить алгоритм, по-моему.Т.е. необходимость проверять несколько раз, к какому промежутку относится текущее значение, по-твоему, удовлетворяется 1 if? Покажи, потому что либо ты пиздишь, либо ты здорово дополнишь мои знания.>этому в вузах учатНе учат делать клавиатуры на дискретной логике, и за это им спасибо. Btw, учили приделывать матричную цифровую, но я уже написал, почему используется то, что используется.
>>149480106>Т.е. необходимость проверять несколько раз, к какому промежутку относится текущее значение, по-твоему, удовлетворяется 1 if?Необходимо проверить один раз, к какому промежутку\диапазону принадлежит значение.К тому в котором расстояние между значениями 70, или к тому, в котором расстояние 30.
>Промежутки между значениями изменяются от 70 (~940 после ~1010) до 30 (~520 перед ~490)Очевидная парабола. Задаешь квадратную функцию @ округляешь корень.
>>149480240Так промежутков несколько. Как проверку принадлежности к одному из интервалов сделать понятно, как её сделать за один if без цикла - я не представляю.>>149480243Ок, интересно, я попробую. Спасибо!