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

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Дополнительные устройства (http://pccar.ru/forumdisplay.php?f=177)
-   -   Резистивные кнопки под андроид (http://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 durationmillisoldoff 0;
boolean stateACCrelestate1relestate2relestate3 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(ACCPinINPUT);
  
attachInterrupt(1wakeUpNowFALLING);    // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow
  
pinMode(pinKIS1OUTPUT); 
  
pinMode(pinIsoAmpOUTPUT); 
  
pinMode(relePinTabletOUTPUT);
  
pinMode(relePinAmpOUTPUT);
  
pinMode(pinRearCamOUTPUT);
  
Serial.begin(9600);  
}

void sleepNow()                          // Функция увода ардуины в спячку.
{
  
set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // Здесь устанавливается режим сна
  
sleep_enable();                        // Включаем sleep-бит в регистре mcucr. Теперь возможен слип 
      
  
attachInterrupt(1wakeUpNowFALLING);   // Используем прерывание 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(pinKIS1HIGH);
    
digitalWrite(pinIsoAmpHIGH);
    
relestate1 1;
    
millisold millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration ONTablet)
    {
    
digitalWrite(relePinTabletHIGH);
    
relestate2 1;
    
millisold millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration ONAmp)
    {
    
digitalWrite(relePinAmpHIGH);
    
relestate3 1;
    
millisold millis();
    }
  if(
digitalRead(ACCPin) && stateACC && millis () -offOFFKIS)
    {
    
Remote.pause();// нажимаем пузу!
    
Remote.clear(); 
    
digitalWrite(pinKIS1LOW);
    
digitalWrite(pinIsoAmpLOW);
    
digitalWrite(pinRearCamLOW);
    
relestate1 0;
    
millisold millis();
    
Serial.end();
    
delay(100);
    
sleepNow(); 
    } 
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off OFFTablet)
    {
    
digitalWrite(relePinTabletLOW);
    
relestate2 0;
    
millisold millis();     
    }
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off OFFAmp)
    {
    
digitalWrite(relePinAmpLOW);
    
relestate3 0;
    
millisold millis();     
    }  
}

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

if(
data>=950 && data1 != && 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 != && millis()-eventTime>=50 && millis()-eventTime<=800)  
 {  
  
flag 2;  
  if(
millis()-eventTime <= 60data1 data;  
 }  

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

if(
data<=949 && flag == && 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 durationmillisoldoff 0;
boolean stateACCrelestate1relestate2relestate3 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(ACCPinINPUT);
  
attachInterrupt(1wakeUpNowFALLING);    // Используем прерывание 1 (pin 2) для выполнения функции wakeUpNow
  
pinMode(pinKIS1OUTPUT); 
  
pinMode(pinIsoAmpOUTPUT); 
  
pinMode(relePinTabletOUTPUT);
  
pinMode(relePinAmpOUTPUT);
  
pinMode(pinRearCamOUTPUT);
  
Serial.begin(9600);  
}

void sleepNow()                          // Функция увода ардуины в спячку.
{
  
set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // Здесь устанавливается режим сна
  
sleep_enable();                        // Включаем sleep-бит в регистре mcucr. Теперь возможен слип 
      
  
attachInterrupt(1wakeUpNowFALLING);   // Используем прерывание 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(pinKIS1HIGH);
    
digitalWrite(pinIsoAmpHIGH);
    
relestate1 1;
    
millisold millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration ONTablet)
    {
    
digitalWrite(relePinTabletHIGH);
    
relestate2 1;
    
millisold millis();
    }
  if(!
digitalRead(ACCPin) && !stateACC &&  millis ()-duration ONAmp)
    {
    
digitalWrite(relePinAmpHIGH);
    
relestate3 1;
    
millisold millis();
    }
  if(
digitalRead(ACCPin) && stateACC && millis () -offOFFKIS)
    {
    
digitalWrite(pinKIS1LOW);
    
digitalWrite(pinIsoAmpLOW);
    
digitalWrite(pinRearCamLOW);
    
relestate1 0;
    
millisold millis();
    
Serial.end();
    
delay(100);
    
sleepNow(); 
    } 
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off OFFTablet)
    {
    
digitalWrite(relePinTabletLOW);
    
relestate2 0;
    
millisold millis();     
    }
  if(
digitalRead(ACCPin) && stateACC &&  millis ()-off OFFAmp)
    {
    
Remote.pause();// нажимаем пузу!
    
Remote.clear();
    
digitalWrite(relePinAmpLOW);
    
relestate3 0;
    
millisold millis();     
    }  
}

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

if(
data>=950 && data1 != && 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 != && millis()-eventTime>=50 && millis()-eventTime<=800)  
 {  
  
flag 2;  
  if(
millis()-eventTime <= 60data1 data;  
 }  

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

if(
data<=949 && flag == && 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, время: 20:46.

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