Jump to content

Dan Smith

Members
  • Content Count

    14
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dan Smith

  • Rank
    Новенький

Информация

  • Город
    Фокино

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    Ремонт, микроконтроллеры
  • Оборудование
    Паяльник, мультметр, осцилограф, фен.

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. В том и дело, между двумя слоями спрятать слаботочку, так же ардуино распаять на плате и спрятать под экран...
  2. Всем спасибо. Тихим сапом разобрался) Первый блин не комом)) для отладки сойдет. для более серьезного проекта заказал печатку в 4х слойного текстолита.. Без него никак.
  3. Доброго дня, к компьютеру не дорваться, работы понавалилось. По Вашему вопросу затрудняюсь ответить, так как не до конца понимаю суть вопроса. Если Вы имели ввиду (может ли он проводить вычисления своими ресурсами?,то наврятли.) Использовал такой вот распространенный дисплей. По крайней мере числа то он выводит, как и текст
  4. Не хотелось бы переводить тему в подобное рассуждение)) Я все прекрасно понимаю, но когда начальство "любит" в хвост и гриву, тут остается либо лишаться рабочего места, либо выкручиваться всеми подручными способами. Задача в данный момент стоит не в эксплуатации котла, а в предъявлении его в рабочем состоянии для "галочки". И надеюсь все понимают, что в нашей стране всё всегда так делалось и делается. Повторюсь, что данный блок - это временное решение, дотянуть до сервисного ремонта. Да и сам лет 20 работаю с системами автоматики, и не такое видел)
  5. котел не газовый, на салярке, большая часть защиты реализована вне данного блока, этот только "дергает" за контакты во время пуска. Да и мне бы только до заводского или сервисного ремонта дотянуть, там естественно будем все по штатному восстанавливать. Да и на будущее этот блок буду использовать для отладки котла, без дела лежать не будет)
  6. Ну вот не хватает мне знаний в программировании контроллера, но остановиться на полпути я не могу. Нужна помощь . Суть проблемы такова, Скетч написал, на столе все работает, алгоритм работы в норме. Но скетч получился почти на 600 строк. Очень много повторяющихся блоков, которые мне посоветовали упростить в цикле for. Я бы рад попробовать, но открывая скетч,не могу понять даже с чего начинать) Происки информации по работе for еще больше закидывают меня в замешательство. Вот полный скетч... Блоки, которые отсчитывают секунды, аж глаза режут. Добрые люди, как упростить, не изменяя функциональности скетча?. Я уже на финишной прямой, но конкректно забуксовал( Если можно то хоть примерчик скиньте как реализовать.
  7. Никак не хотел чем-то зацепить и огорчить, Ваш ответ сподвиг читать про команду "goto", чтобы понять как это работает и с чем ее готовить, попутно нашел еще несколько примеров подобной команды и все их попробовал, остановился на функции, которую и оставил в своем скетче. Тупо использовать Вашу подсказку - не научиться ничему, а так почитал, и что-то запомнил. Так что не поймите не правильно, еще раз Вам спасибо за совет, направление мне дали, а дальше уже пошло поехало)
  8. Спасибо всем откликнувшимся, все получилось с помощью void(* resetFunc) (void) = 0; Избавился от лишней обвязки, теперь все работает как надо, но пока еще на столе. Если у кому нибудь будет интересна данная работа, то после получения печаток, сборки контроллера и обкатки на котле, могу выложить весь проект от начала до конца. Так что пишите, за мной не заржавеет. Единственное, надобно размер скетча немного уменьшить, на это есть еще почти месяц) Буду вечерами самообразовываться) Еше раз спасибо.... У меня нет выбора, заменить устройство нечем, так как оно сконструировано и собрано в 70х годах. Устала деталька работать, так как является механическим программным устройством. Как понимаете там даже танцы с бубном не помогут)
  9. Всем доброго времени суток. На работе случилась беда, навернулся котел, точнее программно-таймерное устройство, дергающее за "веревочки" цепей данного котла. Как у нас в стране обычно бывает, нет ни документации на это устройство, ни описания логики данного механизма. Ну и соответственно вся возня, касаемая ремонта, легла на плечи коллектива. Недолго думая, обложился всем схемами, которые мог найти, частично методом частичного разбора и замеров расчертил полную схему данного котла. Постепенно логика работы сломанного программно-таймерного устройства стала понятна. Было принято решение воссоздать данный модуль на базе AVR контроллера со всеми вытекающими. В спринт лайот накидал печатку, заказал, и пока она доставляется занялся набором программы в среде Arduino IDE. И буквально с первых же попыток написать скетч понял, что с печатками я поторопился, как я уже потом понял, программно-таймерное устройство c момента запуска должно единожды прогнать перечень команд в void setup и начать следить да датчиками уже в void loop. Следовательно для такого исполнения программы понадобилось дополнять схему парой транзисторов и реле, для коммутации питания ардуино самой на себя. Ну что-то я в дебри полез. Нужен совет по скетчу. Дабы оставить печатные платы без изменений в первоначальном заказанном виде, хочу избавиться от удерживающего питание реле. Но это получится сделать только если есть возможность в void setup скинуть скетч на начало работы при определенных условиях, но только не средствами reset, а именно программно? Чтото вроде того, что при начале скетча, при несоблюдении условий продолжения работы void setup начинал выполняться с первой строки. Ниже часть пока еще сырого пробного скетча. #include <OLED_I2C.h> OLED myOLED(4, 3, 4); extern uint8_t RusFont[]; extern uint8_t SmallFont[]; const int buttonPinSTART = A0; // вход для контроля пуск/стоп программы (так же через диод запитывается пин +5v, на который приходит питание через реле, управляемого 13 пином) const int buttonPinFIRE = A1; // вход для контроля пламени const int ledPin2 = 2; // пин питания дисплея const int ledPin5 = 5; // вывод для реле вентилятора const int ledPin6 = 6; // вывод для реле аварии const int ledPin7 = 7; // вывод для реле воздушной заслонки const int ledPin8 = 8; // вывод для реле соленоид2 const int ledPin9 = 9; // вывод для реле розжига const int ledPin10 = 10; // вывод для реле соленоид1 const int ledPin13 = 13; // вывод подтяжки питания int buttonStateSTART = LOW; int buttonStateFIRE = HIGH; void setup() { pinMode(buttonPinSTART, INPUT); pinMode(buttonPinFIRE, INPUT_PULLUP); pinMode(ledPin2, OUTPUT); // Пин питания дисплея pinMode(ledPin5, OUTPUT); // Пин управления pinMode(ledPin6, OUTPUT); // Пин управления pinMode(ledPin7, OUTPUT); // Пин управления pinMode(ledPin8, OUTPUT); // Пин управления pinMode(ledPin9, OUTPUT); // Пин управления pinMode(ledPin10, OUTPUT); // Пин управления pinMode(ledPin13, OUTPUT); // Пин удержания питания микроконтроллера digitalWrite(ledPin2, HIGH); // Подклюаем дисплей delay(1500); myOLED.begin(); myOLED.clrScr(); // Стираем все с экрана myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print( "------" , CENTER, 12); // Выводим текст ------ myOLED.print( "------" , CENTER, 30); // Выводим текст ------ myOLED.print( "------" , RIGHT, 48); // Выводим текст ------ myOLED.update(); digitalWrite(ledPin13, HIGH); // Подтягиваем питание ардуино через реле delay (2000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } myOLED.clrScr(); myOLED.print( "GJLUJNJDRF R GECRE" , CENTER, 24); // Выводим текст ПОДГОТОВКА К ПУСКУ myOLED.update(); delay(2000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } myOLED.clrScr(); myOLED.print( "------" , CENTER, 24); // Выводим текст myOLED.print( "------" , CENTER, 36); // Выводим текст myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } digitalWrite(ledPin7, HIGH); myOLED.clrScr(); myOLED.print( "------" , CENTER, 24); // Выводим текст myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == LOW) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); digitalWrite(ledPin13, LOW); delay(300); } digitalWrite(ledPin5, HIGH); delay(300); ..... ..... ..... ..... ..... } } void loop() { ..... ..... ..... ..... ..... } В данном варианте, при отмене запуска ардуинка проделывает кое какие манипуляции, в зависимости от части кода и снимает питание с пина13 (реле поддержки питания), которое тем временем обестачивает контроллер. Вроде бы задача выполнена, но есть баг. К примеру механик решил выключить котел, повернул тумблер в *0* на стадии предпускового продува камеры, пошел цикл завершения работы. А механик передумал останавливать котел, не дождался пока завершится процесс выключения, врубает тумблер в "работу", при этом в void setup программа отключает подтяжку питания, но продолжает выполнять последовательность действий запуска. В конечном итоге сработает авария, условия которой прописано в void loop. Но момент все равно неприятный. Есть ли возможность в данной строке delay(1000); digitalWrite(ledPin13, LOW); delay(300); вписать команду, которая заставит void setup прервать выполнение программы и вернуться к началу (повторюсь, без reset), ну и соответственно избавиться от использования 13 пина и соответственно танцев с подтягиванием питания Написал много, так как тяжело выразить словами всю кашу, которая на данный момент у меня в голове, возможно и сам за выходные немного отдохну и решение придет само собой) Возможно я изначально неправильно выбрал подход к данному скетчу. Не представляю как в void loop это все заставить работать, так как основному телу программы не нужна цикличность.
  10. Пилюлькин, большущее спасибо, выручил. Подправил код, все теперь работает как надо. Сразу не ответил, так как получил банан на сутки))) Теперь внимательнее буду читать правила)
  11. Пробовал. Эти тайминги проблемы не решают, ими настраивается скорость и задержка для выполнения очередного цикла для всех режимов
  12. Да не секретная :)) Просто как показывает опыт, похейтят и дальше пойдут. А помочь никто не поможет) /===========ИНИЦИАЛИЗИРУЕМ БИБЛИОТЕКИ========================================================================= #include <Adafruit_NeoPixel.h> #include <Adafruit_ADXL345_U.h> //===========НАЗНАЧАЕМ ПИН ВЫХОДА НА ЛЕНТУ===================================================================== const int PinLS = 12; //===========НАЗНАЧАЕМ ПИНЫ ВХОДОВ============================================================================= const int buttonPinD = 2; const int buttonPinR = 4; const int buttonPinL = 3; const int buttonPinS = 5; int buttonStateS = HIGH; int buttonStateD = HIGH; int buttonStateL = HIGH; int buttonStateR = HIGH; //===========ЗАДАЕМ ТАЙМИНГИ (НАСТРАИВАЮТСЯ ПО МЕСТУ МЕТОДОМ ПОДБОРА)========================================== int pause_pov1 = 17; int pause_pov2 = 175; int ix; Adafruit_NeoPixel strip = Adafruit_NeoPixel(44, PinLS, NEO_GRB + NEO_KHZ800); Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); void setup() { //===========ИНИЦИАЛИЗИРУЕМ ВХОДЫ, ПОДТЯГИВАЕМ К ПЛЮСУ========================================================= pinMode(buttonPinS, INPUT_PULLUP); pinMode(buttonPinD, INPUT_PULLUP); pinMode(buttonPinL, INPUT_PULLUP); pinMode(buttonPinR, INPUT_PULLUP); strip.begin(); //===========ГАСИМ ЛЕНТУ======================================================================================= for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); accel.begin(); //===========ОГРАНИЧИВАЕМ ДИАПАЗОН ИЗМЕРЕНИЙ 4G================================================================ accel.setRange(ADXL345_RANGE_4_G); accel.setDataRate(ADXL345_DATARATE_100_HZ); } void loop() { buttonStateS = digitalRead(buttonPinS); buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); buttonStateD = digitalRead(buttonPinD); //===========ЭКСТРЕННОЕ ТОРМОЖЕНИЕ============================================================================= sensors_event_t event; accel.getEvent(&event); ix = event.acceleration.x; if (buttonStateS == LOW && ix < 6){ //значение от 1 до 9 (чем выше цифра тем чувствительней датчик) for (int is=0; is<15; is++ ) { for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(240,0,0)); strip.show(); delay(10 + is*10); for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); delay(10 + is*3); }} //===========ОБЫЧНОЕ ТОРМОЖЕНИЕ================================================================================ else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == HIGH){ for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); strip.show(); } //===========ТОРМОЗ+ЗАДНИЙ ХОД================================================================================= else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){ delay(50); for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); strip.show(); while(buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){ buttonStateS = digitalRead(buttonPinS); buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); buttonStateD = digitalRead(buttonPinD); delay(50);} } //===========ТОРМОЗ+АВАРИЙКА+ЗАДНИЙ ХОД======================================================================== else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == LOW && buttonStateD == LOW){ for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int il=0; il<10; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ТОРМОЗ+ПРАВЫЙ+ЗАДНИЙ ХОД========================================================================== else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == LOW){ for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int il=0; il<10; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ТОРМОЗ+ЛЕВЫЙ+ЗАДНИЙ ХОД=========================================================================== else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == LOW){ for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int il=0; il<10; il++ ) { strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ЗАДНИЙ ХОД======================================================================================== else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){ for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); strip.show(); while(buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){ buttonStateS = digitalRead(buttonPinS); buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); buttonStateD = digitalRead(buttonPinD); delay(50);} } //===========ТОРМОЗ+ЛЕВЫЙ====================================================================================== else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == HIGH){ for (int i=0; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ТОРМОЗ+ПРАВЫЙ===================================================================================== else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == LOW){ for (int i=11; i<44; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ПРАВЫЙ============================================================================================ else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == HIGH){ for (int i=11; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ЛЕВЫЙ============================================================================================= else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == HIGH){ for (int i=0; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ЛЕВЫЙ+ЗАДНИЙ ХОД================================================================================== else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == LOW){ for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<10; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ПРАВЫЙ+ЗАДНИЙ ХОД================================================================================= else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == LOW){ for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250)); for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int il=0; il<10; il++ ) { strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========АВАРИЙКА========================================================================================== else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == LOW){ for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); for (int il=0; il<10; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========АВАРИЙКА+ТОРМОЗ================+================================================================== else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == LOW){ for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0)); for (int il=0; il<10; il++ ) { strip.setPixelColor(9-il, strip.Color(250,80,0)); strip.setPixelColor(il+34, strip.Color(250,80,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<11; il++ ) { strip.setPixelColor(9-il, strip.Color(0,0,0)); strip.setPixelColor(il+34, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //===========ГАСИМ ЛЕНТУ======================================================================================= else { for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); delay(10); } } В общем проблема такая. При работе аварийки, поворотники очень часто "перемаргиваются" (т.е. вместо нормально бегущих огней в разные стороны, начинаются симофоры то влево то вправо ) Это объясняется тем, что сигналы к штатным лампам (с которых берется сигнал на ардуино) во время работы аварийки приходят несинхронно. Следственно скетч выполняет команду от того поворотника, с которого сигнал приходит первым. Не могу понять как в опрос поворотников запилить задержку таким образом, чтобы скетч какое-то время ждал сигнал от "неуспевшего дать импульс" поворотника и выполнял программу аварийки.
  13. Всем доброго времени суток. Нуждаюсь в помощи со скетчем к адресной ленте SK6812. Проект был собран на коленке временно, установлен на авто и работает уже несколько месяцев. Есть небольшой баг, который своими силами исправить не могу. На сегодняшний день этот проект перенесен на печатную плату, поправлены аппаратные неточности. А вот со скетчем беда. Проблема в том, что при опросе пинов, нужно установить задержки на исполнение тех или иных циклов программы. Всю необходимую информацию и скетч готов предоставить в личку, с подробным описанием проблемы.. Прошу откликнуться энтузиастов, понимающих и просто хороших людей. Сам не вывезу к сожалению..(
×
×
  • Create New...