23.03.2016, 20:10 | #21 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
Подскажет кто как правильно заставить работать millis ?
Не получается сделать отсчет для каждого действия, время идет общее. Или просто отсчет идет, а ничего не срабатывает. Код:
int ACC = A4; //сигнал АСС int Nex = 2; //несус int Hub = 3; //хаб int Per = 5; //периферия float Vout = 0.00; float Vbat = 0.00; float R1 = 24000.0; // сопротивление R8 (24кОм) float R2 = 680.0; // сопротивление R7 (680Ом) int ACCState = 0; int State = 0; unsigned long time=0; unsigned long looptime; void setup() { pinMode(ACC,INPUT); pinMode(Per,OUTPUT); pinMode(Nex,OUTPUT); pinMode(Hub,OUTPUT); } void loop() { //Serial.print("analogRead(ACC): "); //Serial.println(analogRead(ACC)); Serial.print("Time: "); Serial.println(time); Serial.print("Vbat: "); Serial.println(Vbat); // считывание аналогового значения ACCState = analogRead(ACC); Vout = (ACCState * 5.0) / 1024.0; Vbat = Vout / (R2/(R1+R2)); if (Vbat<0.09) { Vbat=0.00;// обнуляем нежелательное значение } if (Vbat >= 12.00) { time = millis(); } if (millis() - time >= 200 && Vbat >= 12.00)//если напряжение больше "Х" { digitalWrite(Per,HIGH);//подаем питание на управляющий пин time = 0; State = 1; } if (State == 1) { time = millis(); State = 2; } if (millis() - time >= 200 && State == 2) { digitalWrite(Nex, HIGH); time = 0; State = 3; } if (State == 3) { time = millis(); State = 4; } if (Vbat <= 12.00)//если напряжение меньше "Х" { if (millis() - time >= 200) digitalWrite(Per,LOW);//обестачиваем схему digitalWrite(Nex,LOW); } }
__________________
Nexus 7 2013 Geely Emgrand X7 |
28.03.2016, 13:28 | #23 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
Не заработал у меня в общем код, который везде на этом форуме используется, по крайней мере в том варианте, в котором мне нужен. Получилось что то такое. Не знаю, нужен ли еще какой то функционал.
upd Хотя добавлю наверное еще контроль напряжения, по питающей линии, чтобы если аккумулятор садится, то сразу вырубало, прикрутить бы еще отправку сообщения на телефон при этом, вдруг фары там не выключил)) Код:
int ACC = A0; //сигнал АСС int Per1 = 2; //периферия1 int Per2 = 10; //периферия2 int Hub = 3; //хаб int Nex = 5; //несус float Vout = 0.00; float Vbat = 0.00; float R1 = 24000.0; // сопротивление R8 (24кОм) float R2 = 680.0; // сопротивление R7 (680Ом) int ACCState = 0; int State = 0; unsigned long previousMillis1=0; unsigned long previousMillis2=0; unsigned long previousMillis3=0; unsigned long previousMillis4=0; unsigned long previousMillis5=0; void setup() { pinMode(ACC,INPUT); pinMode(Per1,OUTPUT); pinMode(Per2,OUTPUT); pinMode(Nex,OUTPUT); pinMode(Hub,OUTPUT); } void loop() { unsigned long currentMillis = millis(); unsigned long currentMillis2 = millis(); //Serial.print("analogRead(ACC): "); //Serial.println(analogRead(ACC)); Serial.print("Time: "); Serial.println(currentMillis); Serial.print("Vbat: "); Serial.println(Vbat); // считывание аналогового значения ACCState = analogRead(ACC); Vout = (ACCState * 5.0) / 1024.0; Vbat = Vout / (R2/(R1+R2)); if (Vbat<0.09) { Vbat=0.00;// обнуляем нежелательное значение } //включение реле, вклюление планшета if ((Vbat >= 12.00) && ((unsigned long)(currentMillis - previousMillis1) >= 3000))//если напряжение больше "Х" { previousMillis1 = currentMillis; digitalWrite(Nex,HIGH);//подаем питание на управляющий пин State = 1; } //периферия1 if ((State == 1) && ((unsigned long)(currentMillis - previousMillis2) >= 5000)) { previousMillis2 = currentMillis; digitalWrite(Per1, HIGH); State = 2; } //вклюление хаба if ((State == 2) && ((unsigned long)(currentMillis - previousMillis3) >= 10000)) { previousMillis3 = currentMillis; digitalWrite(Hub, HIGH); State = 3; } //периферия2 if ((State == 3) && ((unsigned long)(currentMillis - previousMillis4) >= 5000)) { previousMillis4 = currentMillis; digitalWrite(Per2, HIGH); State = 4; } //отсчет при потере напряжения if ((State == 4) && Vbat <= 12.00)//если напряжение меньше "Х" { previousMillis5 = currentMillis2; State = 5; } //отключаем периферию 2 if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 2000) { digitalWrite(Per2,LOW); } //отключаем периферию if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 4000) { digitalWrite(Per1,LOW); } //отключаем хаб if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 6000) { digitalWrite(Hub,LOW); } //обестачиваем схему if ((State == 5) && (unsigned long)(currentMillis2 - previousMillis5) >= 8000) { digitalWrite(Nex,LOW); } }
__________________
Nexus 7 2013 Geely Emgrand X7 |
04.04.2016, 17:49 | #24 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
В чем может быть проблема. Паяюсь к точкам на плате, те что залужены и идут вроде как сразу от разъема. И не могу получить с них сигнал.
Если подключаю через OTG, то все сразу подключается (ардуинка). В чем вообще там может быть косяк? Провода данных пробовал менять местами. Вставлял OTG, когда было подключено через точки. Единственное что, не паял плюсовой провод (через OTG он идет конечно), может это как то влиять на ардуину? Сама ардуина (pro micro) запитана через ACC. UPD Проблему решил, на ардуину правда нужно подавать питание, на usb порт.
__________________
Nexus 7 2013 Geely Emgrand X7 Последний раз редактировалось RyuuKiiroi; 04.04.2016 в 20:26. |
08.02.2018, 01:59 | #25 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
Что то давно пропал, но спустя столько времени решил продолжить проект.
Было сделано: Подиумы под динамики НЧ, URAL AS-W165MB, давно их уже поставил, играют очень низко, многим даже саб не нужен будет, но дверь внутри нужно хорошо подготовить, иначе играть не будут. ВЧ Ural AS‑W25TW SQ и СЧ Ural AS-W87M SQ в стойки. От AS-W50M отказался почти сразу, потому что начинают играть от 750Гц, а я хотел максимально поднять сцену вверх. Как только увидел новые диффузорные СЧ у них на сайте, сразу же купил их вместе с ВЧ и за неделю запилил в стойки. Усилитель валяется на том же месте, им тоже займусь, но теперь уже URAL PT 8.120, поканально СЧ,ВЧ и мостом НЧ. Сейчас леплю морду под магнитолу Осталось определиться как вывести кнопки и чем ее покрыть.
__________________
Nexus 7 2013 Geely Emgrand X7 |
08.02.2018, 12:32 | #27 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
Ну да, так думал уже, как самый простой вариант.
Хотя хочется чего то монолитного, как на самсунговских пультах, которые идут на qled моделях. И на некоторых электронных книгах бывают.
__________________
Nexus 7 2013 Geely Emgrand X7 |
08.02.2018, 13:20 | #28 |
Модератор
Регистрация: 19.01.2010
Возраст: 58
Город: Санкт-Петербург
Регион: 78, 98
Сообщений: 2,644
|
Можно сделать сенсорные кнопки... Такие модули тоже использую в своих проектах - маленькие и работают через изолятор очень хорошо (поместить под пластиковой панелью).
|
09.02.2018, 00:45 | #29 |
Старший Пользователь
Регистрация: 15.08.2015
Возраст: 35
Город: Жуковский
Регион: 50, 90, 150
Машина: Emgrand X7
Сообщений: 105
|
Сенсорные кнопки не очень удобны в машине, по обычным не особо попадешь на неровной дороге ))
Я имел ввиду такое, здесь ни одной сенсорной кнопки, но сделать сложновато будет. В загашнике давно валяются кнопки от кассетного видеоплеера, даже на платке, часть выпаял и плату обрезал. Что то даже получилось, кнопки 2 нарастил и сточил все вровень с мордой. А сенсорные кнопки где нить в другом месте попробую использовать ))
__________________
Nexus 7 2013 Geely Emgrand X7 |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|