Jump to content

Dan Smith

Members
  • Content Count

    4
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dan Smith

  • Rank
    Новенький

Информация

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

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    Ремонт, микроконтроллеры
  • Оборудование
    Паяльник, мультметр, осцилограф, фен.
  1. Пилюлькин, большущее спасибо, выручил. Подправил код, все теперь работает как надо. Сразу не ответил, так как получил банан на сутки))) Теперь внимательнее буду читать правила)
  2. Пробовал. Эти тайминги проблемы не решают, ими настраивается скорость и задержка для выполнения очередного цикла для всех режимов
  3. Да не секретная :)) Просто как показывает опыт, похейтят и дальше пойдут. А помочь никто не поможет) /===========ИНИЦИАЛИЗИРУЕМ БИБЛИОТЕКИ========================================================================= #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); } } В общем проблема такая. При работе аварийки, поворотники очень часто "перемаргиваются" (т.е. вместо нормально бегущих огней в разные стороны, начинаются симофоры то влево то вправо ) Это объясняется тем, что сигналы к штатным лампам (с которых берется сигнал на ардуино) во время работы аварийки приходят несинхронно. Следственно скетч выполняет команду от того поворотника, с которого сигнал приходит первым. Не могу понять как в опрос поворотников запилить задержку таким образом, чтобы скетч какое-то время ждал сигнал от "неуспевшего дать импульс" поворотника и выполнял программу аварийки.
  4. Всем доброго времени суток. Нуждаюсь в помощи со скетчем к адресной ленте SK6812. Проект был собран на коленке временно, установлен на авто и работает уже несколько месяцев. Есть небольшой баг, который своими силами исправить не могу. На сегодняшний день этот проект перенесен на печатную плату, поправлены аппаратные неточности. А вот со скетчем беда. Проблема в том, что при опросе пинов, нужно установить задержки на исполнение тех или иных циклов программы. Всю необходимую информацию и скетч готов предоставить в личку, с подробным описанием проблемы.. Прошу откликнуться энтузиастов, понимающих и просто хороших людей. Сам не вывезу к сожалению..(
×
×
  • Create New...