Kent5601
26.08.2015, 19:05
всем привет!
после ряда неудач решил не опускать руки и продолжить создание всеядного CarPC!
1) Был куплен 8-ми дюймовый планшет Prestigio MultiPad PMP880TD на Win 8.1
цена 4500 руб.
нашел в планшете 2 минуса!
первое это то что у него нет GPS
второе 16gb встроенной памяти это катастрофически МАЛО
2) переносной жесткий диск аж на целый таробайт)))):smile2:
3) присмотрел на aliexpress.com звуковую карту! про все функции писать не буду нужна она для избавления от магнитолы что бы звук пустить напрямую на усилители (в будущем)
https://pp.vk.me/c623424/v623424177/45d80/uSqn8EX2nDw.jpg
4) давно были куплены DC-DC преобразователь KIS-3R33S 2 штуки
1 для питания планшета
2 для питания хаба
5) хаб китайский дома нашел про него рассказывать не буду
6) купил еще ардуино леонардо
схема подключения питание планшета и периферии
https://pp.vk.me/c623424/v623424177/45da3/CS8aOa9jLpQ.jpg
модуль питания для планшета был переделан! выпаял резистор который управляет напряжением и припаян подстроечный резистор!
по поводу OTG
интересная ситуация у данного планшета! читал на 4пда что этот планшет может работать и без шнурка "отг"! если не подключать GND к ID то планшет будет видеть хаб с периферией и заряжаться! ЭТО ОЧЕНЬ СИЛЬНО ПОРАДОВАЛО!
схема подключения ардуино
ОГРОМНОЕ СПАСИБО РЕБЯТАМ lti1 И ВладимирC
потому что сам не разобрался как сделать включение через ардуино :dntknw:
ACC будет от сигнализации
https://pp.vk.me/c623424/v623424177/45dad/184dBkgtNlU.jpg
скетч от lti1 задумка ВладимирC
unsigned long currentTime;
unsigned long loopTime;
const int pin_enc_A = 2;
const int pin_enc_B = 3;
const int pin_pause = 4;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
unsigned char pause;
//// реле
int ACC = 4; // D4 вход ACC
int Hub = 5; // D5 выход управления хабом
int Hall = 6; // D6 выход управления датчиком холла
int flagACC = 0;
unsigned long pauseTime = 0;
//кнопки
//****************** Здесь необходимо указать свои значения ***************
int analogPin=0; // пин для подключения кнопок, по умолчанию A0
int release_button = 0; // значение при отпущенных кнопках
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках
int button_range = 10; // диапазон значения нажатых кнопок + -
int time_holding = 500; // время для удержания кнопок в миллисекундах
int time_tinkling = 10; // время исключающее дребезг контактов в миллисекундах
int vol_up = 288; // значение кнопки увеличить громкость
int vol_down = 333; // значение кнопки уменьшить громкость
int alt_tab = 469; // значение кнопки которая будет работать как Alt + Tab
int next = 595; // значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании
int previous = 792; // значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании
int play_pause = 777; // значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании
//************************************************** ************************
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
unsigned long pauseMillis = 0;
void setup() {
pinMode(pin_enc_A, INPUT_PULLUP); // encoder 1
pinMode(pin_enc_B, INPUT_PULLUP); // encoder 2
currentTime = millis();
loopTime = currentTime;
Keyboard.begin();
//// кнопки
Serial.begin(9600);
////реле
pinMode(ACC, INPUT);
pinMode(Hub, OUTPUT);
pinMode(Hall, OUTPUT);
}
void loop() {
currentTime = millis();
if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц)
encoder_A = digitalRead(pin_enc_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_enc_B); // считываем состояние выхода А энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B)
{
// выход В в полож. сост., значит вращение по часовой стрелке
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Remote.increase();
delay(50);
Keyboard.releaseAll();
}
else {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Remote.decrease();
delay(50);
Keyboard.releaseAll();
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
loopTime = currentTime;
}
//// кнопки
Serial.println(data);
data=analogRead(analogPin);
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 0)
{
eventTime=millis();
}
//********************** Громкость ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_up - button_range && data <= vol_up + button_range && flag == 0)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= vol_up - button_range && data <= vol_up + button_range && flag == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3)
{
Remote.increase();
flag = 3;
Remote.clear();
delay(100);
}
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_down - button_range && data <= vol_down + button_range && flag == 0)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= vol_down - button_range && data <= vol_down + button_range && flag == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3)
{
Remote.decrease();
flag = 3;
Remote.clear();
delay(100);
}
//********************** AltTab + Ещё что то ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= alt_tab - button_range && data <= alt_tab + button_range)
{
flag = 1;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis == 0)
{
Keyboard.press(KEY_LEFT_ALT );
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis != 0)
{
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}
if(pauseMillis && millis()-pauseMillis >= 800 && data>=release_button - button_release_range && data<=release_button + button_release_range)
{
flag = 0;
pauseMillis = 0;
Keyboard.releaseAll();
}
if(millis()-eventTime>time_holding && data >= alt_tab - button_range && data <= alt_tab + button_range && flag == 1)
{
flag = 0;
}
//********************** Next и Fast Forward ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= next - button_range && data <= next + button_range)
{
flag = 2;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 2)
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= next - button_range && data <= next + button_range && flag == 2 || data >= next - button_range && data <= next + button_range && flag == 3)
{
Remote.forward();
flag = 3;
Remote.clear();
delay(100);
}
//********************** Previous и Rewind ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= previous - button_range && data <= previous + button_range)
{
flag = 4;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 4)
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= previous - button_range && data <= previous + button_range && flag == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3)
{
Remote.rewind();
flag = 3;
Remote.clear();
delay(100);
}
//********************** Play/pause + Mute ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= play_pause - button_range && data <= play_pause + button_range)
{
flag = 7;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 7)
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= play_pause - button_range && data <= play_pause + button_range && flag == 7)
{
Remote.mute();
flag = 0;
delay(10);
Remote.clear();
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6)
{
flag = 0;
}
// ********** упровление питание **********
if (digitalRead(ACC)== HIGH && flagACC == 0)
{
digitalWrite(Hub, HIGH);
pauseTime = millis();
flagACC = 1;
}
if (millis()-pauseTime>=4000 && flagACC == 1) // пауза 2 секунды
{
digitalWrite(Hall, HIGH);
pauseTime = 0;
}
if (digitalRead(ACC)== LOW && flagACC == 1)
{
digitalWrite(Hall, LOW);
pauseTime = millis();
flagACC = 0;
}
if (millis()-pauseTime>=6000 && flagACC == 0) // пауза 10 минут
{
digitalWrite(Hub, LOW);
pauseTime = 0;
}
}
скорее всего пробной установкой в машину буду заниматься в на выходных!
куда монтировать пока думаю
может быть так
https://pp.vk.me/c622524/v622524177/2d325/3BYBCUVgxXc.jpg
НЕ СУДИТЕ СТРОГО Я НОВИЧОК В ЭТОМ ДЕЛЕ!!!
после ряда неудач решил не опускать руки и продолжить создание всеядного CarPC!
1) Был куплен 8-ми дюймовый планшет Prestigio MultiPad PMP880TD на Win 8.1
цена 4500 руб.
нашел в планшете 2 минуса!
первое это то что у него нет GPS
второе 16gb встроенной памяти это катастрофически МАЛО
2) переносной жесткий диск аж на целый таробайт)))):smile2:
3) присмотрел на aliexpress.com звуковую карту! про все функции писать не буду нужна она для избавления от магнитолы что бы звук пустить напрямую на усилители (в будущем)
https://pp.vk.me/c623424/v623424177/45d80/uSqn8EX2nDw.jpg
4) давно были куплены DC-DC преобразователь KIS-3R33S 2 штуки
1 для питания планшета
2 для питания хаба
5) хаб китайский дома нашел про него рассказывать не буду
6) купил еще ардуино леонардо
схема подключения питание планшета и периферии
https://pp.vk.me/c623424/v623424177/45da3/CS8aOa9jLpQ.jpg
модуль питания для планшета был переделан! выпаял резистор который управляет напряжением и припаян подстроечный резистор!
по поводу OTG
интересная ситуация у данного планшета! читал на 4пда что этот планшет может работать и без шнурка "отг"! если не подключать GND к ID то планшет будет видеть хаб с периферией и заряжаться! ЭТО ОЧЕНЬ СИЛЬНО ПОРАДОВАЛО!
схема подключения ардуино
ОГРОМНОЕ СПАСИБО РЕБЯТАМ lti1 И ВладимирC
потому что сам не разобрался как сделать включение через ардуино :dntknw:
ACC будет от сигнализации
https://pp.vk.me/c623424/v623424177/45dad/184dBkgtNlU.jpg
скетч от lti1 задумка ВладимирC
unsigned long currentTime;
unsigned long loopTime;
const int pin_enc_A = 2;
const int pin_enc_B = 3;
const int pin_pause = 4;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
unsigned char pause;
//// реле
int ACC = 4; // D4 вход ACC
int Hub = 5; // D5 выход управления хабом
int Hall = 6; // D6 выход управления датчиком холла
int flagACC = 0;
unsigned long pauseTime = 0;
//кнопки
//****************** Здесь необходимо указать свои значения ***************
int analogPin=0; // пин для подключения кнопок, по умолчанию A0
int release_button = 0; // значение при отпущенных кнопках
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках
int button_range = 10; // диапазон значения нажатых кнопок + -
int time_holding = 500; // время для удержания кнопок в миллисекундах
int time_tinkling = 10; // время исключающее дребезг контактов в миллисекундах
int vol_up = 288; // значение кнопки увеличить громкость
int vol_down = 333; // значение кнопки уменьшить громкость
int alt_tab = 469; // значение кнопки которая будет работать как Alt + Tab
int next = 595; // значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании
int previous = 792; // значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании
int play_pause = 777; // значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании
//************************************************** ************************
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
unsigned long pauseMillis = 0;
void setup() {
pinMode(pin_enc_A, INPUT_PULLUP); // encoder 1
pinMode(pin_enc_B, INPUT_PULLUP); // encoder 2
currentTime = millis();
loopTime = currentTime;
Keyboard.begin();
//// кнопки
Serial.begin(9600);
////реле
pinMode(ACC, INPUT);
pinMode(Hub, OUTPUT);
pinMode(Hall, OUTPUT);
}
void loop() {
currentTime = millis();
if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц)
encoder_A = digitalRead(pin_enc_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_enc_B); // считываем состояние выхода А энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B)
{
// выход В в полож. сост., значит вращение по часовой стрелке
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Remote.increase();
delay(50);
Keyboard.releaseAll();
}
else {
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Remote.decrease();
delay(50);
Keyboard.releaseAll();
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
loopTime = currentTime;
}
//// кнопки
Serial.println(data);
data=analogRead(analogPin);
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 0)
{
eventTime=millis();
}
//********************** Громкость ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_up - button_range && data <= vol_up + button_range && flag == 0)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= vol_up - button_range && data <= vol_up + button_range && flag == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3)
{
Remote.increase();
flag = 3;
Remote.clear();
delay(100);
}
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_down - button_range && data <= vol_down + button_range && flag == 0)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= vol_down - button_range && data <= vol_down + button_range && flag == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3)
{
Remote.decrease();
flag = 3;
Remote.clear();
delay(100);
}
//********************** AltTab + Ещё что то ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= alt_tab - button_range && data <= alt_tab + button_range)
{
flag = 1;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis == 0)
{
Keyboard.press(KEY_LEFT_ALT );
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis != 0)
{
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}
if(pauseMillis && millis()-pauseMillis >= 800 && data>=release_button - button_release_range && data<=release_button + button_release_range)
{
flag = 0;
pauseMillis = 0;
Keyboard.releaseAll();
}
if(millis()-eventTime>time_holding && data >= alt_tab - button_range && data <= alt_tab + button_range && flag == 1)
{
flag = 0;
}
//********************** Next и Fast Forward ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= next - button_range && data <= next + button_range)
{
flag = 2;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 2)
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= next - button_range && data <= next + button_range && flag == 2 || data >= next - button_range && data <= next + button_range && flag == 3)
{
Remote.forward();
flag = 3;
Remote.clear();
delay(100);
}
//********************** Previous и Rewind ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= previous - button_range && data <= previous + button_range)
{
flag = 4;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 4)
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= previous - button_range && data <= previous + button_range && flag == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3)
{
Remote.rewind();
flag = 3;
Remote.clear();
delay(100);
}
//********************** Play/pause + Mute ************************************
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= play_pause - button_range && data <= play_pause + button_range)
{
flag = 7;
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 7)
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>time_holding && data >= play_pause - button_range && data <= play_pause + button_range && flag == 7)
{
Remote.mute();
flag = 0;
delay(10);
Remote.clear();
}
if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6)
{
flag = 0;
}
// ********** упровление питание **********
if (digitalRead(ACC)== HIGH && flagACC == 0)
{
digitalWrite(Hub, HIGH);
pauseTime = millis();
flagACC = 1;
}
if (millis()-pauseTime>=4000 && flagACC == 1) // пауза 2 секунды
{
digitalWrite(Hall, HIGH);
pauseTime = 0;
}
if (digitalRead(ACC)== LOW && flagACC == 1)
{
digitalWrite(Hall, LOW);
pauseTime = millis();
flagACC = 0;
}
if (millis()-pauseTime>=6000 && flagACC == 0) // пауза 10 минут
{
digitalWrite(Hub, LOW);
pauseTime = 0;
}
}
скорее всего пробной установкой в машину буду заниматься в на выходных!
куда монтировать пока думаю
может быть так
https://pp.vk.me/c622524/v622524177/2d325/3BYBCUVgxXc.jpg
НЕ СУДИТЕ СТРОГО Я НОВИЧОК В ЭТОМ ДЕЛЕ!!!