А он точно на чтение работает? Частенько экраны только на запись... Добавлено: Wed Jul 05, 2017 10:14 am |
Судя по ДШ на все контроллеры, которые китайцы лепят в данные модули - они работают на чтение в том числе. В моем случае это скорее всего SPFD5408. Добавлено: Wed Jul 05, 2017 11:05 pm |
Всем привет. Возникла такая маленькая проблемма. Есть массив с набором из 3-х измерений (А-B-С) Int и нужно сделать фильтрацию вида 1. if A>B>C {Case = 1;} 2. if A>C>B {Case = 2;} 3. if B>A>C {Case = 3;} 4. if B>C>A {Case = 4;} 5. if C>A>B {Case = 5;} 6. if C>B>A {Case = 6;} Вначале прописа код с 6 If с 2-мя AND (И) Т.е. тремя условиями if ( (A>B) and (A>C) and (B>C) ) {} - не работает. Далее убрал одно условие: if ((A>B) and (B>C)) {} - не работает. Заменил and на && - не работает. Далее добавил переход ГОТО, если условие выполнилось, то выходим из оставшихся проверок - не работает. Одним словом не знаю, где здесь косяк, но очень часто в место 1-го случая определяет 3,4 или 6. Вместо 2 - 4 и т.д. Т.е. берет не оба условия, а только последнее. ЗЫ: точнее работает, но определяет случай не верно (причем не всегда). Добавлено: Fri Jul 07, 2017 2:23 pm |
Я бы сначала нашел индекс максимального значения в массиве. А потом тупо через IF THEN. Mass[0..2] array of integer; Index: integer; {процедура поиска индекса максимального значения, индекс записывается в "Index"} IF Index= 0 THEN BEGIN IF Mass[2] > Mass[3] THEN Case:= 1; IF Mass[3] > Mass[2] THEN Case:= 2; END; IF Index= 1 THEN BEGIN IF Mass[1] > Mass[3] THEN Case:= 3; IF Mass[3] > Mass[1] THEN Case:= 4; END; Ну и т.д. (это типа delphi, в си я хуй знает) Добавлено: Fri Jul 07, 2017 2:50 pm |
Не проще дерево построить? Ттпа
Добавлено: Fri Jul 07, 2017 4:00 pm |
да дело в том, что код вида if ((A>B) and (B>C)) {} используется во многих других частях программы. И если он здесь не работает, то вопрос возможно программа не работает и в других местах как надо. У меня есть сложные проверки из 3-5 сложных условий - в одном if с И и ИЛИ и т.д. Ивани: дерево - попробую. Добавлено: Fri Jul 07, 2017 11:12 pm |
Язык программирования какой, если ардуина то типы сравниваемых переменных и тем более констант должны быть одинаковы. Добавлено: Fri Jul 07, 2017 11:21 pm |
CLON писал(а): да дело в том, что код вида if ((A>B) and (B>C)) {}
Не работает? Добавлено: Fri Jul 07, 2017 11:48 pm |
Ivani писал(а): Язык программирования какой, если ардуина то типы сравниваемых переменных и тем более констант должны быть одинаковы. Ivani Привет. Все одинаковы. Все Интегер Int. Да Контроллер Ардуиновский Нано в3.0. Ардуиновская среда. Behram: да вот я об этом и говорю. Что очень странно. CASE = 0; // CASE initial state of misatke estimation && = end // 1st CASE: Tr3 > Tr2 > Tr1 - IDEAL measurements: Tr3-? or Tr1+? if ( Trot3>Trot2 && Trot2>Trot1 ) { CASE = 1; goto CheckEnd; } // 2nd CASE: Tr3 > Tr1 > Tr2 - Mistake in Tr2+ or Tr1- if ( Trot3>Trot1 && Trot1>Trot2 ) { CASE = 2; goto CheckEnd; } // 3rd CASE: Tr2 > Tr3 > Tr1 - Mistake in Tr3+ or Tr2- if ( Trot2>Trot3 && Trot3>Trot1 ) { CASE = 3; goto CheckEnd; } // 4th CASE: Tr2 > Tr1 > Tr3 - Mistake in Tr3++ if ( Trot2>Trot1 && Trot1>Trot3 ) { CASE = 4; goto CheckEnd; } // 5th CASE: Tr1 > Tr2 > Tr3 - 2 x Mistakes!!! if ( Trot1>Trot2 && Trot2>Trot3 ) { CASE = 5; goto CheckEnd; } // 6th CASE: Tr1 > Tr3 > Tr2 - Mistake in Tr1-- if ( Trot1>Trot3 && Trot3>Trot2 ) { CASE = 6; goto CheckEnd; } CheckEnd: XXX; Trot1; Trot2; Trot3; CASE; 101; 04490; 04587; 04629; 003; 102; 04465; 04472; 04600; 001; 103; 04240; 04392; 04427; 003; 104; 03305; 03200; 03329; 006; 105; 03420; 03242; 03424; 006; 106; 03190; 02831; 03167; 002; 107; 02848; 03267; 03139; 003; 108; 03034; 02993; 03117; 002; 109; 04043; 04067; 04195; 001; 110; 03784; 03755; 03861; 002; 111; 02641; 02712; 02795; 001; 112; 02793; 02944; 02941; 003; Добавлено: Sat Jul 08, 2017 8:20 am |
Первая строка 101: Тр3 больше Тр2 и Тр2 больше Тр1 - должен быть 1 ый случай. Но нет дает 3ий! И т.д. Вторая строка 102: - ОК. Третья строка 103: - опять Тр3 больше Тр2 и Тр2 больше Тр1 - должен быть 1 ый случай. Но нет дает 3ий! Четвертая строка 104: должен быть 2-ой случай, а дает 6 ой. И т.д. Behram: да вот я об этом и говорю. Что очень странно. Пробовал условия разделять скобками и через И, как у тебя, не работает как надо. Потом посмотрел примеры в них без скобок и с && переписал код, но всеравно не работает как надо. Потом добавил переход ГОТО, но это тоже не помогло. Одним словом я не могу понять где косяк. Вроде бы все правильно, но эта часть алгоритма не работает (точнее работает с ошибками, которые я должен был в этой части уменьшить). ЗЫ: Это результаты физического процесса (периоды оборота), который происходит с торможением, поэтому при правильном замере периодов должно быть Тр3 больше Тр2, и Тр2 больше Тр1. Добавлено: Sat Jul 08, 2017 8:24 am |
Это if ((400 < test3) && (test3 < 600)) работает нормально 3 штуки Добавлено: Sat Jul 08, 2017 12:13 pm |
а это if ((ph_type > slph * 1000) && ((millis() - ph_millis) > (wph * 1000))) заработало только после float slph; float ph_type = 0; ph_type = round(1000 * ph_type / nm); Притом первое аналогичное изначально работало, 2 следующих с точно такими-же переменными не работали… Сообщения разделены потому, что в 1 сообщении сносит крышу форуму. Добавлено: Sat Jul 08, 2017 12:14 pm
|
Денис писал(а): Мужики, хелп. У кого есть LCD-модуль типа такого? Уже третий день бьюсь, не могу просто прочитать ID чипа. И вообще прочитать хоть содержимое какого-то регистра. Опишите кому не в лом пошаговый алгоритм, как это сделать. У меня какая-то херь получается. Даже поставил ненавистную Arduino IDE, чтобы проверить экран. Подошла библиотека для граф.контроллера SPFD5408, дисплей заработал. Как вручную (на си) прочитать ИД чипа - не догоню. Итак, прошло пять дней в попытках просто считать ID микры-драйвера дисплейного модуля от китайцев (facepalm). Можно подумать, что это брак. Но, как известно, плохому танцору яйца мешают, и потом - с ардуиновской библиотекой под контроллер SPFD5408 оно таки рисует картинки. Вчера уже хотел забить на него совсем, а сегодня от нефиг делать написал сканер вообще всех регистров дисплейного контроллера, от 0x0 до 0xFF, выводящий в порт все ненулевые считанные значения. Цель - посмотреть, считается ли хоть что-то, и будет ли цифра, похожая на ID популярных LCD-драйверов. Картинка кликабельна. И что же, блядь, мы тут видим?! По адресу 0xD3 пидорски закрался 0x9341, идем в инет - у контроллера ILI9341 ID чипа находится по адресу 0xD3. ID чипа в 0xD3, КАРЛ! Причем ID идет ТРЕТЬИМ и ЧЕТВЕРТЫМ байтами в этом регистре. Если сканить регистры только по двум байтам - получишь 0! Внимание вопрос: что курили разработчики??! Добавлено: Sat Jul 08, 2017 5:24 pm |
В ардуино работвют и такие конструкции:
А где найти расшифровку этого?
Нашел, это преобразование типов, в данном случае raw преобразуется, недавно искал - не было. Было float(x) и работало не всегда, в чем разница? Объясните пожалуйста нахуя "return" напихали в код?
Добавлено: Mon Jul 10, 2017 11:49 am |
У кого нибудь из форумчан есть опыт использования плат микроконтроллеров от PJRC: Teensy++2.0 (8 бит) или Teensy3.2 (32 бит) или других из их семейства? Каковы впечатления и в чем отличиие от Ардуиносвких? Добавлено: Fri Jul 14, 2017 10:56 am |
>Объясните пожалуйста нахуя "return" напихали в код? 1 функция без ретурна дает варнинг при компиляции. впринципе похуй, но как-то "не аккуратненько". я тоже леплю, когда окончательно код причесываю. чтобы окошко компиляции было чистое. 2 для данного кода не актуально, ибо он медленный шопиздец, но вобще выкинуть из функции по выполнении условия, не проверяя следующее - значит сэкономить процессорное время, которое бы потратилось на проверку второго, заведомо не выполняемого условия. 3 если оба условия могут выполниться, но нам нужно чтобы если выполнилось первое - второе пропустить в любом случае, тогда логичней ретурном прервать функцию, чтобы не проверять второе Добавлено: Sat Jul 15, 2017 2:57 pm |
Дошло, return там void loop рестартит.
Добавлено: Sat Jul 15, 2017 5:40 pm |
Николай писал(а): если оба условия могут выполниться, но нам нужно чтобы если выполнилось первое - второе пропустить в любом случае, тогда логичней ретурном прервать функцию, чтобы не проверять второе В этом случае логичнее else. Добавлено: Sat Jul 15, 2017 11:00 pm |
ну как сказать я просто по объему оптимизирую всегда код. а return вкомпилится в банальный ret тобишь в одну инструкцию а что там компилятор понапридумывает с конструкцией if.... else if .... хрензнает :D Добавлено: Sun Jul 16, 2017 6:58 pm |
Китайская ATmega128a - обязателен конденсатор на AREF при использовании внутреннего опорника для внутреннего АЦП. Добавлено: Wed Oct 04, 2017 12:08 pm |
Китайская -- в смысле, с али? Добавлено: Wed Oct 04, 2017 12:36 pm |
С ебея. Добавлено: Wed Oct 04, 2017 12:52 pm |
И что? В даташите про это написано. Добавлено: Wed Oct 04, 2017 12:59 pm |
Я заебался искать это, в инете доступные схемы на ней почти все без этой емкости. В даташите нашел только после того как поставил кондер и заработало, емкость его вообще нигде не описана. Добавлено: Wed Oct 04, 2017 5:37 pm |
http://www.atmel.com/Images/Atmel-2521-AVR-Hard...onNote_AVR042.pdf Добавлено: Wed Oct 04, 2017 6:48 pm |
Лицензионное соглашение (c)Flyback.org.ru Российское общество любителей высоких напряжений. Использование материалов с данного сайта и форума возможно только с разрешения администрации. |