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

PCCar.ru - Ваш автомобильный компьютер (https://pccar.ru/index.php)
-   Дополнительные устройства (https://pccar.ru/forumdisplay.php?f=177)
-   -   Резистивные кнопки под андроид (https://pccar.ru/showthread.php?t=18478)

Chubaka885 30.06.2015 22:54

Цитата:

Сообщение от nikopol70 (Сообщение 331629)
Ну конечно отключается, через 10 сек после пропадания асс, схема то Ваша и скетч за основу тоже Ваш взял, только кнопки на руле сделаны с утилитой стрит контроль.
Может потому и не виден эффект от паузы...

Скетч бы посмотреть. Он у тебя залился без проблем. Библиотеки USBAPI.h, HID.cpp менял?

Цитата:

Сообщение от Ajlewka (Сообщение 331666)
Блин, мужики, не понимаю. Все меня эти сраные скачки номиналов достали. Уже и отдельным блоком заппитал, и леонардо настроил. Перед блоком питания кондер стоит. Может стоит для сглаживания кондер и на выходе блока питания поставить? Поможет от Разброса номиналов резистивных? Хочу сказать что мерил тестером и напряжение стабильно держится ни десятой не просаживается

Питание ардуино сделали к выводу "5В", как показывали вам раннее?

nikopol70 30.06.2015 23:06

Цитата:

Сообщение от Chubaka885 (Сообщение 331699)
Скетч бы посмотреть. Он у тебя залился без проблем. Библиотеки USBAPI.h, HID.cpp менял?

бибилотеки менял, залилось без проблем, прежде чем заливать изучил и отштудировал тему :tease:

скетч вот
PHP код:

#include <avr/sleep.h>
#include <avr/power.h>

int ACCPin = 2; // Пин АСС
int sleepStatus = 0; // Переменная для хранения статуса (спим, проснулись) - не используется в коде

#define pinKIS1 7 // питание HUB KIS
#define pinIsoAmp 6 // питание ISOAmp
#define relePinTablet 10 // OTG + датчик холла
#define relePinAmp 9 // remote Усилителя, Антены
#define pinRearCam 5 // питание камеры заднего хода
#define ONKIS 100 // время включения KIS, isoAmp
#define ONTablet 2000 // время включения планшета
#define ONAmp 4000 // время включения Усилителя, Антены RemoteAmp
#define OFFKIS 10000 // время выключения KIS
#define OFFTablet 5000 // время выключения планшета
#define OFFAmp 4000 // время выключения Усилителя, Антены

unsigned long duration, millisold, off = 0;
boolean stateACC, relestate1, relestate2, relestate3 = 0;

int analogPin=A0; //пин для резистивных кнопок
int data;  
int data1 = 0;  
int flag = 0;  
unsigned long eventTime = 0; 


void wakeUpNow()                 // Прерывание сработает после пробуждения
{
  if (
sleepStatus)               // Если мы спали,
  
{
    
sleep_disable();             // то первое, что нужно сделать после просыпания - выключить спящий режим
    
sleepStatus = 0;             // В переменную заносим статус бодрствования
    
detachInterrupt(1);          // Выключаем прерывание - при нормальном режиме wakeUpNow() не будет вызываться
  
}
}


void setup()
{
  
pinMode(ACCPin, INPUT);
  
attachInterrupt(1, wakeUpNow, FALLING);    // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow
  
pinMode(pinKIS1, OUTPUT); 
  
pinMode(pinIsoAmp, OUTPUT); 
  
pinMode(relePinTablet, OUTPUT);
  
pinMode(relePinAmp, OUTPUT);
  
pinMode(pinRearCam, OUTPUT);
  
Serial.begin(9600);  
}

void sleepNow()                          // Функция увода ардуины в спячку.
{
  
set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // Здесь устанавливается режим сна
  
sleep_enable();                        // Включаем sleep-бит в регистре mcucr. Теперь возможен слип 
      
  
attachInterrupt(1, wakeUpNow, FALLING);   // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow при появлении низкого уровня на пине 2
  
  
sleepStatus = 1;                       // В переменную заносим статус сна
  
sleep_mode();                          // Здесь устройство перейдет в режим сна!!!
  //-------------------------ПОСЛЕ ПРОСЫПАНИЯ ВЫПОЛНЕНИЕ КОДА ПРОДОЛЖИТСЯ ОТСЮДА!!!--------------------------//
}


void loop()
{
  
Power();
  
Knopki();
  
delay(5);
}

void Power()
 {
  if (!
digitalRead(ACCPin)&&stateACC) 
    {
    
stateACC=0;
    
duration = millis();
    }
  if (
digitalRead(ACCPin)&&!stateACC) 
    {
    
stateACC=1;
    
off = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC && millis ()-duration > ONKIS)
    {
    
digitalWrite(pinKIS1, HIGH);
    
digitalWrite(pinIsoAmp, HIGH);
    
relestate1 = 1;
    
millisold = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration > ONTablet)
    {
    
digitalWrite(relePinTablet, HIGH);
    
relestate2 = 1;
    
millisold = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration > ONAmp)
    {
    
digitalWrite(relePinAmp, HIGH);
    
relestate3 = 1;
    
millisold = millis();
    }
  if(
digitalRead(ACCPin) && stateACC && millis () -off> OFFKIS)
    {
    
Remote.pause();// нажимаем пузу!
    
Remote.clear(); 
    
digitalWrite(pinKIS1, LOW);
    
digitalWrite(pinIsoAmp, LOW);
    
digitalWrite(pinRearCam, LOW);
    
relestate1 = 0;
    
millisold = millis();
    
Serial.end();
    
delay(100);
    
sleepNow(); 
    } 
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off > OFFTablet)
    {
    
digitalWrite(relePinTablet, LOW);
    
relestate2 = 0;
    
millisold = millis();     
    }
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off > OFFAmp)
    {
    
digitalWrite(relePinAmp, LOW);
    
relestate3 = 0;
    
millisold = millis();     
    }  
}

void Knopki()
{
 
data=analogRead(analogPin);  

if(
data>=950 && data1 != 0 && flag <= 1)  
 {  
  
Serial.print("<release:");  
  
Serial.print(data1);  
  
Serial.print(">");  
  
data1 = 0;  
  
flag = 0;  
  
delay(10);  
 }  

if(
data>=950)  
 {  
 
eventTime = millis();  
 }  

if(
data<=949 && flag != 1 && millis()-eventTime>=50 && millis()-eventTime<=800)  
 {  
  
flag = 2;  
  if(
millis()-eventTime <= 60) data1 = data;  
 }  

if(
data>=950 && flag == 2)  
 {  
  
Serial.print("<click:");  
  
Serial.print(data1);  
  
Serial.print(">");  
  
flag = 0;  
  
delay(10);  
 }  

if(
data<=949 && flag == 2 && millis()-eventTime>800)  
 {  
  
Serial.print("<hold:");  
  
Serial.print(data);   
  
Serial.print(">");  
  
data1 = data;  
  
flag = 1;  
  
delay(10);  
 }  
} 


Ajlewka 01.07.2015 08:00

Вложений: 1
Цитата:

Сообщение от lti1 (Сообщение 331682)
Плюсовой провод в USB кабеле разорвали? Рулевые кнопки подключены только к ардуино или к примеру параллельно магнитоле?

Вот такая на данный момент схема.

Я так понимаю это действительно из за плохой фильтрации. Один вариант решения я знаю - больше разницу в номиналах резисторов на руле сделать. А вариант с кондером поможет или нет? Или может еще какие варианты есть

lti1 01.07.2015 11:11

Цитата:

Сообщение от Ajlewka (Сообщение 331717)
Вот такая на данный момент схема.

Я так понимаю это действительно из за плохой фильтрации. Один вариант решения я знаю - больше разницу в номиналах резисторов на руле сделать. А вариант с кондером поможет или нет? Или может еще какие варианты есть

Сопротивление от +5 к A0 забыли указать, или его нет?

Chubaka885 01.07.2015 18:43

Цитата:

Сообщение от nikopol70 (Сообщение 331700)
бибилотеки менял, залилось без проблем, прежде чем заливать изучил и отштудировал тему :tease:

Ступил я немного. Не успевает он наверное паузу принять. Вот так попробуй.
PHP код:

#include <avr/sleep.h>
#include <avr/power.h>

int ACCPin = 2; // Пин АСС
int sleepStatus = 0; // Переменная для хранения статуса (спим, проснулись) - не используется в коде

#define pinKIS1 7 // питание HUB KIS
#define pinIsoAmp 6 // питание ISOAmp
#define relePinTablet 10 // OTG + датчик холла
#define relePinAmp 9 // remote Усилителя, Антены
#define pinRearCam 5 // питание камеры заднего хода
#define ONKIS 100 // время включения KIS, isoAmp
#define ONTablet 2000 // время включения планшета
#define ONAmp 4000 // время включения Усилителя, Антены RemoteAmp
#define OFFKIS 10000 // время выключения KIS
#define OFFTablet 5000 // время выключения планшета
#define OFFAmp 4000 // время выключения Усилителя, Антены

unsigned long duration, millisold, off = 0;
boolean stateACC, relestate1, relestate2, relestate3 = 0;

int analogPin=A0; //пин для резистивных кнопок
int data;  
int data1 = 0;  
int flag = 0;  
unsigned long eventTime = 0; 


void wakeUpNow()                 // Прерывание сработает после пробуждения
{
  if (
sleepStatus)               // Если мы спали,
  
{
    
sleep_disable();             // то первое, что нужно сделать после просыпания - выключить спящий режим
    
sleepStatus = 0;             // В переменную заносим статус бодрствования
    
detachInterrupt(1);          // Выключаем прерывание - при нормальном режиме wakeUpNow() не будет вызываться
  
}
}


void setup()
{
  
pinMode(ACCPin, INPUT);
  
attachInterrupt(1, wakeUpNow, FALLING);    // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow
  
pinMode(pinKIS1, OUTPUT); 
  
pinMode(pinIsoAmp, OUTPUT); 
  
pinMode(relePinTablet, OUTPUT);
  
pinMode(relePinAmp, OUTPUT);
  
pinMode(pinRearCam, OUTPUT);
  
Serial.begin(9600);  
}

void sleepNow()                          // Функция увода ардуины в спячку.
{
  
set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // Здесь устанавливается режим сна
  
sleep_enable();                        // Включаем sleep-бит в регистре mcucr. Теперь возможен слип 
      
  
attachInterrupt(1, wakeUpNow, FALLING);   // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow при появлении низкого уровня на пине 2
  
  
sleepStatus = 1;                       // В переменную заносим статус сна
  
sleep_mode();                          // Здесь устройство перейдет в режим сна!!!
  //-------------------------ПОСЛЕ ПРОСЫПАНИЯ ВЫПОЛНЕНИЕ КОДА ПРОДОЛЖИТСЯ ОТСЮДА!!!--------------------------//
}


void loop()
{
  
Power();
  
Knopki();
  
delay(5);
}

void Power()
 {
  if (!
digitalRead(ACCPin)&&stateACC) 
    {
    
stateACC=0;
    
duration = millis();
    }
  if (
digitalRead(ACCPin)&&!stateACC) 
    {
    
stateACC=1;
    
off = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC && millis ()-duration > ONKIS)
    {
    
digitalWrite(pinKIS1, HIGH);
    
digitalWrite(pinIsoAmp, HIGH);
    
relestate1 = 1;
    
millisold = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration > ONTablet)
    {
    
digitalWrite(relePinTablet, HIGH);
    
relestate2 = 1;
    
millisold = millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration > ONAmp)
    {
    
digitalWrite(relePinAmp, HIGH);
    
relestate3 = 1;
    
millisold = millis();
    }
  if(
digitalRead(ACCPin) && stateACC && millis () -off> OFFKIS)
    {
    
digitalWrite(pinKIS1, LOW);
    
digitalWrite(pinIsoAmp, LOW);
    
digitalWrite(pinRearCam, LOW);
    
relestate1 = 0;
    
millisold = millis();
    
Serial.end();
    
delay(100);
    
sleepNow(); 
    } 
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off > OFFTablet)
    {
    
digitalWrite(relePinTablet, LOW);
    
relestate2 = 0;
    
millisold = millis();     
    }
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off > OFFAmp)
    {
    
Remote.pause();// нажимаем пузу!
    
Remote.clear();
    
digitalWrite(relePinAmp, LOW);
    
relestate3 = 0;
    
millisold = millis();     
    }  
}

void Knopki()
{
 
data=analogRead(analogPin);  

if(
data>=950 && data1 != 0 && flag <= 1)  
 {  
  
Serial.print("<release:");  
  
Serial.print(data1);  
  
Serial.print(">");  
  
data1 = 0;  
  
flag = 0;  
  
delay(10);  
 }  

if(
data>=950)  
 {  
 
eventTime = millis();  
 }  

if(
data<=949 && flag != 1 && millis()-eventTime>=50 && millis()-eventTime<=800)  
 {  
  
flag = 2;  
  if(
millis()-eventTime <= 60) data1 = data;  
 }  

if(
data>=950 && flag == 2)  
 {  
  
Serial.print("<click:");  
  
Serial.print(data1);  
  
Serial.print(">");  
  
flag = 0;  
  
delay(10);  
 }  

if(
data<=949 && flag == 2 && millis()-eventTime>800)  
 {  
  
Serial.print("<hold:");  
  
Serial.print(data);   
  
Serial.print(">");  
  
data1 = data;  
  
flag = 1;  
  
delay(10);  
 }  
} 


Ajlewka 01.07.2015 19:15

Цитата:

Сообщение от lti1 (Сообщение 331730)
Сопротивление от +5 к A0 забыли указать, или его нет?

да есть оно конечно, больше чем сопротивление кнопок.

Ajlewka 02.07.2015 16:36

Цитата:

Сообщение от Chubaka885 (Сообщение 331699)
Питание ардуино сделали к выводу "5В", как показывали вам раннее?

Делал. Не помогает

armlive 02.07.2015 18:41

Цитата:

Сообщение от Ajlewka (Сообщение 331666)
Блин, мужики, не понимаю. Все меня эти сраные скачки номиналов достали. Уже и отдельным блоком заппитал, и леонардо настроил. Перед блоком питания кондер стоит. Может стоит для сглаживания кондер и на выходе блока питания поставить? Поможет от Разброса номиналов резистивных? Хочу сказать что мерил тестером и напряжение стабильно держится ни десятой не просаживается

У меня такая же фигня, на выходе кондер обязателен. Особенно когда заведешь машину, разброс приличный. питается отдельно, но парадокс, если в хаб вставить еще оборудование, с приличным потреблением (к примеру SDR) то значения становятся другими. Спрашивается как???? Ведь хаб питается от одного преобразователя, а Леонардо от другого.

Ajlewka 03.07.2015 16:24

Цитата:

Сообщение от armlive (Сообщение 331880)
У меня такая же фигня, на выходе кондер обязателен. Особенно когда заведешь машину, разброс приличный. питается отдельно, но парадокс, если в хаб вставить еще оборудование, с приличным потреблением (к примеру SDR) то значения становятся другими. Спрашивается как???? Ведь хаб питается от одного преобразователя, а Леонардо от другого.

А есть стабилизаторы же общие, которые прям к аккумулятору ставятся. Может такая штука поможет? Ну или номиналы в руле менять... Другого выхода не вижу

armlive 03.07.2015 17:28

Цитата:

Сообщение от Ajlewka (Сообщение 331934)
А есть стабилизаторы же общие, которые прям к аккумулятору ставятся. Может такая штука поможет? Ну или номиналы в руле менять... Другого выхода не вижу

А ты проведи чисто эксперимент, возьми леонардо, подключи к ноутбуку и пусть питается от усб. Отдельно возьми два провода с кнопок и протестируй.

Блин , был-бы осциллограф, легче бы было найти причину


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

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