оптимизация симуляции набора на матричной клаве

hackerman
Offline
Зарегистрирован: 15.12.2019

принцип думаю не сложный. берем 12 оптопар размещаем сеткой входы-земли вместе плюсы на ардуину. выходы-копируем сетку реальной клавы. выходы расставляем как контыкы кнопок в сетке. получаем копию сетки и 7 контактов соедняем их с реальной клавой. это отдельный гальванически развязаный блок переходник с ардуины на матричную клаву. и вот этим говнокодом набираем 5 цифр на клаве. набор 5 цифр 255 строк. надо это исправить. мозги есть но программирования самостоятельного изучения ъорошо если 100 часов чистого.

 

unsigned long currentpass = 00000; //текущая попытка. можно делать подбор не с начала

int inputdelay = 100; //задержка нажатий кнопок

byte pushdelay = 50; //время нажатия кнопки

unsigned int errdelay = 10000; //время задержки после 3 попыток и вылета из меню

byte attempts = 3; //число попыток набора. при старте 3 для первого входа в меню.
boolean success = false;

byte button1pin = 2; //перепиновка
byte button2pin = 3;
byte button3pin = 4;
byte button4pin = 5;
byte button5pin = 6;
byte button6pin = 7;
byte button7pin = 8;
byte button8pin = 9;
byte button9pin = 10;
byte button0pin = 11;
byte buttonBpin = 12;
byte op = 13;

byte num1 = 0; //хранение 5 значного числа отдельными цифрами
byte num2 = 0;
byte num3 = 0;
byte num4 = 0;
byte num5 = 0;


void setup() {

  Serial.begin(9600);

  pinMode(button1pin, OUTPUT);
  pinMode(button2pin, OUTPUT);
  pinMode(button3pin, OUTPUT);
  pinMode(button4pin, OUTPUT);
  pinMode(button5pin, OUTPUT);
  pinMode(button6pin, OUTPUT);
  pinMode(button7pin, OUTPUT);
  pinMode(button8pin, OUTPUT);
  pinMode(button9pin, OUTPUT);
  pinMode(button0pin, OUTPUT);
  pinMode(buttonBpin, OUTPUT);
  pinMode(op, INPUT_PULLUP);

}

void loop() {

  if (success == true) {
    Serial.println("END");
    Serial.println(currentpass);
    delay(100000);
  }
  else {
    for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); //код следующей попытки
    Serial.println(currentpass);

    byte num1 = (currentpass / 10000);
    byte num2 = (currentpass / 1000 % 10); //разложение 5 значного числа на цифры. костыль?
    byte num3 = (currentpass / 100 % 10);
    byte num4 = (currentpass / 10 % 10);
    byte num5 = (currentpass % 10 % 10);

    if (attempts == 3) {
      delay(errdelay); //если попыток 3 то ждем

      //write 12321B (и входим в настройки еще раз)
      digitalWrite(button1pin, HIGH);
      delay(pushdelay);
      digitalWrite(button1pin, LOW);
      delay(inputdelay);

      digitalWrite(button2pin, HIGH);
      delay(pushdelay);
      digitalWrite(button2pin, LOW);
      delay(inputdelay);

      digitalWrite(button3pin, HIGH);
      delay(pushdelay);
      digitalWrite(button3pin, LOW);
      delay(inputdelay);

      digitalWrite(button4pin, HIGH);
      delay(pushdelay);
      digitalWrite(button4pin, LOW);
      delay(inputdelay);

      digitalWrite(buttonBpin, HIGH);
      delay(pushdelay);
      digitalWrite(buttonBpin, LOW);
      delay(inputdelay);

      byte attempts = 0; //сбрасываем попытки
    }
    else {

      /*ахтунг!!! очень много говнокода!!!
        следующие 50 строк нужны для дергания пином ардуины соответствующему числу нум1. 50!!!
        а еще есть нум 2 3 4 5. 255 строк!!! что  делаю не так??
        это всего лишь набор 5 цифр методом дергания 5 пинов
      */
      switch (num1) {
        case 1:
          digitalWrite(button1pin, HIGH);
          delay(pushdelay);
          digitalWrite(button1pin, LOW);
          delay(inputdelay);
          break;
        case 2:
          digitalWrite(button2pin, HIGH);
          delay(pushdelay);
          digitalWrite(button2pin, LOW);
          delay(inputdelay);
        case 3:
          digitalWrite(button3pin, HIGH);
          delay(pushdelay);
          digitalWrite(button3pin, LOW);
          delay(inputdelay);
        case 4:
          digitalWrite(button4pin, HIGH);
          delay(pushdelay);
          digitalWrite(button4pin, LOW);
          delay(inputdelay);
        case 5:
          digitalWrite(button5pin, HIGH);
          delay(pushdelay);
          digitalWrite(button5pin, LOW);
          delay(inputdelay);
        case 6:
          digitalWrite(button6pin, HIGH);
          delay(pushdelay);
          digitalWrite(button6pin, LOW);
          delay(inputdelay);
        case 7:
          digitalWrite(button7pin, HIGH);
          delay(pushdelay);
          digitalWrite(button7pin, LOW);
          delay(inputdelay);
        case 8:
          digitalWrite(button8pin, HIGH);
          delay(pushdelay);
          digitalWrite(button8pin, LOW);
          delay(inputdelay);
        case 9:
          digitalWrite(button9pin, HIGH);
          delay(pushdelay);
          digitalWrite(button9pin, LOW);
          delay(inputdelay);
        case 0:
          digitalWrite(button0pin, HIGH);
          delay(pushdelay);
          digitalWrite(button0pin, LOW);
          delay(inputdelay);
      }

      switch (num2) {
        case 1:
          digitalWrite(button1pin, HIGH);
          delay(pushdelay);
          digitalWrite(button1pin, LOW);
          delay(inputdelay);
          break;
        case 2:
          digitalWrite(button2pin, HIGH);
          delay(pushdelay);
          digitalWrite(button2pin, LOW);
          delay(inputdelay);
        case 3:
          digitalWrite(button3pin, HIGH);
          delay(pushdelay);
          digitalWrite(button3pin, LOW);
          delay(inputdelay);
        case 4:
          digitalWrite(button4pin, HIGH);
          delay(pushdelay);
          digitalWrite(button4pin, LOW);
          delay(inputdelay);
        case 5:
          digitalWrite(button5pin, HIGH);
          delay(pushdelay);
          digitalWrite(button5pin, LOW);
          delay(inputdelay);
        case 6:
          digitalWrite(button6pin, HIGH);
          delay(pushdelay);
          digitalWrite(button6pin, LOW);
          delay(inputdelay);
        case 7:
          digitalWrite(button7pin, HIGH);
          delay(pushdelay);
          digitalWrite(button7pin, LOW);
          delay(inputdelay);
        case 8:
          digitalWrite(button8pin, HIGH);
          delay(pushdelay);
          digitalWrite(button8pin, LOW);
          delay(inputdelay);
        case 9:
          digitalWrite(button9pin, HIGH);
          delay(pushdelay);
          digitalWrite(button9pin, LOW);
          delay(inputdelay);
        case 0:
          digitalWrite(button0pin, HIGH);
          delay(pushdelay);
          digitalWrite(button0pin, LOW);
          delay(inputdelay);
      }

      switch (num3) {
        case 1:
          digitalWrite(button1pin, HIGH);
          delay(pushdelay);
          digitalWrite(button1pin, LOW);
          delay(inputdelay);
          break;
        case 2:
          digitalWrite(button2pin, HIGH);
          delay(pushdelay);
          digitalWrite(button2pin, LOW);
          delay(inputdelay);
        case 3:
          digitalWrite(button3pin, HIGH);
          delay(pushdelay);
          digitalWrite(button3pin, LOW);
          delay(inputdelay);
        case 4:
          digitalWrite(button4pin, HIGH);
          delay(pushdelay);
          digitalWrite(button4pin, LOW);
          delay(inputdelay);
        case 5:
          digitalWrite(button5pin, HIGH);
          delay(pushdelay);
          digitalWrite(button5pin, LOW);
          delay(inputdelay);
        case 6:
          digitalWrite(button6pin, HIGH);
          delay(pushdelay);
          digitalWrite(button6pin, LOW);
          delay(inputdelay);
        case 7:
          digitalWrite(button7pin, HIGH);
          delay(pushdelay);
          digitalWrite(button7pin, LOW);
          delay(inputdelay);
        case 8:
          digitalWrite(button8pin, HIGH);
          delay(pushdelay);
          digitalWrite(button8pin, LOW);
          delay(inputdelay);
        case 9:
          digitalWrite(button9pin, HIGH);
          delay(pushdelay);
          digitalWrite(button9pin, LOW);
          delay(inputdelay);
        case 0:
          digitalWrite(button0pin, HIGH);
          delay(pushdelay);
          digitalWrite(button0pin, LOW);
          delay(inputdelay);
      }

      switch (num4) {
        case 1:
          digitalWrite(button1pin, HIGH);
          delay(pushdelay);
          digitalWrite(button1pin, LOW);
          delay(inputdelay);
          break;
        case 2:
          digitalWrite(button2pin, HIGH);
          delay(pushdelay);
          digitalWrite(button2pin, LOW);
          delay(inputdelay);
        case 3:
          digitalWrite(button3pin, HIGH);
          delay(pushdelay);
          digitalWrite(button3pin, LOW);
          delay(inputdelay);
        case 4:
          digitalWrite(button4pin, HIGH);
          delay(pushdelay);
          digitalWrite(button4pin, LOW);
          delay(inputdelay);
        case 5:
          digitalWrite(button5pin, HIGH);
          delay(pushdelay);
          digitalWrite(button5pin, LOW);
          delay(inputdelay);
        case 6:
          digitalWrite(button6pin, HIGH);
          delay(pushdelay);
          digitalWrite(button6pin, LOW);
          delay(inputdelay);
        case 7:
          digitalWrite(button7pin, HIGH);
          delay(pushdelay);
          digitalWrite(button7pin, LOW);
          delay(inputdelay);
        case 8:
          digitalWrite(button8pin, HIGH);
          delay(pushdelay);
          digitalWrite(button8pin, LOW);
          delay(inputdelay);
        case 9:
          digitalWrite(button9pin, HIGH);
          delay(pushdelay);
          digitalWrite(button9pin, LOW);
          delay(inputdelay);
        case 0:
          digitalWrite(button0pin, HIGH);
          delay(pushdelay);
          digitalWrite(button0pin, LOW);
          delay(inputdelay);
      }

      switch (num5) {
        case 1:
          digitalWrite(button1pin, HIGH);
          delay(pushdelay);
          digitalWrite(button1pin, LOW);
          delay(inputdelay);
          break;
        case 2:
          digitalWrite(button2pin, HIGH);
          delay(pushdelay);
          digitalWrite(button2pin, LOW);
          delay(inputdelay);
        case 3:
          digitalWrite(button3pin, HIGH);
          delay(pushdelay);
          digitalWrite(button3pin, LOW);
          delay(inputdelay);
        case 4:
          digitalWrite(button4pin, HIGH);
          delay(pushdelay);
          digitalWrite(button4pin, LOW);
          delay(inputdelay);
        case 5:
          digitalWrite(button5pin, HIGH);
          delay(pushdelay);
          digitalWrite(button5pin, LOW);
          delay(inputdelay);
        case 6:
          digitalWrite(button6pin, HIGH);
          delay(pushdelay);
          digitalWrite(button6pin, LOW);
          delay(inputdelay);
        case 7:
          digitalWrite(button7pin, HIGH);
          delay(pushdelay);
          digitalWrite(button7pin, LOW);
          delay(inputdelay);
        case 8:
          digitalWrite(button8pin, HIGH);
          delay(pushdelay);
          digitalWrite(button8pin, LOW);
          delay(inputdelay);
        case 9:
          digitalWrite(button9pin, HIGH);
          delay(pushdelay);
          digitalWrite(button9pin, LOW);
          delay(inputdelay);
        case 0:
          digitalWrite(button0pin, HIGH);
          delay(pushdelay);
          digitalWrite(button0pin, LOW);
          delay(inputdelay);
      }

      digitalWrite(buttonBpin, HIGH); //после набора 5 цифр этим громадным куском кода жмем наконец то в.
      delay(pushdelay);
      digitalWrite(buttonBpin, LOW);
      delay(inputdelay);

      attempts = attempts++;

      if (digitalRead(op) == HIGH) { //maybe low
        boolean success = true;
      }
    }
  }
}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

hackerman пишет:

надо это исправить

Не понял, что "это", но если надо, так исправляй.

От нас-то чего хочешь? Благословения?

hackerman
Offline
Зарегистрирован: 15.12.2019

а это приблуда для подбора пароля к одной аппаратной херне. а мне надо совет как уменьшить этот говнокод в 4-10 раз

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
Послал Чапаев Петьку в Японии, изучать каратэ. Через год Петька вернулся, Чапаев построил всю дивизию, чтобы тот показал, чему научился. Петька просит принести ему лом. Берет лом, размахивается им и бьет Чапаева. Тот кричит, матерится, а Петька говорит:
– Вот, примерно так они рукой бьют!

Что бы компактнее и лучше написать код вам не один месяц учится надо,не то что писать, но и читать. А без умения чтения оптимизированного кода даже подареный код бесполезен. Пользуйтесь говнокодом. По меньшей мере вы его умеете читать.

sadman41
Offline
Зарегистрирован: 19.10.2016

Уменьшить с какой целью?

hackerman
Offline
Зарегистрирован: 15.12.2019

верно. но я стремлюсь к лучшему. машинное мышление подтянул четкую структуру устного алгоритма в виде тз со всеми тонкостями и исключениями могу написать но вот реализовать красиво не могу. могу только вот такую портянку накатать от руки самостоятельно оно работает но мне даже смотреть на это неприятно.

помню стояла задача сделать похожий скрипт для подбора пароля от шлакбаума. 12 бит 4096 комбинаций передача с определенными таймингами. я написал портянку в которой сделал 4096 одинаковых блоков с разными значениями. при компиляции получилось 12 000 000 машинных слов. 12 метров говнокода ни в какую ардуину не влезло потому покрамсал скрипт на 2 части взял 2 есп8266 припаял 8мб памяти и залил две части на 2 железки.

потом один хороший человек подсказал способ избавиться от 4096 блоков той функцией которой я увеличиваю currentpass после чего весь код уместился в 12000 машинных слов и записался в атмегу 168.

другой хороший человек подсказал разложение числа на биты функцией bitread и портянка из 48 строк и 12 ячеек превратилась в это

for (int i = 12; i > 0; i--) {
                boolean bit_code = bitRead(send_code, i - 1);

итог: я понимаю как это работает могу мысленно прогнать весь цикл передачи одного кода что занимает у меня примерно 10 минут а весь скрипт уместился в 2200 машинных слов при компиляции ардуиновским клиентом.

я по даташиту на атмел делал блинк альтернативным способом хотя тоже с компиляцией родным клиентом и утрамбовал его меньше чем в 200 машинных слов против 1050 на ардуине и потребление оперативки сократил с 9 слов до 0. скорость выполнения увеличилась в 6 раз. а на ассемблере можно вообще за 4 такта блинк выполнить.

hackerman
Offline
Зарегистрирован: 15.12.2019

для начала понять что в этой портянке жрет оперативку и флешь. попытаться сократить блоки нум1-нум5 с 255 до 50 строк чтобы это было визуально меньше один код не дублировался 5 раз и проще в одном месте редактировался и как ближайшая цель упихать в 2047 полных машинных слов.

sadman41
Offline
Зарегистрирован: 19.10.2016

Столько умных слов написали, что я сразу представил себе специалиста, который знает 20 языков на уровне выше университетского.

Про массивы и функции добрые люди ещё не подсказывали?

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

hackerman пишет:

для начала понять что в этой портянке жрет оперативку и флешь. 

Для продолжения следует понять, что написание программы жрет личное время пишущего программу.Причем большую часть времени уходит на понимание как правильнее надо делать этот проект, а так же написание сопуствующих библиотек. 

hackerman
Offline
Зарегистрирован: 15.12.2019

Ещё нет. Вы желаете стать первым? Буду признателен

Эта портянк написана самостоятельно работает и помещается в атмегу 328/168? Прекрасно. Для меня это уже огромное достижение. Впрочем я смог упихать это в атмегу 48 даже

hackerman
Offline
Зарегистрирован: 15.12.2019

qwone пишет:

hackerman пишет:

для начала понять что в этой портянке жрет оперативку и флешь. 

Для продолжения следует понять, что написание программы жрет личное время пишущего программу.Причем большую часть времени уходит на понимание как правильнее надо делать этот проект, а так же написание сопуствующих библиотек. 

при общей стоимости устройства меньше 200р можно просто взять атмегу 48 зв 25р вместо 328 за 75 и собирать. конечное устройство вообще будет на 328 потому что она есть. думается мне в 128 оперативки и 2048 флеши мы это все равно не упихаем даже не задумываясь о цели экономии на камне.

sadman41
Offline
Зарегистрирован: 19.10.2016

При общей стоимости единократно изготавливаемого устройства в 200р никакая оптимизация данного произведения искусства не окупится.

hackerman
Offline
Зарегистрирован: 15.12.2019

нетрудно догадаться что в программировании я полный ноль. умения нельзя выразить отрицательным числом а оно будет если вспомнить сколько аппаратных костылей я делал чтобы не изучать программные кишки. язык высокого уровня я изучаю всего 120 часов. итог: смог написать портянку которая работает влезает с запасом в любую ардуину и укладывается в нулевые требования по скорости работы.

но зато я разбираюсь в смежных областях. скуд слаботочка большинства видов или бытовая электрика... перепайка процессоров по трафарету оперативки программный ремонт расслоение бутербродов стирание локбитов на пиках методом напилинга...

короче яжпрограммист-полная противоположность программисту. помню изобретал аппаратный костыль из 6000 радиодеталей чтобы не писать 10-15 строк кода. с чтением и пониманием ардуиновского кода не содержащего библиотек никаких проблем но вот с написанием... вешалка. самое сложное это ковырял внутренности библиотеки в блокноте для работы с проприетарной железкой. нашел ошибку исправил

hackerman
Offline
Зарегистрирован: 15.12.2019

да оно не для экономии. ужать настолько чтобы влезло в камень меньше 48 атмеги все равно не сможем. а вот взять холтек за 2.5 рубля содержащий 2/16 памяти почти как 328 мега это можно. тут скорее спортивный интерес и желание сделать не через жопу. все равно работать будет на 328 меге

b707
Offline
Зарегистрирован: 26.05.2017

hackerman пишет:

да оно не для экономии. ужать настолько чтобы влезло в камень меньше 48 атмеги все равно не сможем

не совсем понял, что тут нужно делать, но если просто перебирать числа на клаве - по обьему кода тут справится и тинька13, жаль что у нее столько лапок (выходов) нет...

sadman41
Offline
Зарегистрирован: 19.10.2016

Так-то спортивный интерес - это когда сам бегаешь-тренируешься, а не других просишь побегать за тебя.

Того, что я посоветовал, хватит на оптимизацию.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
Так-то спортивный интерес - это когда сам бегаешь-тренируешься, а не других просишь побегать за тебя..

да где уж тут :) Мне кажется, что идея скопировать блок кода 4096 раз - не придет в голову даже самому галимому новичку.  И ведь каким неленивым надо быть - ведь надо не просто скопировать, а еще в каждом блоке свое число поставить :)  За то время пока это делаешь - наверно можно было половину учебника по Си проштудировать. На какие только жертвы не идут люди, лишь бы не учиться...

По-моему тут без шансов. Все, что ТС применяет в коде - ему кто-то дал готовое. Сам ТС после 100 часов занятий программированием не дошел даже до циклов. Оператор for() ему тоже кто-то готовый подсказал - он его просто копипастит из программы в программу и называет "той функцией которой я увеличиваю currentpass"

hackerman
Offline
Зарегистрирован: 15.12.2019

ну когда копировал 4096 раз (благо в 4 стадии автоматизировал этот процесс) у меня была срочная задача не было интернета но было несколько есп и прочих железок и был в условиях мастерской хороший фен и куча доноров 25й серии флеши большого обьема одна от биоса вторая от роутера. я знал что делаю хрень но надо было чтобы это заработало до утра. я не ленивый это точно. список действий был такой. на инфракрасном столе распаять крышку есп снять память выкинуть взять с донора прошить бин программатором запаять сделать понижайку 3.3 из драйвера дисплея... сбегать 3 километра вскрыть шлакбаум вытащить кишки проводить отладку с реальным контролером до утра. остается в 5 утра сбегать воткнуть кишки обратно разобраться как подключать нарастить провода (изначально возвращать не планировалось) и пойти наконец спать. задача выполнена. и пофиг что имеем 2 есп8266 управляемые третьей /facepalm главное что к утру работает. про себя могу сказать не в меру усердный но очень тупой в плане программирования. чего стоит один костыль из 6000 элементов "процессор собственной разработки" программируемый перемычками...

интересную фичу с увеличением на единицу передрал цельной строкой остальной говнокод рукописный синтаксис из примеров. почитал вчера как это работает нашел логический косяк. при достижении заданного верха сбрасывается и начинается сначала. надо думать какой костыль ограничитель воткнуть. не особо понимаю как это работает но хоть вспомнил про это и не делал 100 000 одинаковых блоков=)

один блок примерно 2000 слов занимает никаких есп не хватит=)

во всем коде нравится строчка for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); а все остальное говно потому что сам накидал. смотреть противно. но интересно как можно было улучшить это. для начала не копировать блок нум 5 раз но как увеличивать название переменной я не знаю это имя а не значение. ++ естественно работать не будет. второе это избавиться от switch-case. это уже лучше чем if-else if но недостаточно хотя разница в пожирании машинных ресурсов думаю небольшая. время выполнения одинаковое почти.

sadman41
Offline
Зарегистрирован: 19.10.2016

А мне эта строчка не нравится, например.

Вот задача минимум: написать функцию "нажатия" определенной кнопки с аргументом "цифра" - передали в функцию цифру 4, эмулируется нажатие кнопки "4".

Пока делать это не начнёте, все ваши многотомные описания приключений навряд ли кого-то расстрогают.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

hackerman пишет:

нетрудно догадаться что в программировании я полный ноль. 

ок. теперь нас на этом форуме - два.

так и не понял, что за нах у тебя проблема - тебе нужно в политику идти с таким талантом говорить много и непоянтно, поэтому - вот тебе пример калькулятора на матрице: там и числа в цифры преобразуются и всё такоэ. https://github.com/Klapautsiy/Ti-Calculator

hackerman
Offline
Зарегистрирован: 15.12.2019

к текущему моменту имеем 5 переменных нум с цифрами. метод деления числа на цифры устраивает выполняется аппаратно память не жрет. как задать соответствие пина цифре в переменной? в голову приходит мысль вместо byte button1pin = 2; итд ниже воткнуть массив 2 на 11 в одну строку вырианты переменной 1234567890 в другой соответствие пина. если массив может начинаться с 0 будет 1 строка и вызов по порядковому номеру в массиве нужного пина. так думаю избавиться от switch case.  это хорошая мысль? или есть методы эффективнее массива?

sadman41
Offline
Зарегистрирован: 19.10.2016

Вот и начинайте изучать: могут ли массивы начинаться с 0.

Не надо форум использовать как справочник по элементарным вещам.

b707
Offline
Зарегистрирован: 26.05.2017

hackerman пишет:

воткнуть массив 2 на 11 в одну строку вырианты переменной 1234567890 в другой соответствие пина. если массив может начинаться с 0 будет 1 строка и вызов по порядковому номеру в массиве нужного пина. так думаю избавиться от switch case

а если "варианты переменной" расположить в массиве не "1234567890", а "0123456789" - то можно будет обойтись одномерным массивом

Цитата:
это хорошая мысль? или есть методы эффективнее массива?

"эффективнее" тут и не нужно. Пользуясь только этим подходом, уже можно сократить ваш код в 10 раз как минимум

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
const byte pins[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
uint16_t inputdelay = 100; //задержка нажатий кнопок
void press(byte p) {
  Serial.print(p);
  digitalWrite(pins[p], HIGH);
  delay(100);
  digitalWrite(pins[p], LOW);
  delay(50);
}
void setup() {
  Serial.begin(9600);
  for (uint8_t i = 0; i < 10; i++)pinMode(pins[10], OUTPUT);
  for (uint8_t i = 0; i < 999; i++) {
    Serial.println();
    press(i / 100);
    press((i / 10) % 10);
    press(i % 10);
  }
  Serial.println("-END-");}

void loop() {
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Кстати, вот деление и вычисление остатка - самые неэффективные операции во всей этой истории.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

sadman41 пишет:
Кстати, вот деление и вычисление остатка - самые неэффективные операции во всей этой истории.

остатки эффективности сдать под расписку на общественный склад - пусть детские дома и престарелых пользуют ресурсы вашего контроллера.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

прошу переводчика с русского на человеческий - шо оно хочет?

sadman41
Offline
Зарегистрирован: 19.10.2016

Хочет таки сделать себе красиво чужими руками.

hackerman
Offline
Зарегистрирован: 15.12.2019

к текущему моменту я сам допер до массива и применил. позже увидел сообщение qwone. буду анализировать. текущая версия уменьшилась с 400 строк до 140 читабельность заметно улучшилась однако потребление флеши увеличилось на полных 40 слов. кто нибудь обьяснит почему оптимизация не удалась?

unsigned long currentpass = 00000; //текущая попытка. можно делать подбор не с начала

int inputdelay = 100; //задержка нажатий кнопок

byte pushdelay = 50; //время нажатия кнопки

unsigned int errdelay = 10000; //время задержки после 3 попыток и вылета из меню

byte attempts = 3; //число попыток набора. при старте 3 для первого входа в меню.
boolean success = false;

int pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11,}; //botones con números 0 1 2 3 4 5 6 7 8 9

byte buttonBpin = 12;
byte op = 13;

byte num1 = 0; //хранение 5 значного числа отдельными цифрами
byte num2 = 0;
byte num3 = 0;
byte num4 = 0;
byte num5 = 0;


void setup() {

  Serial.begin(9600);

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(buttonBpin, OUTPUT);
  pinMode(op, INPUT_PULLUP);

}

void loop() {

  if (success == true) {
    Serial.println("END");
    Serial.println(currentpass);
    delay(100000);
  }
  else {
    for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); //код следующей попытки
    Serial.println(currentpass);

    byte num1 = (currentpass / 10000);
    byte num2 = (currentpass / 1000 % 10); //разложение 5 значного числа на цифры. костыль?
    byte num3 = (currentpass / 100 % 10);
    byte num4 = (currentpass / 10 % 10);
    byte num5 = (currentpass % 10 % 10);

    if (attempts == 3) {
      delay(errdelay); //если попыток 3 то ждем

      //write 12321B (и входим в настройки еще раз)
      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[3], HIGH);
      delay(pushdelay);
      digitalWrite(pins[3], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(buttonBpin, HIGH);
      delay(pushdelay);
      digitalWrite(buttonBpin, LOW);
      delay(inputdelay);

      byte attempts = 0; //сбрасываем попытки
    }
    else {
      

      digitalWrite(pins[num1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num1], LOW);
      delay(inputdelay);

      digitalWrite(pins[num2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num2], LOW);
      delay(inputdelay);

      digitalWrite(pins[num3], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num3], LOW);
      delay(inputdelay);

      digitalWrite(pins[num4], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num4], LOW);
      delay(inputdelay);

      digitalWrite(pins[num5], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num5], LOW);
      delay(inputdelay);


      digitalWrite(buttonBpin, HIGH); //после набора 5 цифр этим громадным куском кода жмем наконец то в.
      delay(pushdelay);
      digitalWrite(buttonBpin, LOW);
      delay(inputdelay);

      attempts = attempts++;

      if (digitalRead(op) == HIGH) { //maybe low
        boolean success = true;
      }
    }
  }
}

 

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

sadman41 пишет:

Хочет таки сделать себе красиво чужими руками.


дык! в моём доме на первом этаже есть салон красоты - пусть обратится, я ему скидку организую.

эй! потерпевший, вам скинуть телепон Эмануели? - она вам сделает красиво ногами.

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

hackerman пишет:
я сам допер до массива и применил.

...теперь нас два.

а, ещё я придумал иголку с ушком впереди и рецепт динамита - САМ!

b707
Offline
Зарегистрирован: 26.05.2017

hackerman - обратите внимание, что строчки 64-67 у вас в программе повторяются 11 раз, меняется только номер пина. Это ровно то же самое, как код шлагбаума 4096 раз передавать.

Оберните эти 4 строки в процедуру с параметром "номер пина" - выиграете еще строк 50. Сделаете - подскажу что еще улучшить.

 

ЗЫ И перестаньте измерять потребление памяти в "словах" - вы явно не понимаете, что значит этот термин и потому ваш жаргон режет глаз. В вашем случае речь тдет не о словах, а о байтах - слова в компьютеры значат совсем иное.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Клапауций 003 пишет:
ещё я придумал иголку с ушком впереди

так это ты? А я думал, что Зингер...

Клапауций 003
Offline
Зарегистрирован: 20.07.2019

ua6em пишет:

Клапауций 003 пишет:
ещё я придумал иголку с ушком впереди

так это ты? А я думал, что Зингер...

тогда я про Зингера ничего не знал, поэтому пришлось самому. О_о

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

hackerman пишет:

к текущему моменту имеем 5 переменных нум с цифрами. метод деления числа на цифры устраивает выполняется аппаратно память не жрет. как задать соответствие пина цифре в переменной? в голову приходит мысль вместо byte button1pin = 2; итд ниже воткнуть массив 2 на 11 в одну строку вырианты переменной 1234567890 в другой соответствие пина. если массив может начинаться с 0 будет 1 строка и вызов по порядковому номеру в массиве нужного пина. так думаю избавиться от switch case.  это хорошая мысль? или есть методы эффективнее массива?

вот как правильно, учись!!!

astwo
Offline
Зарегистрирован: 10.07.2019

Клапауций 003 пишет:

ua6em пишет:

Клапауций 003 пишет:
ещё я придумал иголку с ушком впереди

так это ты? А я думал, что Зингер...

тогда я про Зингера ничего не знал, поэтому пришлось самому. О_о


Это просто Зингер ничего не знал про Клапауций. Вот Зингер пришлось напрягаться.

hackerman
Offline
Зарегистрирован: 15.12.2019

набор кода входа в настройки и набор кода упихал в цикл.

измерение в словах-да тут неточность. несколько лет настраивал чипы разной программируемой логики и всегда минимальная адресация была блок 8 ячеек который хранит одно слово конфигурации портов скорости защиты итд или одно 8 битное слово-команду обычно арифметическую. с тех пор все виды памяти измеряю в словах и а занятую часть мысленно оцениваю по времени заполнения ручками этого обьема.

по коду выражаю благодарность b707 и винни пуху. получилось так

unsigned long currentpass = 00000; //текущая попытка. можно делать подбор не с начала

int inputdelay = 100; //задержка нажатий кнопок

byte pushdelay = 50; //время нажатия кнопки

unsigned int errdelay = 10000; //время задержки после 3 попыток и вылета из меню

byte attempts = 3; //число попыток набора. при старте 3 для первого входа в меню.
boolean success = false;

const byte menu[] = {0, 1, 2, 3, 2, 1, 10,};
byte numerals[] = {0, 0, 0, 0, 0,};
byte currentnum = 0;
byte op = 13;
const byte pins[11] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,}; //botones con números 0 1 2 3 4 5 6 7 8 9 B
//количество ячеек счет от единицы номер ячейки счет от 0. вроде как.
//спросить у испанца про нумерацию. если он знает значит я дебил.

void setup() {
  Serial.begin(9600);
  for (uint8_t i = 0; i < 11; i++)pinMode(pins[11], OUTPUT);
  pinMode(op, INPUT_PULLUP);
}

void loop() {
  /*
    влад домофон узнать список отвезти ключи в жопу мира взять биту шаблоны спросить про обточку
    костя спросить про ккмину от беварда взять принципиалку взять прошивку четырехсотки
    заьрать модем ост 99 и посмотреть наличие четырехсотки
    порешать с м200. седой дед председатель нахуй не посылать платит он
    закрыть таску по 2094.1 где кирпич и записать это говно в 4 таски до 16-17 числа как будет инет.
    пы.сы. если вы это читаете значит я нихуя из этого не сделал. пните меня чтобы вспомнил.
  */
  if (success == true) {
    Serial.println("END");
    Serial.println(currentpass);
    delay(100000);
  } else {
    for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); //код следующей попытки
    Serial.println(currentpass);

    numerals[0] = (currentpass / 10000);
    numerals[1] = (currentpass / 1000 % 10); //разложение 5 значного числа на цифры. костыль?
    numerals[2] = (currentpass / 100 % 10);
    numerals[3] = (currentpass / 10 % 10);
    numerals[4] = (currentpass % 10 % 10);

    if (attempts == 3) {
      delay(errdelay); //если попыток 3 то ждем
      for (byte currentnum = 0; currentnum < 6; currentnum++);
      {
        digitalWrite(menu[currentnum], HIGH);
        delay(pushdelay);
        digitalWrite(menu[currentnum], LOW);
        delay(inputdelay);
        currentnum = 0;
      }
      byte attempts = 0; //сбрасываем попытки
    } else {

      for (byte currentnum = 0; currentnum < 5; currentnum++);
      {
        digitalWrite(pins[currentnum], HIGH);
        delay(pushdelay);
        digitalWrite(pins[currentnum], LOW);
        delay(inputdelay);
      }
      currentnum = 0;

      digitalWrite(pins[10], HIGH); //после набора 5 цифр этим миниатюрным куском кода жмем в.
      delay(pushdelay);
      digitalWrite(pins[10], LOW);
      delay(inputdelay);

      attempts = attempts++;

      if (digitalRead(op) == HIGH) { //maybe low
        boolean success = true;
      }
    }
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Зачем тут нужен массив numerals ?

И что делает  byte attempts = 0; ?

А так же  для чего тыщи раз вводить "012345" - чтобы девайс затрахать?

b707
Offline
Зарегистрирован: 26.05.2017

hackerman - простите, но похвалить не могу, код абсолютно неверный.

Вы так и не научились пользоваться циклами. Например, в строке 22 вы, вместо того что настроить пины от 0 по 10 - 11 раз настраиваете какой-то 12-й пин, которого нет!

Строчки с 51 по 68 не начинают новый цикл, а делают какую-то чепуху.

А самый апофеоз - ввода цифр для подбора пароля в коде НЕТ ВОВСЕ!

 

hackerman
Offline
Зарегистрирован: 15.12.2019

не получилось =(

надо на трезвую голову прочитать эту портянку еще раз может осенит. пока имею всего один прошиваемый контроллер элементарно залить и натыкать кучу сериал принт посмотреть как выполняется не могу пока. единственная железка трудится сейчас с прошитой портянкой из шапки темы. критерий правильного скрипта был возможность компиляции. как оно будет в реале работать еще не разбирался.

hackerman
Offline
Зарегистрирован: 15.12.2019

sadman41 пишет:

Зачем тут нужен массив numerals ?

И что делает  byte attempts = 0; ?

А так же  для чего тыщи раз вводить "012345" - чтобы девайс затрахать?

не уверен но вроде нумералс хранит 5 циферный код по цифрам.

атемптс это число попыток. после 3 попыток подбора целевое устройство делает одну мелкую пакость которая и утяжеляет код в 2 раза. вроде набор 12321 а первый0 я думал цикл после первого прохождения начинается с 1а не с 0. вот и воткнул 0 чтобы не терялся этот знак. вроде 12321 набирается только один раз после чего девайс сбрасывает число попыток и переходит к набору кода...

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы там, выше писали, что способны "прокрутить код в голове". Вот, пожалуй, это тот самый момент, когда нужно сделать подобный фокус. Строки 62-68, к примеру, "покрутить".

hackerman
Offline
Зарегистрирован: 15.12.2019

62-68: digitalwrite лезет в массив пинс с индексом от массива нумералс. а должна лезть в массив нумералс брать оттуда число и лезть с ним в массив пинс.

digitalWrite(pins[numerals[currentnum]], HIGH);  возможно так.

я это уже нашел перечитал полученную портянку и отмотал до третьей контрольной точки до версии где switch case уже нет размер уменьшился с 400 до 140 но ужее есть массив пинс с соответстием пинов цифрам и есть массив нумералс где тупо 5 блоков ссылающиеся на 5 элементов этого массива. читабельно я понимаю как это раюботает пригодно для допиливания но есть что улучшать.

улучшить можно назначение пинов выходами сократить в 5 раз блок который набирает 12321 и который набирает код. однако я сломал все 3 блока при попытке улучшения.

сейчас релиз ветка висит с кодом из шапки а перспективная для допиливания выглядит так

unsigned long currentpass = 00000; //текущая попытка. можно делать подбор не с начала

int inputdelay = 100; //задержка нажатий кнопок

byte pushdelay = 50; //время нажатия кнопки

unsigned int errdelay = 10000; //время задержки после 3 попыток и вылета из меню

byte attempts = 3; //число попыток набора. при старте 3 для первого входа в меню.
boolean success = false;

int pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,}; //botones con números 0 1 2 3 4 5 6 7 8 9 B

byte op = 13;

byte num[] = {0, 0, 0, 0, 0,};


void setup() {

  Serial.begin(9600);

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(op, INPUT_PULLUP);

}

void loop() {

  if (success == true) {
    Serial.println("END");
    Serial.println(currentpass);
    delay(100000);
  }
  else {
    for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); //код следующей попытки
    Serial.println(currentpass);

    num[0] = (currentpass / 10000);
    num[1] = (currentpass / 1000 % 10); //разложение 5 значного числа на цифры. костыль?
    num[2] = (currentpass / 100 % 10);
    num[3] = (currentpass / 10 % 10);
    num[4] = (currentpass % 10 % 10);

    if (attempts == 3) {
      delay(errdelay); //если попыток 3 то ждем

      //write 12321B (и входим в настройки еще раз)
      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[3], HIGH);
      delay(pushdelay);
      digitalWrite(pins[3], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(pins[10], HIGH);
      delay(pushdelay);
      digitalWrite(pins[10], LOW);
      delay(inputdelay);

      byte attempts = 0; //сбрасываем попытки
    }
    else {
      
      digitalWrite(pins[num[1]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[1]], LOW);
      delay(inputdelay);

      digitalWrite(pins[num[2]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[2]], LOW);
      delay(inputdelay);

      digitalWrite(pins[num[3]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[3]], LOW);
      delay(inputdelay);

      digitalWrite(pins[num[4]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[4]], LOW);
      delay(inputdelay);

      digitalWrite(pins[num[5]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[5]], LOW);
      delay(inputdelay);

      digitalWrite(pins[10], HIGH); //после набора 5 цифр этим громадным куском кода жмем наконец то в.
      delay(pushdelay);
      digitalWrite(pins[10], LOW);
      delay(inputdelay);

      attempts = attempts++;
      //++attempts; ???

      if (digitalRead(op) == HIGH) { //maybe low
        boolean success = true;
      }
    }
  }
}

 

hackerman
Offline
Зарегистрирован: 15.12.2019

я сломал все 3 блока при допиливании создал 2 новые переменные уменьшил обьем во флеши но увеличил жор оперативки. если последний скрипт будет работать на железе он и станет релизом вместо портянки из шапки. как улучшить эти 3 блока чтобы работало не представляю.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Откуда в людях столько тупости ?

При этом он абсолютно уверен, что делает всё правильно.

Ему 50раз уже сказали про цикл for, но он точно так же пихает свою портянку.

byte reset_pins[6]={1,2,3,4,5,10};
if(attemps==3){
for(int i=0;i<6;i++){
digitalWrite(i,HIGH);
delay(pushdelay);
digitalWrite(i,LOW);
delay(inputdelay);}
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

так уже улучшали, можно как в примерах или как делали

byte op = 13;
const byte pins[11] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,}; //botones con números 0 1 2 3 4 5 6 7 8 9 B
//количество ячеек счет от единицы номер ячейки счет от 0. вроде как.
//спросить у испанца про нумерацию. если он знает значит я дебил.

void setup() {
  Serial.begin(9600);
  for (uint8_t i = 0; i < 11; i++){pinMode(pins[i], OUTPUT);
   }
    pinMode(op, INPUT_PULLUP);
    }
  /*
void setup() {

  for(int i=2;i<13;i++){
    digitalWrite(i,OUTPUT);
  }
}*/

void loop() {
 
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:

Откуда в людях столько тупости ?

При этом он абсолютно уверен, что делает всё правильно.

Ему 50раз уже сказали про цикл for, но он точно так же пихает свою портянку.

byte reset_pins[6]={1,2,3,4,5,10};
if(attemps==3){
for(int i=0;i<6;i++){
digitalWrite(i,HIGH);
delay(pushdelay);
digitalWrite(i,LOW);
delay(inputdelay);}
}

 

а разве не так:

byte reset_pins[6]={1,2,3,4,5,10};
if(attemps==3){
for(int i=0;i<6;i++){
digitalWrite(reset_pins[i],HIGH);
delay(pushdelay);
digitalWrite(reset_pins[i],LOW);
delay(inputdelay);}
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

зато быстро бегает и чипы перепаивает, кто на что как гриться...

hackerman
Offline
Зарегистрирован: 15.12.2019

unsigned long currentpass = 00000; //текущая попытка. можно делать подбор не с начала

int inputdelay = 100; //задержка нажатий кнопок

byte pushdelay = 50; //время нажатия кнопки

unsigned int errdelay = 10000; //время задержки после 3 попыток и вылета из меню

byte attempts = 3; //число попыток набора. при старте 3 для первого входа в меню.
boolean success = false;

int pins[11] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,}; //botones con números 0 1 2 3 4 5 6 7 8 9 B

byte op = 13;

byte num[] = {0, 0, 0, 0, 0,};

void setup() {

  Serial.begin(9600);
  for (uint8_t i = 0; i < 11; i++) {
    pinMode(pins[i], OUTPUT);
  }
  pinMode(op, INPUT_PULLUP);
}
/*
  Serial.begin(9600);

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(op, INPUT_PULLUP);

  }
*/
void loop() {

  if (success == true) {
    Serial.println("END");
    Serial.println(currentpass);
    delay(100000);
  }
  else {
    for (unsigned long currentpass = 00000; currentpass < 99999; currentpass++); //код следующей попытки
    Serial.println(currentpass);

    num[0] = (currentpass / 10000);
    num[1] = (currentpass / 1000 % 10); //разложение 5 значного числа на цифры. костыль?
    num[2] = (currentpass / 100 % 10);
    num[3] = (currentpass / 10 % 10);
    num[4] = (currentpass % 10 % 10);

    if (attempts == 3) {
      delay(errdelay); //если попыток 3 то ждем

      //write 12321B (и входим в настройки еще раз)
      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[3], HIGH);
      delay(pushdelay);
      digitalWrite(pins[3], LOW);
      delay(inputdelay);

      digitalWrite(pins[2], HIGH);
      delay(pushdelay);
      digitalWrite(pins[2], LOW);
      delay(inputdelay);

      digitalWrite(pins[1], HIGH);
      delay(pushdelay);
      digitalWrite(pins[1], LOW);
      delay(inputdelay);

      digitalWrite(pins[10], HIGH);
      delay(pushdelay);
      digitalWrite(pins[10], LOW);
      delay(inputdelay);

      byte attempts = 0; //сбрасываем попытки
    }
    else {
for (uint8_t i = 0; i < 5; i++){ //посмотреть значение и
      digitalWrite(pins[num[i]], HIGH);
      delay(pushdelay);
      digitalWrite(pins[num[i]], LOW);
      delay(inputdelay);
}
      digitalWrite(pins[10], HIGH); //после набора 5 цифр этим вроде не говеным куском кода жмем в.
      delay(pushdelay);
      digitalWrite(pins[10], LOW);
      delay(inputdelay);

      attempts = attempts++;
      //++attempts; ???

      if (digitalRead(op) == HIGH) { //maybe low
        boolean success = true;
      }
    }
  }
}

я упихал одну часть портянки и если со значением и ничего не напутано то вроде должно работать. как упихать в цикл другую часть портянки ума не приложу. вместо 5 блоков создать массив и ссылаться на него увеличивая порядковый номер каждый раз на 1? пристрелите меня. попытки сделать выше описанное даже не компилируются. попытка запихать инициализацию пинов в цикл заканчивается жопой тоже

b707
Offline
Зарегистрирован: 26.05.2017

hackerman пишет:

попытка запихать инициализацию пинов в цикл заканчивается жопой тоже

а какую ошибку пишет на попытку запихать инициализацию пинов в цикл ?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

нет там ошибки, проверял, всё компилируется, если закавычить функции правильно )))