PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Рабочий журнал (http://pccar.ru/forumdisplay.php?f=25)
-   -   Nexus 7 2013 Geely Emgrand X7 (http://pccar.ru/showthread.php?t=23362)

RyuuKiiroi 23.03.2016 20:10

Подскажет кто как правильно заставить работать 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);
  }
}


skanch 23.03.2016 21:35

Здесь почитай-возможно это оно...

RyuuKiiroi 28.03.2016 13:28

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

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);
  }
}


RyuuKiiroi 04.04.2016 17:49

Вложений: 1
В чем может быть проблема. Паяюсь к точкам на плате, те что залужены и идут вроде как сразу от разъема. И не могу получить с них сигнал.
Если подключаю через OTG, то все сразу подключается (ардуинка).
В чем вообще там может быть косяк?
Провода данных пробовал менять местами. Вставлял OTG, когда было подключено через точки. Единственное что, не паял плюсовой провод (через OTG он идет конечно), может это как то влиять на ардуину?
Сама ардуина (pro micro) запитана через ACC.

UPD
Проблему решил, на ардуину правда нужно подавать питание, на usb порт.

RyuuKiiroi 08.02.2018 01:59

Что то давно пропал, но спустя столько времени решил продолжить проект.
Было сделано:
Подиумы под динамики НЧ, URAL AS-W165MB, давно их уже поставил, играют очень низко, многим даже саб не нужен будет, но дверь внутри нужно хорошо подготовить, иначе играть не будут.
https://img-fotki.yandex.ru/get/7650...84ae4403_M.jpg

ВЧ Ural AS‑W25TW SQ и СЧ Ural AS-W87M SQ в стойки.
От AS-W50M отказался почти сразу, потому что начинают играть от 750Гц, а я хотел максимально поднять сцену вверх. Как только увидел новые диффузорные СЧ у них на сайте, сразу же купил их вместе с ВЧ и за неделю запилил в стойки.
https://img-fotki.yandex.ru/get/7628...d083f48b_M.jpg
https://img-fotki.yandex.ru/get/7650...18f840fb_M.jpghttps://img-fotki.yandex.ru/get/5092...befa4aaa_M.jpg

Усилитель валяется на том же месте, им тоже займусь, но теперь уже URAL PT 8.120, поканально СЧ,ВЧ и мостом НЧ.

Сейчас леплю морду под магнитолу
https://img-fotki.yandex.ru/get/4780...44ff30bb_M.jpg

Осталось определиться как вывести кнопки и чем ее покрыть.

skanch 08.02.2018 04:55

Цитата:

Сообщение от RyuuKiiroi (Сообщение 399085)
...Осталось определиться как вывести кнопки ...

Как вариант...

RyuuKiiroi 08.02.2018 12:32

Ну да, так думал уже, как самый простой вариант.
Хотя хочется чего то монолитного, как на самсунговских пультах, которые идут на qled моделях. И на некоторых электронных книгах бывают.

skanch 08.02.2018 13:20

Можно сделать сенсорные кнопки... Такие модули тоже использую в своих проектах - маленькие и работают через изолятор очень хорошо (поместить под пластиковой панелью).

RyuuKiiroi 09.02.2018 00:45

Сенсорные кнопки не очень удобны в машине, по обычным не особо попадешь на неровной дороге ))
Я имел ввиду такое, здесь ни одной сенсорной кнопки, но сделать сложновато будет.
https://img-fotki.yandex.ru/get/3714...46d03efa_M.jpg

В загашнике давно валяются кнопки от кассетного видеоплеера, даже на платке, часть выпаял и плату обрезал.
https://img-fotki.yandex.ru/get/4829...67631742_M.jpg

Что то даже получилось, кнопки 2 нарастил и сточил все вровень с мордой.
https://img-fotki.yandex.ru/get/5161...e01ec59d_M.jpghttps://img-fotki.yandex.ru/get/7605...f73bc15f_M.jpg

А сенсорные кнопки где нить в другом месте попробую использовать ))


Часовой пояс GMT +4, время: 14:55.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot