Доп.стоп сигнал для авто. Нужна помощь
- Войдите на сайт для отправки комментариев
Решил переделать доп. стопак на машине.
Видео работы стопака на страничке драйва
Страничка на драйве: https://www.drive2.ru/l/479934627574710567/
Есть некоторые проблеммы в программировании:
Есть кнопка которой можно переключать режим работы при этом после нажатия выбранный режим записывается в епром. При включении ардуино, считывается записаный в память номер режима и воспроизводится. Проблема в том что ардуино долго грузится и потключать концевик от педали тормоза к питанию контроллера будет не совсем правильно.
Как я понимаю при включенном зажигании устройство должно загрузиться и постоянно работать а по нажатию на педаль тормоза воспроизводить часть кода. Вот собственно и сам вопрос: Не знаю как правильно прописать это все дело и на какой порт принимать сигнал от педали тормоза (аналоговый или цифровой)?
За помощь за ранее спасибо.
Схема подключения. 
собственно сам скетч
#include <EEPROM.h>
int led1 = 3;
int led2 = 9;
int led3 = 5;
int led4 = 6;
int address = 0;
byte value;
//int buttonPin = 2;
int val=EEPROM.read(0), stope=1;
long previousMillis = 0;
int buttonState = 0;
long interval = 300;
void setup() {
Serial.begin(9600);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
attachInterrupt(0, buttonPin, CHANGE);
while(!Serial);
}
void one()
{
while(stope==1)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(300);
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 2);
}
void two()
{
while(stope==1)
{
digitalWrite(led3, HIGH);
delay(300);
digitalWrite(led1, HIGH);
delay(300);
digitalWrite(led4, HIGH);
delay(300);
digitalWrite(led2, HIGH);
delay(300);
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 3);
}
void one1()
{
while(stope==1)
{
digitalWrite(led1, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led4, LOW);
delay(300);
digitalWrite(led1, LOW);
digitalWrite(led3, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led4, HIGH);
delay(300);
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 4);
}
void lsnk()
{
while(stope==1)
{
digitalWrite(led3, HIGH);
delay(800);
digitalWrite(led1, HIGH);
digitalWrite(led3, LOW);
delay(800);
digitalWrite(led4, HIGH);
digitalWrite(led1, LOW);
delay(800);
digitalWrite(led2, HIGH);
digitalWrite(led4, LOW);
delay(800);
digitalWrite(led2, LOW);
if(Serial.available() > 0) stope = Serial.parseInt();
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 5);
}
void slsnk()
{
while(stope==1)
{
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led3, LOW);
delay(40);
digitalWrite(led3, HIGH);
delay(40);
digitalWrite(led3, LOW);
delay(140);
digitalWrite(led1, HIGH);
delay(40);
digitalWrite(led1, LOW);
delay(40);
digitalWrite(led1, HIGH);
delay(40);
digitalWrite(led1, LOW);
delay(40);
digitalWrite(led1, HIGH);
delay(40);
digitalWrite(led1, LOW);
delay(40);
digitalWrite(led1, HIGH);
delay(40);
digitalWrite(led1, LOW);
delay(140);
delay(40);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led4, LOW);
delay(40);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led4, LOW);
delay(140);
digitalWrite(led2, HIGH);
delay(40);
digitalWrite(led2, LOW);
delay(40);
digitalWrite(led2, HIGH);
delay(40);
digitalWrite(led2, LOW);
delay(40);
digitalWrite(led2, HIGH);
delay(40);
digitalWrite(led2, LOW);
delay(40);
digitalWrite(led2, HIGH);
delay(40);
digitalWrite(led2, LOW);
delay(140);
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 6);
}
void sdtd()
{
while(stope==1)
{
digitalWrite(led3, HIGH);
delay(800);
digitalWrite(led1, HIGH);
digitalWrite(led3, LOW);
delay(800);
digitalWrite(led4, HIGH);
digitalWrite(led1, LOW);
delay(800);
digitalWrite(led2, HIGH);
digitalWrite(led4, LOW);
delay(800);
digitalWrite(led4, HIGH);
digitalWrite(led2, LOW);
delay(800);
digitalWrite(led1, HIGH);
digitalWrite(led4, LOW);
delay(800);
digitalWrite(led1, LOW);
if(Serial.available() > 0) stope = Serial.parseInt();
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 7);
}
void long1()
{
while(stope==1)
{
for(int i=0; i<=255; i++){analogWrite(led3, i);delay(5);}
for(int i=0; i<=255; i++){analogWrite(led1, i);delay(5);}
for(int i=0; i<=255; i++){analogWrite(led4, i); delay(5);}
for(int i=0; i<=255; i++){analogWrite(led2, i); delay(5);}
for(int k=255; k>=0; k--){analogWrite(led3, k); delay(5);}
for(int k=255; k>=0; k--){analogWrite(led1, k); delay(5);}
for(int k=255; k>=0; k--){analogWrite(led4, k); delay(5);}
for(int k=255; k>=0; k--){analogWrite(led2, k); delay(5);}
if(Serial.available() > 0) stope = Serial.parseInt();
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 8);
}
void long2()
{
while(stope==1)
{
for(int i=0; i<=255; i++){analogWrite(led3, i);delay(25);}
for(int i=0; i<=255; i++){analogWrite(led1, i);delay(25);}
for(int i=0; i<=255; i++){analogWrite(led4, i); delay(25);}
for(int i=0; i<=255; i++){analogWrite(led2, i); delay(25);}
if(Serial.available() > 0) stope = Serial.parseInt();
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
if(Serial.available() > 0) Serial.parseInt();
}
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
EEPROM.write(0, 1);
}
void loop() {
// считываем значение текущего байта EEPROM:
value = EEPROM.read(0);
Serial.print(0);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
// перемещаемся к следующему байту EEPROM:
address = 0;
// EEPROM содержит всего 512 байтов (с 0 по 511),
// поэтому, добравшись до 512-ой позиции,
// снова переходим к самому первому, т.е. к 0-ому байту:
if (address == 5)
address = 0;
delay(500);
if(Serial.available() > 0) val = Serial.parseInt();
switch(val)
{
case 1:stope=1; one();break;
case 2:stope=1; two();break;
case 3:stope=1; one1();break;
case 4:stope=1; long1();break;
case 5:stope=1; long2();break;
case 6:stope=1; lsnk();break;
case 7:stope=1; slsnk();break;
case 8:stope=1; sdtd();break;
}
}
void buttonPin()
{
static unsigned long millis_prev;
if(millis()-1000 > millis_prev)
{
stope=1;
delay(50);
val++;
delay(50);
stope=0;
Serial.println(val);
if(val==9) EEPROM.write(0, 1);
}
millis_prev = millis();
}
я бы не стал экспериментировать со стопярями, чем их больше и чем быстрее и ярчк они все светят, то лучше, а вся остальная светомузыка до добра не доведет.
я бы не стал экспериментировать со стопярями, чем их больше и чем быстрее и ярчк они все светят, то лучше, а вся остальная светомузыка до добра не доведет.
Это дополнительный стоп сигнал...
За слепящий мигающий стоп - хочется вынести стекло "горе-кулибину". Я спокойный, но не все же такие сдержанные.
Что за дурацкая тяга что-то приколхозить к своему авто? Не устраивает машина - купи другую...
За слепящий мигающий стоп - хочется вынести стекло "горе-кулибину". Я спокойный, но не все же такие сдержанные.
Что за дурацкая тяга что-то приколхозить к своему авто? Не устраивает машина - купи другую...
Действительно не устраивает люстра купи другую квартиру... Ну не удержался уж простите. Каждому свое вобщем...
Можно кинуть через цифровой .Нажал педаль включилось реле контакты перемкнулись вот тебе и обычная кнопка.
Только через ардуино не пускай 12 вольт а то что ненужно выгорит.
И что нужно тоже.
Можно кинуть через цифровой .Нажал педаль включилось реле контакты перемкнулись вот тебе и обычная кнопка.
ок на цифровой вход подключаю +12в от разьема стопака (или от концевика педали) через понижающий стабилизатор. В результате имеем 5в+ на входе например D8... а вот скетч как переписать чтобы при (+5)high на D8 включался цикл. Желательно еще и без повторной записи в епром ))???
А может вы словами опишете работу программы. А то я чего-то не понял что и как работает.
Ну здесь я помочь наверно не смогу.Я сам начинающий еще не знаю всех зависимостей программы и переписать наверно не смогу.
seregaeshka - так, как вы хотите, этот скетч работать не будет. Программа написана так, что пока она не отыграет очередную последовательность миганий - она на кнопки не реагирует. То есть вы нажали на тормоз - огонечки побежали. Через мгновение тормоз отпустили - а огонечки все равно бегут. - Как долго? - зависит от режима. Я вижу у вас есть режимы и по 3секунды. и почти 5... То есть один раз нажали на тормоз - 5 секунд цветомузыки без остановки.
Чтобы эта трахома включалась при нажатии на педаль и ГАСЛА при отпускании педали - программу надо полностью переписывать.
seregaeshka - так, как вы хотите, этот скетч работать не будет. Программа написана так, что пока она не отыграет очередную последовательность миганий - она на кнопки не реагирует. То есть вы нажали на тормоз - огонечки побежали. Через мгновение тормоз отпустили - а огонечки все равно бегут. - Как долго? - зависит от режима. Я вижу у вас есть режимы и по 3секунды. и почти 5... То есть один раз нажали на тормоз - 5 секунд цветомузыки без остановки.
Чтобы эта трахома включалась при нажатии на педаль и ГАСЛА при отпускании педали - программу надо полностью переписывать.
кейсы можно переписать и покороче дело не в том.... там большинство написано так для примера.... просто я не пойму как написать чтоб при сигнале на еще один вход ардуино например D8 также воспроизводился цикл....
ну вот например сейчас: есть кнопка мы ее жмем у нас 1 раз воспроизводится кэйс №1 ( в конце значение 1 пишетсся в память я чейка 0) если жмем еще раз то вопроизводится в торой кейс и пишется в епром 2.... и т.д.
Что мне сделать чтобы при сигнале +5в на любой свободный порт ардуино происходило тоже самое? (например я подключу 2 кнопку) на порт D8.
Во первых не использовать прерывание. Здесь прерывание это зло.
Во вторых у вас две кнопки . Одна для запуска мигания и остановки. А вторая для выбора програмы мигания.
В третих. Чем сложно работать на заказчика, тем что он как хозяин своего слова, всегда может эти слова поменять.
кейсы можно переписать и покороче дело не в том.... там большинство написано так для примера.... просто я не пойму как написать чтоб при сигнале на еще один вход ардуино например D8 также воспроизводился цикл....
ну вот например сейчас: есть кнопка мы ее жмем у нас 1 раз воспроизводится кэйс №1 ( в конце значение 1 пишетсся в память я чейка 0) если жмем еще раз то вопроизводится в торой кейс и пишется в епром 2.... и т.д.
Во-первых, дело не в том, чтобы "переписать покороче", а в том, чтобы написать по-другому. Так, чтобы воспроизведение одного кейса не блокировало всю программу. То есть все кейсы у вас написаны неправильно.
Ну а дальше - насчет кнопки - она у вас работает? Уверены? Вот вы включили кейс1, он начал мигать - что будет, если в середине кейса нажать кнопку, знаете? - НИЧЕГО. Кнопка не работает, пока кейс не кончится.
Вы все твердите про какую-то вторую кнопку. А это не главное. Главное - вам надо избавится от зависонов в программе. А когда избавитесь - все остальное можно будет сделать добавлением буквально пары строк - всего лишь заменить кнопку. что у вас сейчас есть - на выключатель тормоза.
1- К сожалению я не знаю как переписать по другому. ((
2- в принципе разницы нет будет работать вторая кнопка или нет пока не закончится кейс1.... Вот смотрите - Включаем, выбираем на кнопке № 1 режим например 4(4 раза клацаем кнопку №1 при это ждем пока все кейсы закончатся )) ) при этом у нас в епром записалось значение 4. При этом мы видем как выглядит каждый режим(кейс) при нажатии на кнопку№1. Потом на пример когда жмем на кн№2 наш кейс №4 воспроизводится....Что будет при нажатии 2х кнопок одновременно абсолютно не имеет значения для пользователя т.к. кн№1 у нас около задних коллонок авто а кн№2 это педаль тормоза ))) вобщем сложновато будет нажать 2 кнопки сразу.
3-кн№2 утрированное понятие я так называю сигнал от педали тормоза.... сейчас на выключатель тормоза нет ничего в том то и беда. Я не пойму просто как исправить код чтобы при получении сигнала на любой свободный порт контроллера с кнопки, от педали, или еще не важно откуда включался выбраный ранее кейс вот и все.
Я не пойму просто как исправить код чтобы при получении сигнала на любой свободный порт контроллера с кнопки, от педали, или еще не важно откуда включался выбраный ранее кейс вот и все.
это как раз проще простого, у вас уже есть нужный кусок в коде
if(digitalRead(knopka) == HIGH) { switch(val) { case 1:stope=1; one();break; case 2:stope=1; two();break; case 3:stope=1; one1();break; case 4:stope=1; long1();break; case 5:stope=1; long2();break; case 6:stope=1; lsnk();break; case 7:stope=1; slsnk();break; case 8:stope=1; sdtd();break; } }Но только это вам мало поможет, так как код надо переписывать весь. Если вы действительно хотите это сделать сами - начните изучать программирование, это не сложно. Если вам нужен готовый продукт - лучше найдите знающего человека и заплатите денег.
я бы не стал экспериментировать со стопярями, чем их больше и чем быстрее и ярчк они все светят, то лучше, а вся остальная светомузыка до добра не доведет.
Полностью согласен!
Как эксперемент, обучение, наработка опыта - почему бы нет.
Как реальная реализация на авто - повылазят следующие проблемы (если уж будете ставить - заранее их решайте):
1. Проблемы по питанию (согласование 12-5В, защита от серьезных помех по питанию)
2. Неустойчивая работа при минусовых температурах.
3. Проблемы реализации "на столе" и в машине. Например от вибраций перестанет работать один из двух таких мигающих стопов и с зади один работающий примут за поворотнк - дальше мысль развивать?
Если уж хоченться выделиться - светодиодная надпись с зади вместо мигания аварийкой - СПАСИБО!
Вот ее можно переливать и зажигать как фантазии хватит! И на безопасности ПОЧТИ не скажеться!
seregaeshka - подумалось - а нафига вам брать сигнал с датчика под педалью? Это неудобно, да и провода придется через салон назад тянуть. Я бы подключился к стоп-сигналу в штатных фонарях авто.
b707 за код спс сегодня попробую
на счет педали это так - образно было сказано ))
#140
Вот сдесь грамотное решение по питанию ардуины от сети автомобиля - рекомендую.
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-nano-k-bortovoi-seti-avtomobilya
Проблема в том что ардуино долго грузится
Проблема решается так:
1. подключить через программатор
2. залить свою программу.
Результат:
3. загрузчик ардуино удалён
4. ваша программа запускается сразу при включении питания.
М... да, посмотрел на этото "колхоз" и полностью согласен с коментариями !
доп стоп фонарь - должен привлекать внимание , а не утомлять постоянным миганием.
Особенно остро проблемма проявляется в "пробках" , в плохих погодных условиях .... и тд.
Проявите уважение к тем ,кто стоит или едет за вами!
предлагаю скетч :https://yadi.sk/d/R1E2d3eC3RzwZd
В котором реализован :
1 эфект мигания в стиле F1 (если пауза между нажатиями не превышает 35 секунд , то повторного мигания не происходит , просто "доп фонарь" дублирует стоповые фонари.
2 При вкл. повороте реализован эфект "бегущий огонь".
3 при вкл. "авария" огоньки бегут навсречу друг другу.
4 при вкл. "задним ходом" прерывистое мигание.
входы : А0, А1,А2,А3 (сигналы от ламп тормоза, поворотов и заднего хода)
выходы : Pin 2 - Pin 13, А4,А5 ( 14 светодиодов )
если возникнут вопросы задавайте
если возникнут вопросы задавайте
у меня вопрос - это реклама? Если да - нафига она здесь?
А если хочется поделится своим опытом - есть раздел "Проекты", где люди выкладывают свои поделки, со схемами и с кодом, чтоб каждый мог повторить. Бесплатно.
огребете вы по полной при первом же ДПСнике за такой стопе... у вас видимо лишние 5000р и права запасные есть....
первый раз здесь. не знал про раздел "проекты"
корыстные цели не преследую.
если заметили скетч передоставлен бесплатно и по всем вопросам мзду брать не буду!
схема работает на макетке , как установлю в фонарь выложу в раздел.
Доброй ночи,ардуинщики!У меня есть такой скетч:
1. вы влезли в чужую тему.
это плохо.
создайте свою.
2. опубликуйте отформатированный код по правилам форума.
3. здесь программы помогают написать тем, кто что то сам сделал.
4. в разделе "Ищу исполнителя" могут написать за денежку.
Когда-то лепил себе на рассыпухе параллельную цепь на стопы (машина с автоматической коробкой!!):
при отпускании педали газа стопы зажигаются примерно на 0,5 секунды.
Считаю полезной.
Когда-то лепил себе на рассыпухе параллельную цепь на стопы (машина с автоматической коробкой!!):
при отпускании педали газа стопы зажигаются примерно на 0,5 секунды.
Считаю полезной.
Интересная идея! Не лишена рационального зерна. Надо будет при случае реализовать.
https://yadi.sk/d/NK97toRM98l8QA
скетч написан на FLprog для заднего доп .стоп фонаря :
при торможении эфект F1
при вкл поворотах , загорание светодиодов (16шт.) последовательно в сторону поворота
задний ход - мигание
аварийка - встречное направление вкл. светодиодов
доп стоп фонарь состоит из 16 светодиодов
Скетч в IDE
https://yadi.sk/d/oUaIx1YrQR4z0w