Просмотр полной версии : iCarDS + Arduino = iCarDuino
Bersenev
28.01.2012, 21:44
Начинаем работы по поддержке Arduino в iCar DS.
Текущая версия плагина поддерживает устройства JoyStick и PultIK http://carmonitor.ru/ru/-c-83_60.html на базе arduino http://www.compcar.ru/forum/showthread.php?t=4959
Для установки
- копируем содержимое архива в папку ..\iCar DS\Extentions\iCarDuino
- Регистрируем плагин запустив RunMe1st.cmd
- В iCarDSConfig закладка Global Vars добавляем duino_com=номер порта и duino_com_baudRate=скорость порта, допустим duino_com=20 и duino_com_baudRate=115200, если для связи с arduino используется COM20 и в скетче для ардуино задана скорость 115200
- Запускаем iCarDS со скином Хамелеон, на четвёртом экране настроек включаем загрузку плагина iCarDuino и перезапускаем iCarDS
- Заходим на четвёртый экран настроек -Настройка кнопок CarDuino
- Нажимаем рулевую кнопку, кнопку на ИК пульте или поворачиваем энкодер, в результате к списку добавиться код данной кнопки.
- Нажимаем на кнопку ЭКРАН или ДИНАМИЧЕСКИЕ КНОПКИ, и выбираем действие для текущей кнопки CarDuino.
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-505.jpg
- Повторяем действия для всех кнопок
- После выхода из экрана настроек, можно управлять икаром с рулевых кнопок, ИК пульта и энкодера без сторонних программ
Требуется FrameWork 2.0, iCarDS 1.7.0.8 и скин Хамелеон от 28/08/2012
Если вы в состоянии загрузить в arduino другой код, то можете ещё использовать температурные датчики DS18B20, акселерометр, два энкодера и до четырёх блоков реле
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-504.jpg
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-506.jpg
Блок реле можно приобрести у меня.
В качестве конструктора 750р за блок, в собранном виде 1000р.
Обращаемся в личку
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-600.jpg
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-507.jpg
Для этого соберите устройство по схеме
http://pccar.ru/attachment.php?attachmentid=27670&stc=1&d=1350766943
Загружаете код для adruino , требуются библиотеки IRremote, OneWire
//
#include <IRremote.h>
#include <OneWire.h>
#include <SPI.h>
#include <EEPROM.h>
#define RES_KEY_FLAG_ 0x76 // Флаг первого запуска скетча
byte bytes[4];
//-----------------------------------------
//- входы(пины) ардуино -
//-----------------------------------------
int WIRE_PIN = 4; // цифровой вход(пин) 1WIRE-шины ( температурные датчики )
int RECV_PIN = 7; // цифровой вход(пин) ИК приемника
int REG_SELECT = 8 ; // цифровой вход(пин), управляющий защёлкой (SS в терминах SPI)
int xpin=0; // аналоговый вход(пин) для оси X акселерометра
int ypin=1; // аналоговый вход(пин) для оси Y акселерометра
int zpin=2; // аналоговый вход(пин) для оси Z акселерометра
int ENCODER1_PIN = 6 ; // аналоговый вход(пин) для первого энкодера
int ENCODER2_PIN = 7 ; // аналоговый вход(пин) для второго энкодера
int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок
//-----------------------------------------
//- переменные включения функций скетча -
//-----------------------------------------
boolean is_ir_key = false;
boolean is_temperature_sensors = false;
boolean is_accelerometer = false;
boolean is_encoder_1 = false;
boolean is_encoder_2 = false;
boolean is_res_keys = false;
boolean is_relay_state = false;
//-----------------------------------------
//- Переменные для температурных датчиков -
//-----------------------------------------
OneWire ds(WIRE_PIN);
byte addr[8];
byte data[12];
unsigned long temperature_sensors_milles;
unsigned long temperature_sensors_wait_milles = 500; // Интервал передачи данных от температурных датчиков
//-----------------------------------------
//- Переменные для ИК датчика -
//-----------------------------------------
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long ir_dt;
unsigned long ir_dt_old = 0;
unsigned long ir_dt_millis;
unsigned long ir_wait_millis;
unsigned long ir_wait_first = 250; // время ожидания после первого нажатия кнопки
unsigned long ir_wait_next = 200; // время ожидания при удержании
//-----------------------------------------
//- Переменные для акселерометра -
//-----------------------------------------
int x, y, z;
int xyz[4];
int n=0;
int x_cal=0;
int y_cal=0; //калибровка датчика
int z_cal=0;
unsigned long accelerometer_milles;
unsigned long accelerometer_wait_milles = 80; // Интервал передачи данных от акселерометра
//-----------------------------------------
//- Переменные для первого энкодера -
//-----------------------------------------
unsigned long encoder1_dt;
unsigned long encoder1_key=0;
unsigned long encoder1_key_old=0;
int encoder1_key1 = 0;
int encoder1_key2 = 0;
int encoder1_key3 = 0;
unsigned long encoder1_millis;
unsigned long encoder1_wait_millis=1;
unsigned long encoder1_key_wait = 500; // время ожидания до следующего нажатия кнопки энкодера
unsigned long encoder1_key_wait_millis;
unsigned long encoder1_key_millis;
unsigned long encoder1_dt_sum = 0;
int encoder1_dt_n = 0;
//-----------------------------------------
//- Переменные для второго энкодера -
//-----------------------------------------
unsigned long encoder2_dt;
unsigned long encoder2_key=0;
unsigned long encoder2_key_old=0;
int encoder2_key1 = 0;
int encoder2_key2 = 0;
int encoder2_key3 = 0;
unsigned long encoder2_millis;
unsigned long encoder2_wait_millis=1;
unsigned long encoder2_key_wait = 500; // время ожидания до следующего нажатия кнопки энкодера
unsigned long encoder2_key_wait_millis;
unsigned long encoder2_key_millis;
//-----------------------------------------
//- Переменные для резестивных кнопок -
//-----------------------------------------
unsigned long res_dt = 0;
unsigned long res_dt_sum=0;
#define RES_DT_COUNT 500 // Количество считываемых данных
#define RES_DT_SKIP_COUNT 100 // Количество данных, которые надо пропустить при нажатии
#define RES_DT_POINT 6 // Точность
int res_dt_n = 0;
unsigned long res_key=0;
unsigned long res_key_old=0;
unsigned long res_key_wait_first = 500; // время ожидания после первого нажатия кнопки
unsigned long res_key_wait_next = 250; // время ожидания до следующего нажатия кнопки
unsigned long res_key_wait_millis = 0;
unsigned long res_key_millis;
unsigned long res_key_array[51][2];
unsigned int res_key_count = 0;
unsigned int res_key_delta = 3;
//-----------------------------------------
//- Переменные для управления блоком реле -
//-----------------------------------------
unsigned long relays_milles ;
unsigned long relays_wait_milles = 1000;
static uint8_t relays_state1 = 0x0000;
static uint8_t relays_state2 = 0x0000;
static uint8_t relays_state3 = 0x0000;
static uint8_t relays_state4 = 0x0000;
void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // включить приемник
xyz[0]=0;
xyz[1]=0; // прочитать значение осей
xyz[2]=0;
ir_wait_millis = ir_wait_first;
accelerometer_milles = millis();
temperature_sensors_milles = millis();
encoder1_key_millis = millis();
encoder2_key_millis = millis();
encoder1_millis = millis();
encoder2_millis = millis();
res_key_millis = millis();
relays_milles = millis();
encoder1_key_wait_millis=encoder1_key_wait;
encoder2_key_wait_millis=encoder2_key_wait;
unsigned int first_run_key = EEPROM.read(0);
if ( first_run_key == RES_KEY_FLAG_ )
{
res_key_count = EEPROM.read(1);
//EEPROM.write(addr, val);
for(int i=0; i<res_key_count;i++)
{
res_key_array[i][0] = (EEPROM.read(i+2) * 256) + EEPROM.read(i+2+50) - res_key_delta; res_key_array[i][1] = res_key_array[i][0] + res_key_delta + res_key_delta;
}
}
for(int i=res_key_count; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}
// Инициализируем шину SPI. Если используется программная реализация,
// то вы должны сами настроить пины, по которым будет работать SPI.
SPI.begin();
pinMode(REG_SELECT, OUTPUT);
digitalWrite(REG_SELECT, LOW); // выбор ведомого - нашего регистра
SPI.transfer(relays_state4); // очищаем содержимое регистра
SPI.transfer(relays_state3);
SPI.transfer(relays_state2);
SPI.transfer(relays_state1);
// Завершаем передачу данных. После этого регистр установит
// на выводах Q0-Q7 уровни, соответствующие записанным битам.
digitalWrite(REG_SELECT, HIGH);
}
void loop()
{
if (Serial.available() >= 1) // Проверяем наличие команд от компьютера
{
switch (Serial.read())
{
case 0x01: // включить передачу данных от ик-пульта
is_ir_key = true;
break;
case 0x02: // включить передачу данных от датчиков температуры
is_temperature_sensors = true;
break;
case 0x03: // включить передачу данных от акселерометра
is_accelerometer = true;
break;
case 0x04: // включить передачу данных от первого энкодера
is_encoder_1 = true;
break;
case 0x05: // включить передачу данных от второго экнодера
is_encoder_2 = true;
break;
case 0x06: // включить передачу данных от резестивных кнопок
is_res_keys = true;
break;
case 0x07: // включить передачу данных о состоянии реле
is_relay_state = true;
break;
case 0x17: // восстановить состояние реле
{
relays_state1 = EEPROM.read(211);
relays_state2 = EEPROM.read(212);
relays_state3 = EEPROM.read(213);
relays_state4 = EEPROM.read(214);
digitalWrite(REG_SELECT, LOW);
SPI.transfer(relays_state4);
SPI.transfer(relays_state3);
SPI.transfer(relays_state2);
SPI.transfer(relays_state1);
digitalWrite(REG_SELECT, HIGH);
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
break;
case 0x81: // выключить передачу данных от ик-пульта
is_ir_key = false;
break;
case 0x82: // выключить передачу данных от датчиков температуры
is_temperature_sensors = false;
break;
case 0x83: // выключить передачу данных от акселерометра
is_accelerometer = false;
break;
case 0x84: // выключить передачу данных от первого энкодера
is_encoder_1 = false;
break;
case 0x85: // выключить передачу данных от второго энкодера
is_encoder_2 = false;
break;
case 0x86: // выключить передачу данных от резестивных кнопок
is_res_keys = false;
break;
case 0x87: // выключить передачу данных от резестивных кнопок
is_relay_state = false;
break;
case 0x27: // сохранить текущее состояние реле и отключить их
{
EEPROM.write(211,relays_state1);
EEPROM.write(212,relays_state2);
EEPROM.write(213,relays_state3);
EEPROM.write(214,relays_state4);
relays_state1 = 0;
relays_state2 = 0;
relays_state3 = 0;
relays_state4 = 0;
digitalWrite(REG_SELECT, LOW);
SPI.transfer(relays_state4);
SPI.transfer(relays_state3);
SPI.transfer(relays_state2);
SPI.transfer(relays_state1);
digitalWrite(REG_SELECT, HIGH);
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
break;
case 0xAA: // выключить передачу данных от резестивных кнопок
{
while (Serial.available() < 5) {}
int i = Serial.read();
bytes[0] = Serial.read(); // преобразовать в 4-байта
bytes[1] = Serial.read();
bytes[2] = Serial.read();
bytes[3] = Serial.read();
unsigned long key_res_min = 0; key_res_min = bytes[0]; key_res_min = key_res_min * 256 + bytes[1];
unsigned long key_res_max = 0; key_res_max = bytes[2]; key_res_max = key_res_max * 256 + bytes[3];
res_key_array[i-1][0] = key_res_min;
res_key_array[i-1][1] = key_res_max;
}
break;
case 0xAB: // сбросить настройки резестивных кнопок в EEPROM
{
EEPROM.write(0,0); // сбросить флаг первого запуска
res_key_count = 0; // сбросить количество резистивных кнопок
EEPROM.write(1,0); //
for(int i=0; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}
}
break;
case 0xBB: // Команда управление реле
{
while (Serial.available() < 2) {}
byte relay_number = Serial.read();
byte relay_command = Serial.read();
if( relay_number == 0 && relay_command == 0xFF )
{
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
uint8_t one = 1 ;
switch (relay_command)
{
case 0x00: // выключить реле № relay_number
if(relay_number <=8)
{
relays_state1 = relays_state1 & ~( one << (relay_number - 1) );
}
else
{
if(relay_number <=16)
{
relays_state2 = relays_state2 & ~( one << (relay_number - 9) );
}
else
{
if(relay_number <=24)
{
relays_state3 = relays_state3 & ~( one << (relay_number - 17) );
}
else
{
if(relay_number <=32)
{
relays_state4 = relays_state4 & ~( one << (relay_number - 25) );
}
}
}
}
digitalWrite(REG_SELECT, LOW);
SPI.transfer(relays_state4);
SPI.transfer(relays_state3);
SPI.transfer(relays_state2);
SPI.transfer(relays_state1);
digitalWrite(REG_SELECT, HIGH);
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
break;
case 0x01: // включить реле № relay_number
if(relay_number <=8)
{
relays_state1 = relays_state1 | ( one << (relay_number - 1) );
}
else
{
if(relay_number <=16)
{
relays_state2 = relays_state2 | ( one << (relay_number - 9) );
}
else
{
if(relay_number <=24)
{
relays_state3 = relays_state3 | ( one << (relay_number - 17) );
}
else
{
if(relay_number <=32)
{
relays_state4 = relays_state4 | ( one << (relay_number - 25) );
}
}
}
}
digitalWrite(REG_SELECT, LOW);
SPI.transfer(relays_state4);
SPI.transfer(relays_state3);
SPI.transfer(relays_state2);
SPI.transfer(relays_state1);
digitalWrite(REG_SELECT, HIGH);
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
break;
}
}
}
break;
}
}
if( is_ir_key ) ir_key(); // ИК приёмник
if( is_temperature_sensors ) temperature_sensors(); // температурные датчики
if( is_accelerometer ) accelerometer(); // акселерометр
if( is_encoder_1 ) encoder_1(); // первый энкодер
if( is_encoder_2 ) encoder_2(); // второй энкодер
if( is_res_keys ) res_keys(); // резестивные кнопки
if( is_relay_state ) relay_state();
}
//----------------------------------------------------------------------------------
// Функция работы с реле
//----------------------------------------------------------------------------------
void relay_state()
{
if( relays_milles + relays_wait_milles < millis() )
{
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
relays_milles = millis();
}
}
//----------------------------------------------------------------------------------
// Функция работы с резестивными кнопками
//----------------------------------------------------------------------------------
void res_keys()
{
{
res_dt = analogRead(RES_PIN); // прочитать данные АЦП
if( res_dt >= 0x05 && res_dt <= 0x3F0 )
{
res_dt_n++;
if( res_dt_n > RES_DT_SKIP_COUNT )
{
res_dt_sum += (res_dt << RES_DT_POINT);
if( res_dt_n == RES_DT_COUNT)
{
res_key = (res_dt_sum / (RES_DT_COUNT - RES_DT_SKIP_COUNT));
res_key = (((((( res_dt_sum / (( RES_DT_COUNT - RES_DT_SKIP_COUNT ) + (2^(RES_DT_POINT-1)-1) ) >> (RES_DT_POINT-1)) + 1) >> 1) + 1)>> 1)); // + 1) >> 1;
res_dt_sum = 0; res_dt_n = 0;
}
}
}
else
{
res_dt_sum = 0; res_dt_n = 0; res_key = 0;
res_key_wait_millis = 0;
}
}
if( res_key_millis + res_key_wait_millis*2 <= millis() ) { res_key_old = 0; }
if( res_key_millis + res_key_wait_millis <= millis() )
{
if( res_key != 0 )
{
if( ((res_key_old - res_key_delta) <= res_key) && (res_key <= (res_key_old + res_key_delta)) )
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_next;
}
else
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_first;
}
int i = 0; int exit = 0;
while( res_key_array[i][0] != 0xFFFFFFFF && exit == 0 )
{
if( (res_key_array[i][0] <= res_key) && (res_key <= res_key_array[i][1]) ) exit = 1; else i++;
}
if( exit == 1 )
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = i+1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( res_key_count < 50 )
{
res_key_array[res_key_count][0] = res_key - res_key_delta; res_key_array[res_key_count][1] = res_key + res_key_delta;
res_key_count++;
EEPROM.write(1, res_key_count); // Запоминаем количество кнопок
byte one_byte = res_key / 256;
EEPROM.write(res_key_count+1, one_byte ); // Запоминаем старший байт значения кнопки
one_byte = res_key - one_byte * 256;
EEPROM.write(res_key_count+1+50, one_byte ); // Запоминаем младший байт значения кнопки
EEPROM.write(0, RES_KEY_FLAG_);
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = res_key_count;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0xAA;
bytes[2] = (res_key & 0xFF00) >> 8;
bytes[3] = res_key & 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
}
res_key_old = res_key;
}
}
//----------------------------------------------------------------------------------
// Функция работы с первым энкодером
//----------------------------------------------------------------------------------
void encoder_1()
{
if( encoder1_key_millis + encoder1_key_wait_millis*2 < millis() ) { encoder1_key_old = 0; }
if( encoder1_millis + encoder1_wait_millis < millis() )
{
encoder1_millis = millis();
encoder1_dt = analogRead(ENCODER1_PIN); // прочитать данные АЦП
if( encoder1_dt >= 0x246 && encoder1_dt <= 0x286 )
{ // Здесь обрабатываем удержание кнопки
encoder1_key = ENCODER1_PIN;
encoder1_key = (encoder1_key << 16) | 0x030000EE;
if ( encoder1_key == encoder1_key_old )
{ // Здесь обрабатываем удержание кнопки
if( encoder1_key_millis + encoder1_key_wait_millis < millis() )
{
bytes[0] = encoder1_key & 0xFF; // преобразовать в 4-байта
bytes[1] = (encoder1_key & 0xFF00) >> 8;
bytes[2] = (encoder1_key & 0xFF0000) >> 16;
bytes[3] = (encoder1_key & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
encoder1_key_millis = millis(); encoder1_key_wait_millis = encoder1_key_wait; //ir_wait_next;
}
}
else
{ // Здесь обрабатываем первое нажатие кнопки
encoder1_key_millis = millis(); encoder1_key_wait_millis = 50; //ir_wait_first;
}
encoder1_key_old = encoder1_key;
}
else
{
if( encoder1_dt >= 0x3E0 && encoder1_dt <= 0x410 && encoder1_key3 != 1 )
{
if( (encoder1_key2 == 2) && (encoder1_key3 == 3))
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER1_PIN;
bytes[3] = 1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( (encoder1_key2 == 3) && (encoder1_key3 == 2) )
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER1_PIN;
bytes[3] = 2;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=1;
}
else
{
if( encoder1_dt >= 0xA0 && encoder1_dt <= 0xF0 && encoder1_key3 != 2 )
{
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=2;
}
else
{
if( encoder1_dt >= 0x1A0 && encoder1_dt <= 0x200 && encoder1_key3 != 3 )
{
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=3;
}
}
}
}
}
}
//----------------------------------------------------------------------------------
// Функция работы со вторым энкодером
//----------------------------------------------------------------------------------
void encoder_2()
{
if( encoder2_key_millis + encoder2_key_wait_millis*2 < millis() ) { encoder2_key_old = 0; }
if( encoder2_millis + encoder2_wait_millis < millis() )
{
encoder2_millis = millis();
encoder2_dt = analogRead(ENCODER2_PIN); // прочитать данные АЦП
if( encoder2_dt >= 0x246 && encoder2_dt <= 0x286 )
{ // Здесь обрабатываем удержание кнопки
encoder2_key = ENCODER2_PIN;
encoder2_key = (encoder2_key << 16) | 0x030000EE;
if ( encoder2_key == encoder2_key_old )
{ // Здесь обрабатываем удержание кнопки
if( encoder2_key_millis + encoder2_key_wait_millis < millis() )
{
bytes[0] = encoder2_key & 0xFF; // преобразовать в 4-байта
bytes[1] = (encoder2_key & 0xFF00) >> 8;
bytes[2] = (encoder2_key & 0xFF0000) >> 16;
bytes[3] = (encoder2_key & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
encoder2_key_millis = millis(); encoder2_key_wait_millis = encoder2_key_wait; //ir_wait_next;
}
}
else
{ // Здесь обрабатываем первое нажатие кнопки
encoder2_key_millis = millis(); encoder2_key_wait_millis = 50; //ir_wait_first;
}
encoder2_key_old = encoder2_key;
}
else
{
if( encoder2_dt >= 0x3E0 && encoder2_dt <= 0x410 && encoder2_key3 != 1 )
{
if( (encoder2_key2 == 2) && (encoder2_key3 == 3))
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER2_PIN;
bytes[3] = 1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( (encoder2_key2 == 3) && (encoder2_key3 == 2) )
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER2_PIN;
bytes[3] = 2;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
encoder2_key1=encoder2_key2; encoder2_key2=encoder2_key3; encoder2_key3=1;
}
else
{
if( encoder2_dt >= 0xA0 && encoder2_dt <= 0xF0 && encoder2_key3 != 2 )
{
encoder2_key1=encoder2_key2; encoder2_key2=encoder2_key3; encoder2_key3=2;
}
else
{
if( encoder2_dt >= 0x1A0 && encoder2_dt <= 0x200 && encoder2_key3 != 3 )
{
encoder2_key1=encoder2_key2; encoder2_key2=encoder2_key3; encoder2_key3=3;
}
}
}
}
}
}
//----------------------------------------------------------------------------------
// Функция работы с ИК приёмником
//----------------------------------------------------------------------------------
void ir_key()
{
if( ir_dt_millis + ir_wait_millis*2 < millis() ) { ir_dt_old = 0; }
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
if ( ir_dt == ir_dt_old )
{ // Здесь обрабатываем удержание кнопки
if( ir_dt_millis + ir_wait_millis < millis() )
{
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
ir_dt_millis = millis(); ir_wait_millis = ir_wait_next;
}
}
else
{ // Здесь обрабатываем первое нажатие кнопки
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
ir_dt_millis = millis(); ir_wait_millis = ir_wait_first;
}
ir_dt_old = ir_dt;
}
else
{
ir_dt_millis = millis(); ir_wait_millis = ir_wait_first;
}
irrecv.resume();
}
}
//----------------------------------------------------------------------------------
// Функция работы с акселерометром
//----------------------------------------------------------------------------------
void accelerometer()
{
if( accelerometer_milles + accelerometer_wait_milles < millis() )
{
xyz[0]=analogRead(xpin);
xyz[1]=analogRead(ypin); // прочитать значение осей
xyz[2]=analogRead(zpin);
xyz[3]=0;
bytes[0] = 0xEF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xEFFFFFFF - код данных от акселерометра
Serial.write( (byte*)&xyz,8); // отправить значения осей
accelerometer_milles = millis();
}
}
//----------------------------------------------------------------------------------
// Функция определение температуры датчиков DS18B20
//----------------------------------------------------------------------------------
void temperature_sensors()
{
if( temperature_sensors_milles + temperature_sensors_wait_milles < millis() )
{
temperature_sensors_milles = millis();
byte i;
if (!ds.search(addr))
{ // поиск нового датчика
ds.reset_search(); // если не нашли, сбрасываем поиск в начало
return; // и выходим
}
// Часть кода, которая ниже, выполняется только если
// найден новый датчик, с которым ещё не работали в
// главном цикле до сброса поиска
if (OneWire::crc8( addr, 7) != addr[7]) // Проверка CRC
{
return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
}
if (addr[0] != 0x28) // Проверка того, что найденное устройство - температурный датчик DS18B20
{
return; // Если не он, то опять в начало главного цикла на продолжение поиска
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
ds.reset();
ds.select(addr);
ds.write(0xBE);
bytes[0] = 0xFF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xFFFFFFFF - код температурного датчика
Serial.write( addr,8); // отправить 8 байтовый номер температурного датчика
for ( i = 0; i < 9; i++) // получаем данные с датчика
{
data[i] = ds.read();
}
bytes[0] = 0; // отправляем байты содержащие температуру
bytes[1] = 0;
bytes[2] = data[0];
bytes[3] = data[1];
Serial.write( bytes,4); // значение температурного датчика
}
}
Устанавливаете плагин iCarDuino 1.0.0.5
В duino.ini добавляем такие строки, если их там нет
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
и эти переменные, которые включают или выключают использование ик пульта, энкодеров или резестивных кнопок, если что то вами не используется. 0 - выключено, 1 - включено.
duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1
Запускаете икар, при первом запуске в папке используемого скина ..\Chameleon\DuinoKey будет создан файл duino_temp_sensors.ini с таким содержимым, у вас будут свои номера датчиков
temp_sensor_28FFC919030000D6=28FFC919030000D6
temp_sensor_2812EA1903000003=2812EA1903000003
Меняем название датчиков, допустим
temp_sensor_28FFC919030000D6=Салон
temp_sensor_2812EA1903000003=Улица
Теперь для того чтобы можно было вывести датчики в скин, в файл ..\Chameleon\Labels\label_list.txt добавляем такие строки
temp_sensor_28FFC919030000D6
temp_sensor_2812EA1903000003
а в ..\Chameleon\Labels\label_ru.ini (имя файла зависит от используемого языка) такие
l_label_temp_sensor_28FFC919030000D6=t салон,С
l_label_temp_sensor_2812EA1903000003=t улица,С
Теперь можно использовать температурные показатели в скине
Потестил дома.
Все работает!!!!:smile2::smile2::smile2:
Огромное спасибо Авторам!!!!:yes4::yes4::yes4:
Конечно, гораздо удобнее все настройки кнопок Ардуино делать в Икаре.
И раньше пробовал Ардуино+ИК-пульт в Икаре, работало, но сейчас гораэдо удобнее!!!
Я так понимаю Икар пока единственная оболочка с такими возможностями.
Надо поразбираться, как градусники прицепить.
Bersenev
28.01.2012, 22:46
Надо поразбираться, как градусники прицепить.
Градусники это следующий шаг, уже занимаюсь. Но для градусников потребуется менять код в ардуино.
Градусники это следующий шаг, уже занимаюсь. Но для градусников потребуется менять код в ардуино.
Думаю, Chip сможет помочь.:blush: Наверное, он должен быть заинтересован.
Да, стирание кодов пульта?
Bersenev
28.01.2012, 23:05
Подробнее, что именно происходит.
В списке нет уже назначенных кнопок? или они есть, но при выборе кнопки в списке, в правой панели не отображается действие для этой кнопки?
Подробнее, что именно происходит.
В списке нет уже назначенных кнопок? или они есть, но при выборе кнопки в списке, в правой панели не отображается действие для этой кнопки?
Пардон, перезагрузка Икара помогла. Все отображается.:yes4::blush:
Bersenev
28.01.2012, 23:11
Думаю, Chip сможет помочь.:blush: Наверное, он должен быть заинтересован.
Да особой необходимости нет, думаю справимся, тем более всё необходимое Chip уже сделал.
Да, стирание кодов пульта?
А это нужно?
А это нужно?
Фиг знает... Не понял пока.:blush::smile2:
Градусники это следующий шаг, уже занимаюсь. Но для градусников потребуется менять код в ардуино.тоже очень интересует тема градусников
autohirurg
30.01.2012, 17:27
Извините что не в тему но так уж вопрос поставили изначально.
Градусники, кнопочки, все клаассно!!!
У меня вопрос!
Андрей надо бы сообразить меню климатконтроля, всместе со всеми градусниками и управлением, т.к я уже давно жду управление климатом, дело в том что после замены двигателя и бльшей части электроники в машине, мой блок климата работает не правильно, он не может связаться с блоком управления двигателем и мне нужно сделать данные действия по другому - через кардуино и разъём OBD2. Т.К через ОБД2 и программу тестер ецу от Валентина8080 кондей включается и работает!
Программа климат контроля на кардуино уже давно сделана в большей степени и висит где то на compcar.ru/ если надо я найду и дам ссылочку. Там единственное надо поменять внешний вид и немного добавить функций управления и датчиков.
Каковы мнения будут.?
Bersenev
30.01.2012, 17:47
Сначала будут кнопки,ик пульт и энкодер. Потом градусники(кстати уже работают). Далее акселерометр. А вот за ним я займусь климат контролем.
Но климат контроль вешь специфичная для каждой машины, поэтому сначала буду делать под себя. А мне нужно управление тремя регуляторами и кнопкой включения кондиционера.Такой вариант я на соседнем форуме видел.
А твой вариант специфичен в двойне, так как кнопку должен включать не ардуино, а комп, да еще и через встроенную программу, так что просто отрисовкой экранов здесь не обойдешься
еще бы релюшками управлять
autohirurg
01.02.2012, 14:26
Сначала будут кнопки,ик пульт и энкодер. Потом градусники(кстати уже работают). Далее акселерометр. А вот за ним я займусь климат контролем.
Но климат контроль вешь специфичная для каждой машины, поэтому сначала буду делать под себя. А мне нужно управление тремя регуляторами и кнопкой включения кондиционера.Такой вариант я на соседнем форуме видел.
А твой вариант специфичен в двойне, так как кнопку должен включать не ардуино, а комп, да еще и через встроенную программу, так что просто отрисовкой экранов здесь не обойдешься
На данный момент я к своему новому блоку управления ( который от другого автомобиля ) до сих пор так и не подключил мой который стоял на машине блок управления кондиционером, и сделал подключение сигнала насоса кондея на прямую через реле которое управляется низковольтовой цепью.
Мой блок кондиционера просто выдает низкий минусовой импульс на реле, а реле уже замыкает основную цепь, и кондей включается.
Еще блок управляет тремя машинками, и берет сигналы от давления в системе кондиционера ( низкое давление ( датчик замкнут ) кондей выкл. ) датчика температуры в салоне, и датчик температуры двигателя ( придется ставить отдельно)
Вобщем все возможно сделать именно так как на всех обычных авто например как у тебя! в точности.
А с сигналом на блок управления двигателем который меняет топливную карту, я потом попробую привязать отдельно. вобщем это не столь важно.
Я могу посодействовать от себя схемой работы системы кондиционера и объяснением сигналов с их параметрами ( например сопративления датчиков или еще что там нужно для правильной работы.
:drinks: Обязательно!!!:secret:
Bersenev
01.02.2012, 15:00
Новая версия плагина 1.0.0.1
Теперь можно подключать нужное количество температурных датчиков DS18B20
Описание и схема подключения датчиков в шапке
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-489.jpg
Bersenev
03.02.2012, 22:36
Вот и акселерометр прикрутил, смотрим видео
http://content.video.mail.ru/mail/bersenev_s/_myvideo/i-11.jpg (http://video.mail.ru/mail/bersenev_s/_myvideo/11.html)
какой Arduino все таки купить?подскажите.и где?хочу термометры все таки сделать
Bersenev
04.02.2012, 09:49
какой Arduino все таки купить?подскажите.и где?хочу термометры все таки сделать
Лично у меня вот этот http://carmonitor.ru/ru/carduinonanoduo-p-120.html, датчики тоже от туда.
а акселерометр какие показания дает?ускорение возможно??
Fedorych
04.02.2012, 14:54
Новая версия плагина 1.0.0.1
Теперь можно подключать нужное количество температурных датчиков DS18B20
Описание и схема подключения датчиков в шапке
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-489.jpg
В шапку экрана можно же вывести показания датчиков температуры?
Bersenev
04.02.2012, 15:25
а акселерометр какие показания дает?ускорение возможно??
Вот здесь всё написано, что он измеряет http://ru.wikipedia.org/wiki/%D0%90%D0%BA%D1%81%D0%B5%D0%BB%D0%B5%D1%80%D0%BE%D 0%BC%D0%B5%D1%82%D1%80
Bersenev
04.02.2012, 15:27
В шапку экрана можно же вывести показания датчиков температуры?
Разумеется можно.
Вот и акселерометр прикрутил, смотрим видео
А в центре экрана что за точка?
Fedorych
04.02.2012, 16:09
уровень горизонтальной плоскости
Anthonymus
06.02.2012, 11:35
Есть пожелание. Мне кажется, что кнопки пульта неплохо бы обзывать, что бы проще было настраивать. ИМХО. Еще не пробовал. Осталось только управление релюшками добавить и моя будет счастлив :-) Спасибо огромное за работу.
Bersenev
06.02.2012, 11:47
Есть пожелание. Мне кажется, что кнопки пульта неплохо бы обзывать, что бы проще было настраивать. ИМХО. Еще не пробовал.
Попробуй, думаю не стоит, по мне лишнее действие. На экране настройки нажимаешь нужную кнопку на пульте и указатель в списке сразу перескакивает на нужную позицию с кодом кнопки, по этому запоминать коды нет никакой необходимости
Андрей, а для CFStyle будет поддержка?
Bersenev
09.02.2012, 10:00
Андрей, а для CFStyle будет поддержка?
Нет, ставишь хамелеон, тема CFStyle и получаешь скин почти идентичный скину CFStyle с поддержкой ардуино.
Наконец-то появилась возможность испытать.
Все работает. И управление пультом и датчики температуры.:yes4:
Акселерометр не пробовал. Нет его у меня, да, вроде, и не надо пока.:smile2:
Спасибо разработчикам!:yes4::yes4::yes4:
Будем вкрячивать в авто.
Bersenev
13.02.2012, 02:01
Все работает. И управление пультом и датчики температуры.:yes4:
...
Будем вкрячивать в авто.
Не торопись, после сна данные будут сбиваться, придётся передёргивать ардуино. Это уже исправлено, плюс прикрутил энкодер. Завтра прикручу второй и выложу новый вариант плагина и кода для ардуино.
Да холодно у нас пока. Спешки с установкой в машину, наверное, не будет.
Отлично! Будет чем позаниматься вечерами.:yes4:
Видимо, скоро на Кармониторе появится аппаратно шилд к Ардуино для Икара.:smile2:
Bersenev
14.02.2012, 20:59
Присоединил два энкодера.
В отличии от распространённой схемы подключения энкодера к цифровым выводам http://www.compcar.ru/forum/showpost.php?p=47439&postcount=1, реализовал подключение к аналоговому входу, что бы использовать цифровые выводы для других целей.
Плагин теперь правильно работает при отключении и подключении ардуино, и при выходе из сна. Также отключает передачу тех данных от ардуино, которые в данный момент не используются, то есть если на экране нет температурных датчиков, то ардуино не будет их передавать.
Из кода для ардуино убраны все задержки (delay), что позволило убрать задержки получения данных от термометров и акселерометра при работе с ик пультом и энкодерами.
Схема, плагин и код для ардуино в шапке.
Пока нет возможности попробовать энкодеры.
Андрей, поделись планами по Ардуино, если они есть.
Bersenev
15.02.2012, 14:35
Андрей, поделись планами по Ардуино, если они есть.
1. Управление нагрузками
2. Фоторезистор, для автоматического изменения яркости экрана и переключения день-ночь
3. Переключение на камеру заднего хода, если для этого используется usb-камера, если камера сразу подключена к монитору, то попробую сделать задержку на переключение, а то уже достало пока паркуешься несколько раз включается выключается, а так включилась раз, а по таймеру выключилась.
4. Управление механическими регуляторами климата, для управления ими с монитора и организации климат контроля.
а дальше посмотрим, может ещё что интересное подвернётся.
Присоединил два энкодера.
В отличии от распространённой схемы подключения энкодера к цифровым выводам http://www.compcar.ru/forum/showpost...39&postcount=1, реализовал подключение к аналоговому входу, что бы использовать цифровые выводы для других целей.
Плагин теперь правильно работает при отключении и подключении ардуино, и при выходе из сна. Также отключает передачу тех данных от ардуино, которые в данный момент не используются, то есть если на экране нет температурных датчиков, то ардуино не будет их передавать.
Из кода для ардуино убраны все задержки (delay), что позволило убрать задержки получения данных от термометров и акселерометра при работе с ик пультом и энкодерами.
Схема, плагин и код для ардуино в шап
Аналоговые пины можно использовать как цифровые, кроме А6 и А7
Соответствие у них следующее:
А0-D14
.
.
.
A5-D19
autohirurg
16.02.2012, 21:12
Андрей ! наткнулся вот на такую вот плату которая работает с ардуино там в описании на фото написано.
Думаю что она может помочь в реализации проэкта с климатконтролем :yes4: если надо могу прикупить.
Да Вы что этот шилд может всего 600мА на нагрузку выдать, а вентилятор печки потребляет от 1А до 5А в зависимости от автомобиля. Здесь скорее всего больше подходит вот такой девайс (http://carmonitor.ru/ru/cyberboardmega-p-191.html) , еще свободные ключи можно использовать для управления нагрузками.
Bersenev
16.02.2012, 22:15
Вероятнее всего лично мне не нужно ни одно ни другое. Я не собираюсь управлять вентилятор на прямую, я же писал что буду делать климат контроль из блока механических регулировок климатом, то есть три сервопривода, а ими можно управлять напрямую.
Все прочитал но так и не понял зачем два энкодера?
Bersenev
18.02.2012, 21:16
Все прочитал но так и не понял зачем два энкодера?
Не надо, не пользуйся. Но со временем икаром можно будет управлять только имея два энкодера.
На сегодня у меня один энкодер управляет громкостью, второй яркостью. А в расширенном режиме (пока только в моей версии скина) ещё и перемещением по спискам и выбором нужных действий.
Еще можно использовать нажатие энкодера,
например вращение без нажатия это громкость
вращение с нажатием это перелистывание треков
Diagnose
19.02.2012, 01:15
Не надо, не пользуйся. Но со временем икаром можно будет управлять только имея два энкодера.
На сегодня у меня один энкодер управляет громкостью, второй яркостью. А в расширенном режиме (пока только в моей версии скина) ещё и перемещением по спискам и выбором нужных действий.
Андрей, ты прям мои мысли годовалой давности читаешь.:ydance: Давно лежат 2 энкодера - один поворотный с нажатием, а второй кроме поворота и нажатия, ещё и в 4 стороны наклоны умеет делать. Тоже затея была сделать на 1й - управление громкостью и может быть Mute, а вторым по кнопкам/спискам перемещаться и нажатием подтверждать действие, но пока все лежит в коробке и никак нет времени воплотить всё это.:sm555: А тут ты это даже к икару привязываешь... Классно!!!:thumbup: Может я так быстрей зашевелюсь и доделаю девайс.
второй кроме поворота и нажатия, ещё и в 4 стороны наклоны умеет делать.
Что за энкодер такой? Интересно.
Diagnose
19.02.2012, 14:45
Вот такой (http://www.grayhill.com/UserFiles/file/Opt_Encoder_60AD.pdf), достался от мерса W221, задний энкодер. Хотел достать передний - у него есть ещё обратная связь, но пока не получилось.
Запускаете икар, при первом запуске в папке используемого скина ..\Chameleon\DuinoKey будет создан файл duino_temp_sensors.ini
Андрей, после смены кода Ардуино у меня все перестало работать. И под ХР и под семеркой сейчас. Файл, что в цитате, не создается.
Вроде, все сделал: библиотеки на месте, плагин зарегился и включен, но в экране настроек кнопок пусто...
Код в Ардуино грузится нормально, но никакой реакции ни на пульт ни по поводу температуры.
Что может быть?:dntknw:
Можешь повторить старый код?
Bersenev
19.02.2012, 22:37
Я просто забыл указать, в новой версии плагина кроме номера порта надо указывать и его скорость
добавь в Global Vars
duino_com_baudRate=115200
Пульт заработал, пока не понял только после каких манипуляций...
Перезагружал несколько раз код в контроллер.
Что может мешать созданию файла "duino_temp_sensors.ini"?
Вроде бы все на месте, но он не создается.:dntknw:
Bersenev
20.02.2012, 01:28
Добавь ещё вот эти переменные в skin.ini
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
badnetrnd
20.02.2012, 17:22
А куда подрубать рулевые кнопки ? и по какой схеме ?
Bersenev
20.02.2012, 19:00
А куда подрубать рулевые кнопки ? и по какой схеме ?
Рулевые кнопки можно подцеплять через это устройство http://carmonitor.ru/ru/joystick-p-104.html, код для ардуино, используемый в этом устройстве находится в этой теме http://www.compcar.ru/forum/showthread.php?t=464 (http://www.compcar.ru/forum/showthread.php?t=4640)
Но я пробовал подключать по этой схеме, в результате получил страшный дребезг при нажатии, то есть на нажатие одной и той же кнопки возвращает разные коды. Что пока с этим делать я не решил.
1) Если прицеплять конкретный набор кнопок (как у меня реализованы энкодеры), то надо писать код для ардуино именно под этот набор кнопок, тогда в комп будут попадать уже готовые коды кнопок
2)если делать что бы цеплялись любые кнопки, то надо слать всё в плагин, а уже в нём делать сопоставление полученных данных конкретной кнопке.
Хочется реализовать универсальный вариант №2, но перегружать порт передачей кучи информации тоже не охота. Так что как определюсь, тогда и займусь своей реализацией подключения рулевых кнопок, а пока, если дребезга нет, можно пользоваться кодом из последней ссылки, он с плагином будет работать
badnetrnd
20.02.2012, 19:12
А к какому пину подключать что бы icards не считал кнопки руля энкодером ?
Bersenev
20.02.2012, 19:33
А к какому пину подключать что бы icards не считал кнопки руля энкодером ?
Плагину iCarDuino всё равно к какому пину, что подсоединено. Ик приёмник, энкодер и рулевые кнопки плагин не различает, для него это всё одно и тоже. Главное чтобы ардуино отправлял четырёхбайтный код, который плагин воспринимает как код нажатия клавиши.
Единственное нельзя отправлять такие комбинации FF FF FF FF - это сообщает о том что дальше пойдут данные от температурных датчиков и EF FF FF FF - это код данных от акселерометра. Всё остальное плагин воспринимает как код клавиши.
badnetrnd
20.02.2012, 20:23
Понял спасибо
Добавь ещё вот эти переменные в skin.ini
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
Андрей, ты еще что-то правишь сейчас по поводу Ардуино? Что-то уперся я в стену после смены скетча на новый. Ждать исправлений или копать проблему у себя?
Не сохранился первый скетч?
Bersenev
22.02.2012, 14:43
Андрей, ты еще что-то правишь сейчас по поводу Ардуино? Что-то уперся я в стену после смены скетча на новый. Ждать исправлений или копать проблему у себя?
Да, точнее всё уже сделал, сейчас доделаю некоторые исправления в скине для телефона и выложу скин со всеми исправлениями для ардуино и телефона.
Кстати теперь на каждую кнопку ик пульта или энкодера можно назначить по две команды. Для этого надо будет одну кнопку пульта назначить кнопкой Shift и она будет переключать режим работы пульта. У меня теперь пульт вместо 11 команд можен 20 выполнить.
Я как понял для управления с рулевых кнопок нужно еще одно Arduino ставить?
Bersenev
23.02.2012, 11:55
Я как понял для управления с рулевых кнопок нужно еще одно Arduino ставить?
Нет, всё будет реализовано в одном ардуино. Как писал ранее я ещё точно не решил как буду бороться с дребезгом кнопок.
Нет, всё будет реализовано в одном ардуино. Как писал ранее я ещё точно не решил как буду бороться с дребезгом кнопок.
А простейший способ почему не работает ? (по нажатию кнопки запоминать ее код, в этот момент читать таймер, если дельта по таймеру при следующем нажатии меньше антидребезгового окна (200-300 мсек), то, если код следующей нажатой равен предыдущему запомненному, ничего не делать, если не равен - перезаписать код последней нажатой и новый таймер)
Вот пример с фильтром дребезга
//http://compcar.ru
#define PIN 5 //номер аналогового порта
#define LIMIT 10 //предел погрешности при дребезге
byte bytes[4];
unsigned long math_time,old_time,real_time, res_dt1, res_d;
void setup()
{
Serial.begin(115200);
}
void loop()
{
res_d = analogRead(PIN);
if( res_d < LIMIT) res_d = LIMIT;
delay(10);
res_dt1 = analogRead(PIN);
old_time = millis();
math_time = 0;
while(math_time < 200)
{
real_time = millis();
math_time = real_time - old_time;
res_dt1 = analogRead(PIN);
if(res_dt1 < res_d-LIMIT || res_dt1 > res_d+LIMIT) break;
}
if( math_time > 70)
{
bytes[0] = res_d & 0xFF; // преобразовать в 4-байта
bytes[1] = (res_d & 0xFF00) >> 8;
bytes[2] = (res_d & 0xFF0000) >> 16;
bytes[3] = (res_d & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
Bersenev
23.02.2012, 17:19
А простейший способ почему не работает ? (по нажатию кнопки запоминать ее код, в этот момент читать таймер, если дельта по таймеру при следующем нажатии меньше антидребезгового окна (200-300 мсек), то, если код следующей нажатой равен предыдущему запомненному, ничего не делать, если не равен - перезаписать код последней нажатой и новый таймер)
Вот пример с фильтром дребезга
К сожалению ни алгоритм onv23 ни код admin не решают проблему дребезга, в обоих вариантах считается что первое полученное значение и есть правильный код, а в дальнейшем проверяется уже дребезг относительно этого значения. Но в реальности первое значение тоже подвергнуто дребезгу.
Допустим есть кнопка, которая выдаёт значения от 100 до 120. В результате при первом считывании может быть получено значение от 100 до 120. Теоретически по коду admin-а мы получим в плагин до 20 кодов кнопки.
В реальности у меня данный код на одну и туже кнопку выдаёт 3-4 кода, допустим при первом нажатии 110, при следующем 112, а потом может и 108 и.д. , а должен всегда один, чего я и добиваюсь. Для конкретного варианта резистивных кнопок это не сложно, а вот один код на всё разнообразие вариантов требует времени.
Если рассматривать именно дребезг то тогда может быть проще поставить конденсатор на входе
Bersenev
23.02.2012, 19:08
Такой вариант тоже не всегда проходит, уже пробовал, всё равно +-3 получается. Но вариант решения уже существует, осталось код отладить.
+- В программе в настройках нужно сделать возможность настраивать допустимую погрешность
Bersenev
23.02.2012, 19:28
+- В программе в настройках нужно сделать возможность настраивать допустимую погрешность
а вот этого делать не хочется, хочется что бы как в ик-приёмнике, в плагин передавался уже готовый код. С энкодером получилось и это сделаем. Надо просто правильно нормализацию передаваемого в плагин кода сделать.
Еще подкину тему для размышления.
Можно еще к ардуине подключить парктроник (http://www.compcar.ru/forum/showthread.php?t=7309&highlight=%EF%E0%F0%EA%F2%F0%EE%ED%E8%EA)
Bersenev
24.02.2012, 21:56
Выложил в шапке вариант скетча с резестивными кнопками. Так же обновил инструкцию, поэтому внимательно читаем шапку.
ps. Завтра постараюсь выложить скин Хамелеон с вариантом расширенного управления с помощью ик-приёмника, энкодера и резестивных кнопок. Но всё должно работать и с текущим скином
Доброго времени суток! Есть задумка одна, хочу спросить совета.
У меня на въезде во двор с двух сторон стоят автоматические шлагбаумы. Можно разобрав радиобрелок подпаяться к его кнопкам и выводам дуины, чтобы она эмулировала нажатие кнопок брелка. Далее используя плагин PPOI, при подъезде к шлагбауму вываливалось окно с кнопкой "открыть шлагбаум". Типа жмешь на неё, а дуина жмет соответствующую кнопку брелка. Расстояние между шлагбаумами большое, порядка 250м., координаты GPS можно запомнить для каждого... Что скажете? Реально? А то достало уже по карманам шариться и наощупь кнопки брелка нажимать...
Bersenev
25.02.2012, 23:06
Реально, даже можно это сделать автоматически, даже на экран жать не придётся.
Кстати у меня дома тоже двое автоматических ворот, правда на расстоянии 5 метров друг от друга, но сделать их открытие с компа это прикольно, появиться время подумаю над этим.
Запускаете икар, при первом запуске в папке используемого скина ..\Chameleon\DuinoKey будет создан файл duino_temp_sensors.ini
Не создается файл....
Аппаратно схема температуры работает. Проверял на другом скетче.
Скин.ини подправлен, библиотеки есть.
Ик-пульт нормально работает.:yes4:
Андрей, что может быть?:dntknw:
autohirurg
25.02.2012, 23:33
Реально, даже можно это сделать автоматически, даже на экран жать не придётся.
Кстати у меня дома тоже двое автоматических ворот, правда на расстоянии 5 метров друг от друга, но сделать их открытие с компа это прикольно, появиться время подумаю над этим.
А это тема! у меня конечно нет ворот автоматических, но возможно заинтересовали бы другие функции,
Может просто сделать управление 2-мя 3-мя релюшками, а к релюшкам уже цепляй то что хочишь, получится что то в виде универсального автоматически управляемое по данным GPS или другим данным устройство:rolleyes2:
Bersenev
25.02.2012, 23:52
Не создается файл....
Аппаратно схема температуры работает. Проверял на другом скетче.
Скин.ини подправлен, библиотеки есть.
Ик-пульт нормально работает.:yes4:
Андрей, что может быть?:dntknw:
Сейчас собирал скин и нашёл причину, я сделал чтобы датчики передавались только по запросу, а при первом запуске разумеется никто их не запрашивает, вот они и не создаются. Сейчас что-нибудь придумаю
Сейчас собирал скин и нашёл причину, я сделал чтобы датчики передавались только по запросу, а при первом запуске разумеется никто их не запрашивает, вот они и не создаются. Сейчас что-нибудь придумаю
:yes4::yes4::yes4:
badnetrnd
26.02.2012, 00:00
Я так понял, что резестивные кнопки должны нормально работать ?
Bersenev
26.02.2012, 00:04
:yes4::yes4::yes4:
Возьми в шапке версию плагина 1.0.0.4
Bersenev
26.02.2012, 00:05
Я так понял, что резестивные кнопки должны нормально работать ?
Проверяй, вариант кнопок, на котором тестировал я, работает без проблем.
badnetrnd
26.02.2012, 00:11
И ещё вопрос, если подрублю только рулевые кнопки, icar ругаться не будет?
Возьми в шапке версию плагина 1.0.0.4
Есть файлик!
Дальше, думаю, настрою нормально. Спасибо!!!:yes4:
Bersenev
26.02.2012, 00:14
И ещё вопрос, если подрублю только рулевые кнопки, icar ругаться не будет?
Нет, если что то не используется проблем не будет, при желании можно ненужное отключить в скетче, но даже если не отключать , то всё равно всё будет работать.
Bersenev
26.02.2012, 00:16
Есть файлик!
Дальше, думаю, настрою нормально. Спасибо!!!:yes4:
Не торопись, через полчаса скин зальётся. А то придётся кнопки пульта перенастраивать.
Не торопись, через полчаса скин зальётся. А то придётся кнопки пульта перенастраивать.
ОК! Кнопки надо будет настраивать в машине. А на ноуте дома только тесты.:smile2:
Bersenev
26.02.2012, 00:39
Всё правильно, просто выполни по порядку все действия описанные в шапке, откуда плагин может знать какой датчик у тебя на улице, а какой в салоне. это надо задать самому, после первого запуска.
Всё правильно, просто выполни по порядку все действия описанные в шапке, откуда плагин может знать какой датчик у тебя на улице, а какой в салоне. это надо задать самому, после первого запуска.
Да все нормально. Внимательности просто не хватило при редактировании файлов Label. Забыл дописать кое-что в тексте. Сейчас нашел.:blush:
badnetrnd
26.02.2012, 01:18
А возможность по нажатию кнопки в icar выводить что-нибудь на выход arduino появиться ?
После установки новой версии скина:
Если включаешь плагин Duino в настройках ИК-пульта сразу образуется несколько записей
И в файле "duino_key_list" видим:
1
LSTduino_AAAA0003||duino_AAAA0003
LSTduino_AAAA0004||duino_AAAA0004
LSTduino_AAAA0008||duino_AAAA0008
LSTduino_AAAA000B||duino_AAAA000B
LSTduino_AAAA0006||duino_AAAA0006
LSTduino_AAAA0005||duino_AAAA0005
LSTduino_AAAA000A||duino_AAAA000A
LSTduino_AAAA0018||duino_AAAA0018
LSTduino_AAAA002A||duino_AAAA002A
LSTduino_EE000502||duino_EE000502
LSTduino_EE000602||duino_EE000602
LSTduino_EE000603||duino_EE000603
LSTduino_EE000601||duino_EE000601
LSTduino_AAAA0055||duino_AAAA0055
LSTduino_EE000503||duino_EE000503
LSTduino_EE000501||duino_EE000501
LSTduino_AAAA0053||duino_AAAA0053
LSTduino_AAAA0070||duino_AAAA0070
LSTduino_AAAA006E||duino_AAAA006E
LSTduino_AAAA0015||duino_AAAA0015
LSTduino_AAAA0038||duino_AAAA0038
LSTduino_AAAA0016||duino_AAAA0016
LSTduino_AAAA0007||duino_AAAA0007
LSTduino_AAAA000C||duino_AAAA000C
LSTduino_AAAA0009||duino_AAAA0009
LSTduino_AAAA000D||duino_AAAA000D
LSTduino_AAAA0010||duino_AAAA0010
LSTduino_AAAA0023||duino_AAAA0023
LSTduino_AAAA0032||duino_AAAA0032
LSTduino_AAAA0025||duino_AAAA0025
LSTduino_AAAA0033||duino_AAAA0033
Валят самостоятельно коды непонятно какие... При этом пульт вообще не трогаю.
К тому после этих попыток назначения кнопок если играет трек, то воспроизводится прерывисто и кнопкой Плей нельзя остановить воспроизведение.
Выключаешь плагин Дуино- все нормально.
Bersenev
26.02.2012, 02:03
После установки новой версии скина:
Если включаешь плагин Duino в настройках ИК-пульта сразу образуется три записи
И в файле "duino_key_list" видим:
Дальше пытаешься назначать кнопки, коды кнопок появляются, но курсор прыгает в верхние строчки списка. И ничего толком нельзя назначить.
К тому после этих попыток назначения кнопок если играет трек, то воспроизводится прерывисто и кнопкой Плей нельзя остановить воспроизведение.
Выключаешь плагин Дуино- все нормально.
Со скином это никак не связано, сегодня в машине было подобное, перегрузил комп и всё прошло и больше не появлялась. Возможно проблема в скетче для ардуино, но пока точно сказать не могу, так как было только раз
Вернул предыдущий скин. История с Дуино повторилась...
Выдергиваю Ардуино из компа, музыка начинает нормально играть без перерывов и управление воспроизведением нормализуется.
Т.е. глюков нет либо когда выключен плагин, либо когда Ардуино физически отключен от компа.
Бред какой-то! Час назад все работало.
Пойду спать.
badnetrnd
26.02.2012, 04:42
Залил скетч с 1 сообщения arduino (у меня мега 1280) всё прошло успешно, но не в icards не в serial monitor ничего не происходит. Светодиоды rx & tx не мигают пробывал подключать ко всем аналоговым портам, ноль реакции.
p.s. подключены только резестивные кнопки и всё
badnetrnd
26.02.2012, 04:46
стандартный скетч Analog input шлёт значения.
Bersenev
26.02.2012, 09:02
Скетч начинает посылать данные только если их запрашивает плагин, по этому могу предположить, что плагин не установлен или используется не последняя версия плагина, которая не включает передачу данных в икар.
Bersenev
26.02.2012, 09:54
Валят самостоятельно коды непонятно какие... При этом пульт вообще не трогаю.
Судя по кодам их выдают энкодеры и рулевые кнопки. А они у тебя подключены? Если нет то попробуй закоментировать в скетче эти строки
if( is_ir_key) encoder_1();
if( is_ir_key) encoder_2();
if( is_ir_key) res_keys();
Если всё нормализуется, то сделаю возможность отключение ненужных функций из икара.
Судя по кодам их выдают энкодеры и рулевые кнопки. А они у тебя подключены? Если нет то попробуй закоментировать в скетче эти строки
if( is_ir_key) encoder_1();
if( is_ir_key) encoder_2();
if( is_ir_key) res_keys();
Если всё нормализуется, то сделаю возможность отключение ненужных функций из икара.
Да!!!:yes4: Все получилось. Рулевые кнопки и энкодер отсутствуют на монтажке. Только ИК и датчики температуры.
Bersenev
26.02.2012, 11:27
Да!!!:yes4: Все получилось. Рулевые кнопки и энкодер отсутствуют на монтажке. Только ИК и датчики температуры.
А на моём ардуино даже если ничего не подключено всё равно ничего не сбоит.
В общем обновил скетч и плагин в шапке, добавлена возможность отключения неиспользуемых функций.
добавь в skin.ini переменные, которые включают или выключают использование ик пульта, энкодеров или резестивных кнопок, если что то вами не используется. 0 - выключено, 1 - включено.
duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1
Температурные датчики и акселерометр плагин включает и отключает автоматически по запросу из скина.
Все поправил. Работает! Спасибо!!!:yes4::yes4::yes4:
Кнопка "shift" - отличная идея.:yes4: Все работает! Осталось только уложить в голове наборы команд.:smile2:
У меня Freeduino ранней версии в исполнении на большой плате. Может с этим связано выскакивание кодов неподключенных устройств.
Надо приобрести энкодеры. :smile2:
Рулевых кнопок у меня нет, а команды с клавы я шлю через обычный контроллер клавиатуры PS2.
Хорошая тема образовалась!!!:yes4::yes4::yes4:
Верно ли я понимаю, что дребезг контактов в Joystic от кармонитора пока не побеждён?
Или стоит попробовать?
Bersenev
27.02.2012, 15:01
Верно ли я понимаю, что дребезг контактов в Joystic от кармонитора пока не побеждён?
Или стоит попробовать?
Побеждён.
При неудачном стечении кнопка может давать два кода с разницей в единицу. Но это не проблема, можно назначить одно и тоже на оба кода. У меня из десяти кнопок так ведёт себя только одна, но надо учесть что это вообще не кнопки, а просто проводки, поэтому дребезг у них ужасный, думаю на реальных кнопках даже эта проблема не должна появляться.
Только скетч писан под работу с икаром, поэтому данные будет передавать только его плагину, после получения от него команды на передачу данных от резестивных кнопок. Так что если хочешь использовать для чего то другого, правь скетч
leha-mentos
28.02.2012, 13:25
прочел всю ветку. Очень понравилось. Возник вопрос: Если использовать iCarDuino, то необходимость в адаптере кнопок руля, Пультик который, пропадает? К
Кроме кнопок руля, хочу использовать регулировку подствеки монитора и задействовать стеклоподъемники, как у Лео было сделано. Одной кнопкой чтоб закрывались и люк и стекла, а при выключении авто они еще сами закрывались, если открыты.
Bersenev
28.02.2012, 13:45
Возник вопрос: Если использовать iCarDuino, то необходимость в адаптере кнопок руля, Пультик который, пропадает?
Плагин iCarDuino будет работать с PultIk, даже с родной прошивкой PultIk.
Для использования других возможностей надо использовать скетч из этой темы.
хочу использовать регулировку подствеки монитора
Этот вопрос ещё не изучал, но планировал делать передачу в икар команд на переключение темы день ночь и регулировку яркости монитора командами икара по фоторезистору. А вот с реализацией регулировки физической яркости монитора пока ничего не скажу, скорее всего для каждого монитора нужен будет свой код и схема, а под каждый вариант не подстроишься.
и задействовать стеклоподъемники
Это управление нагрузками и оно будет, сейчас ищу подходящее решение.
leha-mentos
28.02.2012, 15:14
Плагин iCarDuino будет работать с PultIk, даже с родной прошивкой PultIk.
Для использования других возможностей надо использовать скетч из этой темы.
Немного другое имел ввиду: нужно ли мне покупать и Пультик и Ардуину? Или можно только Ардуиной обойтись? Разница в цене у них почти в два раза, а возможности прямо пропорциональны тоже в два раза.
И что такое скетч? (Извиняюсь, если глупый вопрос)
Да, и нашел схему кнопок руля своего авто. Помогите ее "прочитать" т.к. несилен в схематических изображениях электроники и их названиях. В каком именно месте стоит подключиться?
Спасибо.
Bersenev
28.02.2012, 15:33
Немного другое имел ввиду: нужно ли мне покупать и Пультик и Ардуину? Или можно только Ардуиной обойтись?
И что такое скетч? (Извиняюсь, если глупый вопрос)
Если в состоянии залить скетч в ардуино, то и используй его. Если нет, то пользуйся PuktIk. Но судя по "глупому вопросу" пока не в состоянии. Поэтому читай здесь http://www.compcar.ru/forum/showthread.php?t=4773. А скетч это программа для аруино выложенная в шапке
Да, и нашел схему кнопок руля своего авто. Помогите ее "прочитать" т.к. несилен в схематических изображениях электроники и их названиях. В каком именно месте стоит подключиться?
я бы подключал на B31 B12 или C2 C3
Попробовал сегодня подружить Икар и кармониторовский Joystic. В итоге, при запуске настройки кнопок, плагин сразу выдаёт некий код ещё без нажатия кнопок, как будто постоянно нажата какая-то кнопка. После нажатия любой кнопки и получения её кода, плагин снова переходит к этой первой позиции.
Вторая проблема в том что последовательное нажатие одной кнопки выдаёт для неё по 3-4 разных кода(. И так со всеми кнопками.
P.s. С "чиповым" Хоткеем кнопки отработали уже 2 года без проблем
Bersenev
28.02.2012, 23:35
Попробовал сегодня подружить Икар и кармониторовский Joystic. В итоге, при запуске настройки кнопок, плагин сразу выдаёт некий код ещё без нажатия кнопок, как будто постоянно нажата какая-то кнопка. После нажатия любой кнопки и получения её кода, плагин снова переходит к этой первой позиции.
Вторая проблема в том что последовательное нажатие одной кнопки выдаёт для неё по 3-4 разных кода(. И так со всеми кнопками.
P.s. С "чиповым" Хоткеем кнопки отработали уже 2 года без проблем
Chip убирает дребезг в программе получающий данные от ардуино, я всё это делаю в скетче, то есть ардуино выдаёт всегда однозначный код, поэтому плагин не производит никакой обработки. Залей в ардуино мой скетч и проблем не будет.
Chip убирает дребезг в программе получающий данные от ардуино, я всё это делаю в скетче, то есть ардуино выдаёт всегда однозначный код, поэтому плагин не производит никакой обработки. Залей в ардуино мой скетч и проблем не будет.
Ok. А скетча полегче, только для резистива, не найдётся? С ардуиной почти не общался, боюсь лишнее из скетча вырежу). Или грузить всё и не забивать голову?)
Bersenev
28.02.2012, 23:52
Ok. А скетча полегче, только для резистива, не найдётся? С ардуиной почти не общался, боюсь лишнее из скетча вырежу). Или грузить всё и не забивать голову?)
Грузи всё, а в skin.ini задай переменные таким образом
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
Тогда будет работать только часть с резестивными кнопками
Грузи всё, а в skin.ini задай переменные таким образом
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
Тогда будет работать только часть с резестивными кнопками
Сегодня попробовал новый скетч. Загружается успешно, но ни одного кода после его загрузки я больше не увидел, нажатия кнопок ни к чему не приводят.
Менял порты и скорости, заново заливал скетч, заново регил плагин, в skin.ini всё прописано. К сожалению безрезультатно(
Bersenev
29.02.2012, 14:55
но ни одного кода после его загрузки я больше не увидел, нажатия кнопок ни к чему не приводят.
А где смотрел? В настройках скина или чем нибудь другим?
Bersenev
29.02.2012, 15:22
И ещё, на каком пине у тебя висят резестивные кнопки?
В моём скетче используется 7-ой пин
int RES_PIN = 7 ; // Вход для рулевых Кнопок
Если у тебя другой, то поменяй значение этой переменной
И ещё, на каком пине у тебя висят резестивные кнопки?
В моём скетче используется 7-ой пин
int RES_PIN = 7 ; // Вход для рулевых Кнопок
Если у тебя другой, то поменяй значение этой переменной
Коды смотрел только в настройках. Чем ещё посмотреть не знаю.
По пину ничего не скажу, ардуинка была в термоусадке, а сейчас до неё просто физически не добраться.
Попробовал новый "чиповый" скетч и новый HotKey. Всё исправно отрабатывает.
Bersenev
29.02.2012, 15:48
посмотри в скетче Chip-a номер номер пина, обычно он использует для резестивных кнопок 5-й, или дай ссылку на "новый" скетч, я скажу какой номер пина
Если в кармониторе (http://carmonitor.ru/ru/-c-83_60.html) покупал то значит на 5 пине
На 5 пине всё завелось). Отрабатывает нажатия на ура. Благодарю за консультации)
Fedorych
29.02.2012, 16:44
Решил и я попробовать плагин для своего пульта, все сделал как написано в шапке, только не стал заливать скетч. Оставил скетч от Чипа. Выгрузил его программу. Запустил икар, в настройках настроил нажатие и все заработало. Перезагрузил винду, нажатия кнопок в настройках икара определяются, но действий на них назначенных не происходит.
Обязательно заливать новый скетч для одного только ик-пульта?
Вдруг захочется откатится на программу от чипа...
Bersenev
29.02.2012, 16:52
Обязательно заливать новый скетч для одного только ик-пульта?
Вдруг захочется откатится на программу от чипа...
С ИК-пультом можно использовать родной скетч, мой ничем от него не отличается.
А вот для резистивных кнопок надо, так как мы по разному убираем дребезг, я в скетче, а Chip в программе.
Перезагрузил винду, нажатия кнопок в настройках икара определяются, но действий на них назначенных не происходит.
Здесь обрати внимание на режим SHIFT, возможно ты переключился в него, о его включении говорит индикатор в шапке(стрелочка вверх)
Fedorych
29.02.2012, 16:57
да наверное, шифт настраивал на кнопку. попробую позже.
С ИК-пультом можно использовать родной скетч, мой ничем от него не отличается.
А вот для резистивных кнопок надо, так как мы по разному убираем дребезг, я в скетче, а Chip в программе
Кстати, насчёт дребезга, одна из кнопок таки выдаёт два разных кода. Повесил на них одну команду.
И ещё, информацию насчёт 5 пина, наверное, можно выложить в шапке, чтобы такие как я с вопросами не приставали)
Fedorych
29.02.2012, 20:39
Попробовал, не работают действия:dntknw:
Стрелочек вроде нигде не наблюдал.
Кстати, насчёт дребезга, одна из кнопок таки выдаёт два разных кода. Повесил на них одну команду.
Update: после 4 часов в гараже машина остыла и дополнительные коды пришлось забивать ещё для 3 кнопок, старые уже не работали
Bersenev
01.03.2012, 01:26
Update: после 4 часов в гараже машина остыла и дополнительные коды пришлось забивать ещё для 3 кнопок, старые уже не работали
Я уже заметил что при нагревании коды меняются, так что учту это в следующем скетче
vilyaraver
01.03.2012, 16:41
Доброго Вам дня.
У меня к Вам вопрос по поводу акселерометра.
Его как-то необходимо калибровать или он в скретче калибруется самостоятельно?
Если нет, то как калибровать?
Kак правильно расположить акселерометр в машине?
p.s.: iCar DS - отличный проект, так держать!
Bersenev
01.03.2012, 17:14
У меня к Вам вопрос по поводу акселерометра.
Его как-то необходимо калибровать или он в скретче калибруется самостоятельно?
Если нет, то как калибровать?
Kак правильно расположить акселерометр в машине?
Калибровать надо, но пока калибровать можно только в ручную
в skin.ini вот эти переменные отвечают за калибровку
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
задаёшь сначала
calibrate_x=0
calibrate_y=0
calibrate_z=0
calibrate_n=15
calibrate_a=100
В папке скина в файл LABELS\label_list.txt добавь эти строки, если их там нет.
accelerometer_x
accelerometer_y
accelerometer_z
потом запускаешь икар, и назначаешь эти показатели в шапку или на главную панель, выставляешь акселерометр параллельно земле и запоминаешь значения для каждой из осей, выходишь из икара и в skin.ini
calibrate_x=полученное значение по х
calibrate_y=полученное значение по у
calibrate_z=полученное значение по z
снова запускаешь икар, теперь значение показателей должно быть равно нулю или близко к этому, при расположение акселерометра параллельно земле.
Теперь надо откалибровать угол поворота, для этого поворачиваешь акселерометр перпендикулярно земле. 90 делишь на полученное значение и умножаешь на 100.
calibrate_a=результат
Теперь можно пользоваться.
calibrate_n отвечает за инертность, то есть чем выше это число, тем меньше дребезг, но выше инертность показаний.
vilyaraver
01.03.2012, 20:25
Спасибо за быстрый ответ.
У Вас в первом посте схема и на ней акселерометр c 4-мя контактами на каждой
стороне! A в капрмониторе 5-тью контактами на каждой сторонe!
He реклама!
http://carmonitor.ru/ru/3mma7260-p-174.html
Как мне его подключить его используя Вашу схему?
Где там G1 and G2? TaM GS ST and OG...
Объясните пожалуйста...:wacko2::sad2:
Bersenev
01.03.2012, 20:50
С акселерометром с 5-ю контактами проблем нет, здесь всё описано http://www.compcar.ru/forum/showthread.php?t=7830
А мне кармонитор прислал 4-х контактный, на него схему пришлось поискать. С трудом нашёл, везде схема для 5-и контактного.
vilyaraver
01.03.2012, 23:53
Теперь надо откалибровать угол поворота, для этого поворачиваешь калибратор перпендикулярно земле. 90 делишь на полученное значение и умножаешь на 100.
1. Поворачиваешь калибратор (налево или право) или (вперёд или назад)?
2. А где найти ПОЛУЧЕНОЕ ЗНАЧЕНИЕ?
Всё остальное понятно!
Bersenev
02.03.2012, 00:15
я ошибся не КАЛИБРАТОР, а АКСЕЛЕРОМЕТР. Но это особо не важно.
Просто располагаешь плоскость акселерометра перпендикулярно земле, хоть по оси X, хоть по оси Y. Разницы нет. то есть хоть влево, хоть в право, хоть вперёд хоть назад. Значение смотришь в в показателях по оси х или по оси у.
Но что бы стало понятнее открой экран Кненомера, и наклоняй акселерометр вправо, и скорее всего заметишь, что акселерометр наклонился на 45 градусов, а машинка уже на все 90, а дальше взаимосвязь понятна, надо уменьшить угол где-то в два раза, тоесть задать calibrate_a=50, то есть 50%. Лично у меня получилось значение 48.
vilyaraver
02.03.2012, 00:42
Bersenev благодарствую Вас за полные и понятные ответы...:good::3:
Fedorych
02.03.2012, 14:22
Возвращаюсь к своей проблеме, очистил содержимое файлов duino_key_command.ini, duino_key_list.txt, duino_key_info.ini запустил икар, настроил действия для кнопок заново- кнопки заработали, но опять же до первой перезагрузки икара.
Кстате еще заметил, что включалка плагина в скине не работает,она переключает состояние,но после перезапуска икара, состояние плагина возвращается на значение прописанное в skin.ini.
Уже думаю может не туда прописал plugin_iCarDuino_is=1 ?
прикрепляю свои файлы настроек кнопок и скина.
Bersenev
02.03.2012, 15:07
Возвращаюсь к своей проблеме, очистил содержимое файлов duino_key_command.ini, duino_key_list.txt, duino_key_info.ini запустил икар, настроил действия для кнопок заново- кнопки заработали, но опять же до первой перезагрузки икара.
Кстате еще заметил, что включалка плагина в скине не работает,она переключает состояние,но после перезапуска икара, состояние плагина возвращается на значение прописанное в skin.ini.
Уже думаю может не туда прописал plugin_iCarDuino_is=1 ?
прикрепляю свои файлы настроек кнопок и скина.
Исправил твой skin.ini, скорее всего ты не запускал update, а всё добавлял руками.
Fedorych
02.03.2012, 21:21
Да вроде всегда запускаю update, давно уже руками не правил.
С твоим все заработало:yes4: и стрелку в шапке увидел.Спасибо!
Главный плюс управления через плагин, теперь не важно активно окно эмулятора или нет, все регулируется в любом случае.
И еще у меня сейчас действия выполняются только когда зажат шифт, хотя вроде настраивал без шифта. Может я чего-то не догоняю:dntknw:
Bersenev
02.03.2012, 22:02
И еще у меня сейчас действия выполняются только когда зажат шифт, хотя вроде настраивал без шифта. Может я чего-то не догоняю:dntknw:
Посмотрел твой файл настроек, у тебя все кнопки настроены для режима SHIFT.
Fedorych
02.03.2012, 22:10
как теперь правильно избавиться от шифта?
Bersenev
02.03.2012, 22:17
Настрой без shift и всё. Как настраивать я описывал, нажимаешь на правую панель, если появилась СТРЕЛКА ВВЕРХ, то настаиваешь для режима шифт, если стрелки нет, то для обычного режима
И ещё, SHIFT не надо удерживать, нажатие на SHIFT переключает набор команд на кнопках и всё, то есть шифт отключен - при нажатии на кнопку, выполняется одна команда, шифт включен - другая
Fedorych
02.03.2012, 22:27
Угу,понял.
Притащил комп с машины домой...
Опять новости:
1. Обновил скин, программу.
2. Зарегил плагин Duino.
3. В Skin.ini прописал:
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=0
4. В GPSGate виртуальный порт №9.
5. В конфиге Икара прописано:
duino_com=9
duino_com_baudRate=115200
Итог:
1. Если включен GPSGate имеем в настройках кнопок в Икаре бешенй бег строчек по кодам безостановочно по кругу.
1
LSTduino_37302C2C||duino_37302C2C
LSTduino_32362C36||duino_32362C36
LSTduino_332C3233||duino_332C3233
LSTduino_352C2C30||duino_352C2C30
LSTduino_382C3532||duino_382C3532
LSTduino_2C313033||duino_2C313033
LSTduino_2C2C3135||duino_2C2C3135
LSTduino_2C33362C||duino_2C33362C
LSTduino_3330312C||duino_3330312C
LSTduino_2A37370D||duino_2A37370D
LSTduino_A244750||duino_A244750
LSTduino_4753562C||duino_4753562C
LSTduino_332C322C||duino_332C322C
LSTduino_31322C32||duino_31322C32
LSTduino_372C3235||duino_372C3235
LSTduino_2C323837||duino_2C323837
LSTduino_2C2C3137||duino_2C2C3137
LSTduino_2C32332C||duino_2C32332C
Если выключаю GPSGate беготня курсора по кодам прекращается, но тогда вообще непонятно какой порт назначать...
В skin.ini команда "duino_is_ir_key=0" не влияет.
Андрей, подскажешь шаги решения вопроса?
Fedorych
03.03.2012, 22:53
У меня после выхода из спящего пульт отваливается, даже перезапуск икара не помогает, только перезагрузка винды:sad2:
С родной программой такого не наблюдалось
Bersenev
03.03.2012, 22:55
П
4. В GPSGate виртуальный порт №9.
А зачем тебе GPSGate?
А зачем тебе GPSGate?
Туплю я что-то. А какой порт-то выбирать?:dntknw:
Пробовал ведь раньше в машине, все работало с ИК-пультом. Чо-то подзабыл...
На ноуте все работает...
Bersenev
03.03.2012, 23:04
Туплю я что-то. А какой порт-то выбирать?:dntknw:
Пробовал ведь раньше в машине, все работало с ИК-пультом. Чо-то подзабыл...
На ноуте все работает...
Выбирай тот порт, на котором висит ардуино.
А если он у тебя в машине остался, то никакой.
А так ты назначаешь порт созданный GPSGate, а я абсолютно не представляю что GPSGate в этот порт посылает.
Bersenev
03.03.2012, 23:13
У меня после выхода из спящего пульт отваливается, даже перезапуск икара не помогает, только перезагрузка винды:sad2:
С родной программой такого не наблюдалось
А подробнее. Какие настройки? Какая версия плагина? Какая версия икара? Какой скетч в ардуино?
Вопрос в том что именно отваливается, пропадает порт ардуино или ардуино перестаёт передавать данные?
Если пропадает порт, то думаю стоит обновить драйвер CMD, последняя версия на текущий момент 2 08 14.
И ещё при уходе в сон ардуино отключается или всегда находится запитаным?
Выбирай тот порт, на котором висит ардуино.
А если он у тебя в машине остался, то никакой.
А так ты назначаешь порт созданный GPSGate, а я абсолютно не представляю что GPSGate в этот порт посылает.
Все завелось.:blush:
Дрова надо было поставить на Ардуино. Com-порт появился в нужном месте
Затупил. Почему-то у меня было ощущение, что на carpc все установлено. Вроде пробовал раньше... Наверное глюки.:blush:
Fedorych
04.03.2012, 01:02
А подробнее. Какие настройки? Какая версия плагина? Какая версия икара? Какой скетч в ардуино?
Вопрос в том что именно отваливается, пропадает порт ардуино или ардуино перестаёт передавать данные?
Если пропадает порт, то думаю стоит обновить драйвер CMD, последняя версия на текущий момент 2 08 14.
И ещё при уходе в сон ардуино отключается или всегда находится запитаным?
Настройки чего?
плагин 5 версии
икар 12
скетч родной от чипа
драйвер cmd сейчас не скажу.
Просто с программой от чипа такого не разу не было.
Bersenev
04.03.2012, 01:21
Настройки чего?
плагин 5 версии
икар 12
скетч родной от чипа
драйвер cmd сейчас не скажу.
Просто с программой от чипа такого не разу не было.
Что могу сказать, тогда пользуйся программой чипа, я сделал в плагине всё что мог, чтобы ардуино работал всегда. Я его и усыплял, передёргивал и даже ик датчик отключал подключал к ардуино всё работает как часы.
Но ты так и не сказал, порт после просыпания есть? И во время сна ардуино запитан или нет?
Fedorych
04.03.2012, 10:08
сегодня точно скажу есть ли порт,какая версия cmd.
ардунио не запитана,только usb.
Fedorych
04.03.2012, 17:37
Итак, имеем
Икар 12 версии
плагин 5 версии
CDM версии 2 08 14 (обновился 2.08.23b)
дунио подключенное только по юсб.
скетч от чипа
// http://compcar.ru
#include <IRremote.h>
byte bytes[4];
int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long ir_dt, old_ir;
void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // включить приемник
}
void loop() {
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
if (old_ir == ir_dt){delay(250);} //Пауза между короткими нажатиями
else {delay(500);}// Пауза после первого нажатия и удержания(перед повторами)
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(120); //пауза между повторами
Serial.write( bytes,4);
}
irrecv.resume();
}
}
Поэкспериментировал сегодня.
1. Запущена программа от чипа IRKey.exe и икар. Уходим в сон, 5 циклов полет нормальный,пульт после сна в икаре всегда работал.
2. Выгружаю IRKey.exe запускаю икар с загруженным плагином, закрываю икар,ухожу в сон,выхожу из сна, запускаю икар-пульт работает, проделал так тоже 5 раз.
3. Запускаю икар с плагином,ухожу в сон, выхожу из сна, и тут либо пульт работает (обычно только после 1 ухода в сон, после 2,3 ухода стабильно не работает),либо икар виснет намертво,либо икар работает,но пульт не работает. В том случае, если икар возобновился после сна,но без пульта, для проверки порта закрываю икар, запускаю IRKey.exe, его иконка в трее перечеркнутая, на нажатия кнопок не реагирует. В диспетчере устройств устройство есть и работает нормально. Помогает только перезагрузка винды.
Пробовал заливать скетч из этой темы,результат тот же.
Такое ощущение что плагину не хватает какой-то задержки опроса порта или наоборот. имхо.
Bersenev
04.03.2012, 17:46
попробуй 17-ю или 18-ю версию икара, где брать ты знаешь. В 12 версии икара эксперементировали с режимом сна, может здесь проблема. У меня ,как говорил ранее, ардуино работает стабильно.
Fedorych
04.03.2012, 19:06
с 17 ездил все эти дни,сегодня и 18 попробовал, потом решил на 12 откатится мало ли чего...но все без изменений.
у меня дуинка из кармонитора... Был в плагине сильный дребезг, попробовал залить скетч из первого сообщения этой темы, с модификацией под 5-й пин, теперь вообще кодов не видно в окне настройки... Только почему-то без нажатий пару раз фантомно проскакивали пару раз коды... А с нажатием вообще тишина ;)
Со скетчем от Чипа, конечно, шумело сильно, но хоть различало нажатия ;)
Вопрос (ы):
- Как в скетче регулировать "степень загрубления?"
- Где можно получить оргинальный скетч?
Спасибо заранее.
Bersenev
04.03.2012, 22:03
у меня дуинка из кармонитора... Был в плагине сильный дребезг, попробовал залить скетч из первого сообщения этой темы, с модификацией под 5-й пин, теперь вообще кодов не видно в окне настройки... Только почему-то без нажатий пару раз фантомно проскакивали пару раз коды... А с нажатием вообще тишина ;)
Со скетчем от Чипа, конечно, шумело сильно, но хоть различало нажатия ;)
Вопрос (ы):
- Как в скетче регулировать "степень загрубления?"
- Где можно получить оргинальный скетч?
Спасибо заранее.
А эти переменные duino_is_ir_key, duino_is_encoder_1, duino_is_encoder_2, duino_is_res_keys в skin.ini задал?
Если используешь только резистивные кнопки, то задай так
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
Скорее всего если исправил только номер пина для резистивных кнопок на 5, то этот же пин использует и процедура первого энкодера. Что при этом получиться точно не скажу. Так что задай переменные и попробуй.
Никакой степени загрубления в плагине нет, в текущей версии скетча расчёт кода ведётся из 500 полученных значений.
А про какой оригинальный скетч идёт речь?
да, переменные в .инишник добавил... Все по нулям, кроме резистивных кнопок.
Насчет расчета среднего из 50-ти понял...
Может, просто дольше нажимать нужно? Хотя, тоже не получалось.
Про оригинальный скетч - возможно неправ, но - а вот как вернуть дуинку к исходному состоянию из кармо.....ру?
Bersenev
04.03.2012, 23:21
да, переменные в .инишник добавил... Все по нулям, кроме резистивных кнопок.
Насчет расчета среднего из 50-ти понял...
Может, просто дольше нажимать нужно? Хотя, тоже не получалось.
Про оригинальный скетч - возможно неправ, но - а вот как вернуть дуинку к исходному состоянию из кармо.....ру?
http://www.compcar.ru/forum/showthread.php?t=4640
Только расчёт не из 50-ти, а из 500-та значений.
Последняя версия скетча и программы здесь (http://www.compcar.ru/forum/showpost.php?p=87533&postcount=227)
http://www.compcar.ru/forum/showthread.php?t=4640
Только расчёт не из 50-ти, а из 500-та значений.
спасибо, буду экспериментировать. :)
з.Ы. И Админу тоже спасибо.
Bersenev
05.03.2012, 16:18
с 17 ездил все эти дни,сегодня и 18 попробовал, потом решил на 12 откатится мало ли чего...но все без изменений.
Попробуй эту версию плагина
Последняя версия скетча и программы здесь (http://www.compcar.ru/forum/showpost.php?p=87533&postcount=227)
Загрузил тот скетч по ссылке, всё возвратилось на круги своя...
Казалось бы, всё ОК.. стал менять скетч... загружаю... и всё блин, словил ошибку Error: avrdude: stk500_getsync(): not in sync: resp=0x00... :sad2::sad2:И всё, больше ничего не заливается. Вытаскивать, bootloader загружать теперь?:huh2:
Fedorych
05.03.2012, 21:34
Попробуй эту версию плагина
Пробовал с 18 версией.
6 раз комп перезагружал.в сон загонял больше 10 раз.
После 1 выхода из сна пульт всегда работает, 2 случая после второго выхода из сна работает, на 3 выходе пульт не разу не работал, но и икар ни разу не зависал.
Bersenev
05.03.2012, 21:43
Пробовал с 18 версией.
6 раз комп перезагружал.в сон загонял больше 10 раз.
После 1 выхода из сна пульт всегда работает, 2 случая после второго выхода из сна работает, на 3 выходе пульт не разу не работал, но и икар ни разу не зависал.
А с пятой версией плагина зависал всегда?
Fedorych
05.03.2012, 21:48
не,не всегда.
в 30% случаях.
Bersenev
06.03.2012, 00:55
2 Fedorych
Попробуй эту версию
Возможно что после выхода из сна, стоит добавить паузу 1-3 сек и только после этой паузы запустить таймер
Fedorych
06.03.2012, 11:48
Андрей,ближе к вечеру отпишусь.
Кстате,в ходе этих эксперементов за эти дни, 2-3 раза слетала установленная тема бмв на цфстайл.
Fedorych
06.03.2012, 17:28
упорно не хочет работать после 2 выхода из сна:sad2:. 3 раза перезагружал винду.
Bersenev
06.03.2012, 21:07
упорно не хочет работать после 2 выхода из сна:sad2:. 3 раза перезагружал винду.
Уже и не знаю что делать:dntknw:
Если эта версия не поможет, то пришли файл iCarDuino.log, он будет создан в корне диcка C:
Fedorych
06.03.2012, 21:22
хорошо, завтра опробую.
версия икара важна? пробую щас только с 18
Bersenev
06.03.2012, 21:27
хорошо, завтра опробую.
версия икара важна? пробую щас только с 18
нет, только желательно не 12-я
Fedorych
07.03.2012, 10:18
Андрей, ну вроде как работает:yes4:
По пути на работу, 6 раз загонял в сон, пульт все время начинал работать:smile2:
Будем тестировать дальше.
З.ы. пробовал с 18 версией.
возможно ли сделать экран чтоб выводить показания датчиков давления масла температуры охлаждайки ну и т.д.????
Bersenev
13.03.2012, 11:27
возможно ли сделать экран чтоб выводить показания датчиков давления масла температуры охлаждайки ну и т.д.????
Я думаю что отдельный экран делать нет особого смысла, а вот сделать возможность в экране CheckEngine задавать любые показатели, а не только от плагинов связи с автомобилем можно. Хотя можно и отдельный экран Датчики сделать. В общем подумаю.
Я думаю что отдельный экран делать нет особого смысла, а вот сделать возможность в экране CheckEngine задавать любые показатели, а не только от плагинов связи с автомобилем можно. Хотя можно и отдельный экран Датчики сделать. В общем подумаю.
Было бы хорошо )))
Можно Андрей здесь вопрос задам, хоть к ардуино не относится. Можно ли сделать датчик температуру проца?
Было бы хорошо )))
Можно Андрей здесь вопрос задам, хоть к ардуино не относится. Можно ли сделать датчик температуру проца?
http://www.pccar.ru/showthread.php?t=14526
Андрей, а можно как-то сделать возможность посылать с пульта нажатие клавиатуры?
Т.е. нажал кнопку на пульте получил на выходе, к примеру, "F7".
Для чего? Переключаю активность окон комбинацией "Alt+Esc". Хотелось бы это делать с пульта.
Сейчас у меня КейбоардМаньяк делает замену и я жму физически клавишу "F7" получаю "Alt+Esc".
Bersenev
15.03.2012, 15:59
Андрей, а можно как-то сделать возможность посылать с пульта нажатие клавиатуры?
Т.е. нажал кнопку на пульте получил на выходе, к примеру, "F7".
Для чего? Переключаю активность окон комбинацией "Alt+Esc". Хотелось бы это делать с пульта.
Сейчас у меня КейбоардМаньяк делает замену и я жму физически клавишу "F7" получаю "Alt+Esc".
Можешь попробовать повесить команду икара sendkey;{F7} или сразу sendkey;%{esc}, чтобы ничего не заменять
http://www.pccar.ru/showthread.php?t=14526
Спасибо :happy:
А вот такой вопрос: плагин вообще видит СОМ-порты выше 10-го?
Дело в том, что мне пришлось дуинку повесить на другой хаб, и семерка сама стала переназначать порт с пятого на 6-й и обратно... Мне это "плавание" надоело, и я в девайсмэнеджере жестко назначил устройству порт 14 (другие все заняты уже). В рез-те Hotkey.exe устройство видит, а иКарДуино - нет.
Спустя месяц пользования объявляю благодарность авторам Икара за iCarDuino:smile2:. За время использования в содружестве с рулевыми кнопками абсолютно никаких проблем не выявлено, всё работает как атомные часы.
По плагину управления нагрузок
он будет уметь?
1. Востановливать включенные нагрузки после включения IcarDS и выключать после завершения работы IcarDS.
2. Группировать реле -например одним нажатием включить две реле и т.д.
Fedorych
25.03.2012, 17:08
А вот такой вопрос: плагин вообще видит СОМ-порты выше 10-го?
Дело в том, что мне пришлось дуинку повесить на другой хаб, и семерка сама стала переназначать порт с пятого на 6-й и обратно... Мне это "плавание" надоело, и я в девайсмэнеджере жестко назначил устройству порт 14 (другие все заняты уже). В рез-те Hotkey.exe устройство видит, а иКарДуино - нет.
У меня на 21-все работает.
У меня на 21-все работает.
Ага, спасибо. Буду копать систему...:yes4:
Bersenev
25.03.2012, 22:33
По плагину управления нагрузок
он будет уметь?
1. Востановливать включенные нагрузки после включения IcarDS и выключать после завершения работы IcarDS.
2. Группировать реле -например одним нажатием включить две реле и т.д.
Для начала объясню, отдельного плагина не будет. Все функции управления нагрузками будут реализованы в плагине iCarDuino.
1. Это сделаю, ничего здесь сложного нет. Но опционально, потому что некоторым эта опция будет мешать.
2. Таких настроек в скине не будет, но сделать это будет можно, просто отредактировав определённые файлы.
Bersenev
04.04.2012, 19:37
Схема блока управления нагрузками на 8 реле. Блок реле подключается к ардуино через разьём Х1, если надо использовать 16 реле, то к разъёму Х2 первого блока реле подключаем разъём Х1 второго блока реле и так можно расширить до 4х блоков, то есть 32 реле
(ардуино) -- (Х1 блок1 Х2) -- (Х1 блок2 Х2) -- (Х1 блок3 Х2) -- (Х1 блок4 Х2)
26166
Макет печатной платы
26162
Кстати эту плату расширения, можно подключать к разьему для программирования ICSP
Bersenev
04.04.2012, 21:58
Кстати эту плату расширения, можно подключать к разьему для программирования ICSP
Именно так и подключаю, только один выход на D8, так как D12 планируется использовать для других целей
autohirurg
04.04.2012, 23:14
Да Вы что этот шилд может всего 600мА на нагрузку выдать, а вентилятор печки потребляет от 1А до 5А в зависимости от автомобиля. Здесь скорее всего больше подходит вот такой девайс (http://carmonitor.ru/ru/cyberboardmega-p-191.html) , еще свободные ключи можно использовать для управления нагрузками.
Так мне не надо напрямую, у меня еще блок управления скоростью вентилятора стоит прям возле мотора, на который подается сигнал с блока климатконтроля, которому нужен только ШИМ сигнал., а он уже преобразует в нагрузку.
Вот только чем этот ШИМ сигнал я могу прочитать с основного блока управления климатом? и задать его в ардуино?
Bersenev a, у U2 что за название (плохо читаемо) и можно пожалуйста плату в Layout
Разъём Х2 6 (D11 next), Х1 2 (D12) - они так и должены в воздухе висеть?
Bersenev
05.04.2012, 08:11
Bersenev a, у U2 что за название (плохо читаемо)
Разъём Х2 6 (D11 next), Х1 2 (D12) - они так и должены в воздухе висеть?
Заменил схему, теперь читается и разъемы подписаны правильно, только на X1-7 GND и X1 - 8 + 12 на плате вынесены в отдельный разъём, чтобы не делать плату двухсторонней.
и можно пожалуйста плату в Layout
Разводка делалась в P-Cad, платы заказаны и должны быть готовы через 3 недели. Блок в виде конструктора можно будет приобрести у меня, в собранном виде в carmonitor-е.
Разводка делалась в P-Cad, платы заказаны и должны быть готовы через 3 недели. Блок в виде конструктора можно будет приобрести у меня, в собранном виде в carmonitor-е.
А почем будет в виде конструктора:smile2:
Bersenev
05.04.2012, 08:55
А почем будет в виде конструктора:smile2:
1000р, при самостоятельном изготовлении вряд ли получиться дешевле, только 8 реле, микросхемы и разъёмы в розничном магазине обходятся в 600-800р, не считая платы. В собранном варианте в кармониторе порядка 1500р.
1000р, при самостоятельном изготовлении вряд ли получиться дешевле, только 8 реле, микросхемы и разъёмы в розничном магазине обходятся в 600-800р, не считая платы. В собранном варианте в кармониторе порядка 1500р.
А можно купить отдельно саму плату без деталей?
Bersenev
05.04.2012, 17:20
А можно купить отдельно саму плату без деталей?
Как платы будут готовы, тогда и обсудим
Как платы будут готовы, тогда и обсудим
Хорошо буду ждать:bye: куплю не одну!
слава богу, не успел я себе таймеры понатыкать, теперь на ардуине всякие холодильники будут с задержкой в авто отключаться :)
Добрый день, Коллеги!
Кто нибудь заливал скетч из 1-го поста в ардуинку? У меня собака ругается на строку OneWire ds(WIRE_PIN);
Что-то типа OneWire не является типом....
Библиотеки подключены. На аналогичную строчку IRrecv irrecv(RECV_PIN) не ругается.
В какую сторону рыть?
Bersenev
09.04.2012, 10:31
А библиотеку OneWire установил?
Хорошо буду ждать:bye: куплю не одну!
У тебя же есть плата с ключами, ты можешь ее использовать
У тебя же есть плата с ключами, ты можешь ее использовать
да забыл, но пока еще не пришла:whistle:
А библиотеку OneWire установил?
В папке библиотек ардуины она есть. Импорт сделал, директива include тоже есть.
Вольтметр на Ардунио вывести в Икар не планируется?
Как платы будут готовы, тогда и обсудим
Хотелось бы тоже платок прикупить.А модуль с CarMonitor http://carmonitor.ru/ru/product_info.php?products_id=172 использовать нельзя?
Bersenev
17.04.2012, 11:24
Хотелось бы тоже платок прикупить.А модуль с CarMonitor http://carmonitor.ru/ru/product_info.php?products_id=172 использовать нельзя?
Сегодня завод отзвонился, платы будут через две неделе. Использовать то можно, но не рентабильно. Подключение восьми таких реле обойдётся в два раза дороже, чем уже собранный мой блок, в том же кармониторе.
Сегодня завод отзвонился, платы будут через две неделе. Использовать то можно, но не рентабильно. Подключение восьми таких реле обойдётся в два раза дороже, чем уже собранный мой блок, в том же кармониторе.
Спасибо будем ждать
AlexPicaso
07.05.2012, 06:27
не компилировался скетч.
вот решение.
думал только у меня проблема с библиотекой для IR.
есть ли возможность использовать ее с arduino-1.0 ?
Оказывается возможность есть! Одно из изменений в ардуино-1.0 это переименование WProgram.h в Arduino.h . Соответственно чтобы работала ардуино нужно все упоминания в библиотеке об WProgram.h нужно заменить на Arduino.h. Проделав это, у меня скетч скомпилировался. Переделанная библиотека:
Сегодня завод отзвонился, платы будут через две неделе. Использовать то можно, но не рентабильно. Подключение восьми таких реле обойдётся в два раза дороже, чем уже собранный мой блок, в том же кармониторе.
А когда можно ожидать плагин для реле?:smile2:
Ну когда уже можно ожидать плагин для реле?:whistle:
Ну когда уже можно ожидать плагин для реле?:whistle:
Вот интересно, чего такого не хватает в тойоте рав 4, чем нужно управлять из Икара с помощью реле?
Без обид! У меня не хватает фантазии это представить!
Вот интересно, чего такого не хватает в тойоте рав 4, чем нужно управлять из Икара с помощью реле?
Без обид! У меня не хватает фантазии это представить!
А я и не обиделся:whistle:
Например управление задними подогревателями сидений, управление стеклоподьемниками (как в LeoCar) и т. д. чтобы не дырявить панель:smile2:
никак не получается заставить iCAR видеть нажатие кнопок на руле =(
IRkey кнопки видит и коды выдает (значит с дровами все ок), в iCARe прописал переменные (вроде у меня на 4 порту висит, но не уверен, подскажите как узнать достоверно на каком порту ИК приемник и какая скорость?), плагин в оболочку зарегесрировал, захожу в настройки жму кнопки на руле - ноль эмоций =(
ПС может в инициалайз ини надо прописать переменные? Я конфигу могу править только из под оболочки, когда просто запускаю конфиг при нажатии ОК ругается на права доступа, из под оболочки все меняет и запоминает...
никак не получается заставить iCAR видеть нажатие кнопок на руле =(
IRkey кнопки видит и коды выдает (значит с дровами все ок), в iCARe прописал переменные (вроде у меня на 4 порту висит, но не уверен, подскажите как узнать достоверно на каком порту ИК приемник и какая скорость?), плагин в оболочку зарегесрировал, захожу в настройки жму кнопки на руле - ноль эмоций =(
ПС может в инициалайз ини надо прописать переменные? Я конфигу могу править только из под оболочки, когда просто запускаю конфиг при нажатии ОК ругается на права доступа, из под оболочки все меняет и запоминает...
Привет, давай по порядку:
1) качаем архив iCarDuino и копируем его в ...\iCar DS\Extentions\iCarDuino
2) в созданной папке 3 файла. Жми на RunMe1st.cmd
3) заходишь в диспетчер устройств Windows и ищешь вкладку с USB смотришь номер Com порта своего контроллераю Для проверки отключи-включи его чтобы убедится что то он.
4) заходишь в iCarDSConfig и во вкладке Global Vars добавляешь две строки
duino_com=X
duino_com_baudRate=115200
где X - твой номерт порта
5) открываешь skin.ini в папке скина, который ты используешь и с помошью блокнота добавляешь следующие строчки:
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
duino_is_ir_key=1
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
6) жмешь на UPDATE в этом же скине
7) перезапускаешься (может быть и лишнее:smile1:)
8) запускаешь Icar, заходишь в настройки 4 страница и жмёшь кнопку плагин iCarDuino ЗАГРУЖАТЬ
9) нажимаешь кнопку правее НАСТРОЙКА кнопопк CarDuino
10) выскакивает табличка и при нажатии на кнопку появляется новое значение которому уже присваиваешь кнопку
когда подключал три раза порвал бубен, зато теперь почти с закрытыми глазами)))
Привет, давай по порядку:
1) качаем архив iCarDuino и копируем его в ...\iCar DS\Extentions\iCarDuino
2) в созданной папке 3 файла. Жми на RunMe1st.cmd
3) заходишь в диспетчер устройств Windows и ищешь вкладку с USB смотришь номер Com порта своего контроллераю Для проверки отключи-включи его чтобы убедится что то он.
4) заходишь в iCarDSConfig и во вкладке Global Vars добавляешь две строки
duino_com=X
duino_com_baudRate=115200
где X - твой номерт порта
5) открываешь skin.ini в папке скина, который ты используешь и с помошью блокнота добавляешь следующие строчки:
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
duino_is_ir_key=1
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
6) жмешь на UPDATE в этом же скине
7) перезапускаешься (может быть и лишнее:smile1:)
8) запускаешь Icar, заходишь в настройки 4 страница и жмёшь кнопку плагин iCarDuino ЗАГРУЖАТЬ
9) нажимаешь кнопку правее НАСТРОЙКА кнопопк CarDuino
10) выскакивает табличка и при нажатии на кнопку появляется новое значение которому уже присваиваешь кнопку
когда подключал три раза порвал бубен, зато теперь почти с закрытыми глазами)))
Спасибо, сегодня попробую!
Делал практически также, только в skin.ini не занл что нужно прописывать.
Про третий пункт, дело в том, что в диспетчере устройсвт IRkey не прописывает своего названия, во вкладке с COM портами у меня три усройства:
Locosys GPS (com3)
устройство ввода (com4)
последовательный порт (com1)
- методом исключения вроде как com4 получается, но у него в настройках скорость 9600, а не 115200 :dntknw:
Про четвертый пункт: в конфиг можно заходить из под оболочки - это одно и тоже?
com попробуй руками подобрать;
точно не сом 1;
конфиг правь их под Windows. Открывай с помошью блокнота
Bersenev
27.05.2012, 17:26
Немного поправлю инструкцию
1) качаем архив iCarDuino и копируем его в ...\iCar DS\Extentions\iCarDuino
2) в созданной папке 3 файла. Жми на RunMe1st.cmd
3) заходишь в диспетчер устройств Windows и ищешь вкладку с USB смотришь номер Com порта своего контроллераю Для проверки отключи-включи его чтобы убедится что то он.
С первыми тремя пунктами всё нормально.
4) заходишь в iCarDSConfig и во вкладке Global Vars добавляешь две строки
duino_com=X
duino_com_baudRate=115200
где X - твой номерт порта
Параметр duino_com_baudRate зависит от скорости порта заданного в скетче для Arduino, в скетчах от кармонитора это обычно 115200, я сделал также. Если используется другой скетч, то надо выставить значения как в скетче. Ещё желательно задать это же значение в настройках порта в системе.
5) открываешь skin.ini в папке скина, который ты используешь и с помошью блокнота добавляешь следующие строчки:
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
duino_is_ir_key=1
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
Здесь всё зависит от версии скина, если используется последняя версия хамелеона, то править надо уже не в skin.ini, а в duino.ini
6) жмешь на UPDATE в этом же скине
Вот это делать не надо.
7) перезапускаешься (может быть и лишнее:smile1:)
8) запускаешь Icar, заходишь в настройки 4 страница и жмёшь кнопку плагин iCarDuino ЗАГРУЖАТЬ
Пункты 7 и 8 надо поменять местами, то есть сначала включить загрузку плагина, а потом перезапустить икар
9) нажимаешь кнопку правее НАСТРОЙКА кнопопк CarDuino
10) выскакивает табличка и при нажатии на кнопку появляется новое значение которому уже присваиваешь кнопку
Здесь всё нормально.
com попробуй руками подобрать;
точно не сом 1;
конфиг правь их под Windows. Открывай с помошью блокнота
а нет никакой консольной команды, которая бы задействованные ком порты возвращала? лень как-то неоколько десятков портов руками перебирать :blush:
уважаемый Bersenev
прошу прощения что написал все свои ходы, может что-то указал некорректно. Делал всё научным тыком ))) Всё работет отлично. Конечно бы было бы хорошо это всё автоматизировать. Для простых смертных это всё сложновато
а нет никакой консольной команды, которая бы задействованные ком порты возвращала? лень как-то неоколько десятков портов руками перебирать :blush:
запускаем диспетчер задач - Порты Com и LPT
далее находиим свой девайс, жмём на него правой кнопкой - запускаем СВОЙСТВА
Вкладка ПАРАМЕТРЫ ПОРТА - кнопка ДОПОЛНИТЕЛЬНО
в открывшемся окне видим
номер Com порта и выбираемый требуемый
вот картинка
http://upload.fryazino.net/view/97749/1.png
запускаем диспетчер задач - Порты Com и LPT
далее находиим свой девайс, жмём на него правой кнопкой - запускаем СВОЙСТВА
Вкладка ПАРАМЕТРЫ ПОРТА - кнопка ДОПОЛНИТЕЛЬНО
в открывшемся окне видим
номер Com порта и выбираемый требуемый
вот картинка
http://upload.fryazino.net/view/97749/1.png
Разобрался с портами, проблема была в том, что в деспетчере устройств не писалось названия, просто устройства посл ввода (com4), в итоге выяснил что это именно IRKey, поменял ему скорость на 115200 и проделал все по инструкции (строки писал в dunio.ini)...
:dntknw: все равно icar кнопки не видит. Программу IRKey их видит, в тоже время оболочка никак на нажатие не реагирует.
Подскажите где куда дальше копать пожалуйста :wacko2:
Bersenev
28.05.2012, 22:53
Разобрался с портами, проблема была в том, что в деспетчере устройств не писалось названия, просто устройства посл ввода (com4), в итоге выяснил что это именно IRKey, поменял ему скорость на 115200 и проделал все по инструкции (строки писал в dunio.ini)...
:dntknw: все равно icar кнопки не видит. Программу IRKey их видит, в тоже время оболочка никак на нажатие не реагирует.
Подскажите где куда дальше копать пожалуйста :wacko2:
А ты случайно IRKey вместе с икаром не запускаешь? Если запущен IRKey, то плагин не сможет открыть порт ардуино.
А ты случайно IRKey вместе с икаром не запускаешь? Если запущен IRKey, то плагин не сможет открыть порт ардуино.
Подумал об этом в какой-то момент, сначала просто закрыл IRKey - не помогло, потом переименовал экзешник (в автозагрузке его нет, но он грузится) и ребутнул комп - тоже не помогло :sad2:
есть один классный способ:
выдерни его физически и опять воткни. Если не поможет -удали через диспетчер задач ВМЕСТЕ с ДРАЙВЕРАМИ. И опять воткни. Я так со своим Пультиком маялся пока он нормально не отобразился в вышеуказанной папке. Не занят ли он у тебя другим приложением?
Если честно я со своим намучался. С Hotkey так и не запустил. Пока подключал стока всего наделал...
есть один классный способ:
выдерни его физически и опять воткни. Если не поможет -удали через диспетчер задач ВМЕСТЕ с ДРАЙВЕРАМИ. И опять воткни. Я так со своим Пультиком маялся пока он нормально не отобразился в вышеуказанной папке. Не занят ли он у тебя другим приложением?
Если честно я со своим намучался. С Hotkey так и не запустил. Пока подключал стока всего наделал...
:sad2: это мне надо фальшпол разобрать, корпус компа развентить (ИК подключен внутри корпуса на USB материнки)...
Попробую сначала просто дрова перестаивть, если не поможет на выходных полезу внутрь
Bersenev
01.06.2012, 20:22
Платы получил
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-503.jpg
Ну когда уже можно ожидать плагин для реле?:whistle:
Вот теперь могу ответить. За выходные сделаю несколько блоков реле, а к концу следующей недели закончу прошивку, плагин и поддержку в скине
Привет всем. Давно я тут не был, а тут такие передвижки. Проект за год сильно вырос однако ;)
Наконец добрались руки до Кардуинки (v.4), которая давно валяется.
Повозился по порядку с каждым элементом по отдельности, всё работает.
Дошел до энкодеров. Собрал на макетнике тестовую схемку из шапки (IR, 2х датчика температуры, 1х енкодер, фоторезистор (не стал выкидывать, хотя скетч/плагин не поддерживает его).
http://s019.radikal.ru/i615/1206/1d/27745994f2d7t.jpg (http://radikal.ru/F/s019.radikal.ru/i615/1206/1d/27745994f2d7.jpg)
Всё бы ничего, но с енкодером непонятки.
При вращении выдаются значения типа: duino_AAAA008E (основное, висит постоянно), duino_AAAA002A/duino_AAAA004E (промежуточные, мелькает между щелчками). Таже ситуация и кодами с пульта (коды видятся, но эта *** их забивает).
Проверял на втором, ситуация аналогична. Парой не цеплял ещё. При отключении d5 всё ок.
ЗЫ: По подключению есть небольшие отличия: резисторов номиналом 3,2 и 6,1кОм не нашел. Использовал 3,3/6,2кОм (1%).
Хочу попробовать собрать схемку на базе кондеров, но это так, чисто в порядке эксперимента (там используются d2-4 и здесь он работать не будет) :(
Может у кого есть мысли, где я что накосячил?
Bersenev
05.06.2012, 19:05
коды типа duino_AAAAхххх возвращает процедура обработки резестивных кнопок, энкодер должен выдавать коды типа duino_EE000#0$, где # - номер пина, к которому подключён энкодер, а $ - ( 1 - вправо, 2 - влево, 3 - нажатие ).
Судя по твоему описанию скорее всего перепутан номер пина обработки энкодера в скетче и номер пина, к которому реально подсоединён энкодер
Bersenev Спасибо за ответ.
Посмотрел схему, пины вроде теже (A5/А6 в данном случае от энкодера). Правда на схеме почему-то нумерация пинов A0-A7 обратная, но это не принципиально.
От греха подальше убрал с макетки незадействованный в скетче фоторезистор висящий на A0 (в схеме там акселерометр висит). Скетч из шапки, переносился копипастом. Ноль эмоций :(
Upd: пробежался по настройкам, отключил duino_is_res_keys=0, хотя резистивные кнопки выведены на А7 и у меня не задействованы. Коды вида duino_AAAAхххх пропали совсем. Но и какой-либо реакции на поворот энкодера не проявляется (почему она была раньше в виде кодов от резистивных кнопок тоже непонятно) :sad2:
Bersenev
06.06.2012, 16:15
Укажи в скетче для резестивных кнопок пин, к которому подключен энкодер. И выложи коды, которые будут попадать в икар. Функция обработки энкодера настроена на определённые значения, возможно у тебя получаются другие значения и функция их игнорирует. А так мы определим какие именно значения выдаются при вращении энкодера и попробуем подправить скетч.
переставил дрова на ИК пультик, все-равно iCAR его не видит, а родная прога видит... Пробовал назначить вместо 4го ком порта второй, не дало эфекта.
Как еще его можно заставить работать?
не могу догнать как сделать вольтметр и датчик бензина адаптировать?
у всех сразу пультики заработали? один я мучаюсь?
у всех сразу пультики заработали? один я мучаюсь?
Пульт заработал сразу. И сейчас работает.:yes4:
Проблема не в Икаре, где-то что-то невнимательно сделал...:dntknw:
Ну когда уже можно ожидать плагин для реле?:whistle:
:dntknw:
Для работы кнопок на руле нужны библиотеки: IRremote, OneWire ???
__________________________________________________ ____________
Разобрался - не нужен, кнопки заработали! =)
А у меня не работает. У меня старый carduino nano v4, на ATMEGA 168, из партии с не правильными стабилизаторами. Старые коды типа http://www.compcar.ru/forum/showthread.php?t=4640 и http://www.compcar.ru/forum/showthread.php?t=4959 работают нормально а вот код для из этой темы не работает, загружается в контроллер а дальше тишина, ни icar, ни монитор порта, ни индикатры передачи/ приёма никак не реагируют, может для 168 нужен специальный код?
А у меня не работает. У меня старый carduino nano v4, на ATMEGA 168, из партии с не правильными стабилизаторами. Старые коды типа http://www.compcar.ru/forum/showthread.php?t=4640 и http://www.compcar.ru/forum/showthread.php?t=4959 работают нормально а вот код для из этой темы не работает, загружается в контроллер а дальше тишина, ни icar, ни монитор порта, ни индикатры передачи/ приёма никак не реагируют, может для 168 нужен специальный код?
Нет, специального кода не требуется, главное чтобы код укладывался в объем 16Кб
код в объём укладывается, загружается без проблем. а дальше тишина. Я ведь правильно понимаю что светодиод передачи данных TX на контроллере должен мигать когда ловит сигнал от пульта, кнопок и энкодеров ?
Видимо кроме стабилизатора в этой партии ещё косяки были, а может и запуск с таким стабилизатором от 12 вольт вывел контроллер из строя. Похоже надо новый покупать.
Bersenev
20.07.2012, 00:12
А у меня не работает. У меня старый carduino nano v4, на ATMEGA 168, из партии с не правильными стабилизаторами. Старые коды типа http://www.compcar.ru/forum/showthread.php?t=4640 и http://www.compcar.ru/forum/showthread.php?t=4959 работают нормально а вот код для из этой темы не работает, загружается в контроллер а дальше тишина, ни icar, ни монитор порта, ни индикатры передачи/ приёма никак не реагируют, может для 168 нужен специальный код?
Судя по всему просто не включены нужные режимы работы.
Случайно вот это не делал?
В skin.ini добавляем такие строки, если их там нет
duino_shift_state=0
calibrate_x=418
calibrate_y=400
calibrate_z=568
calibrate_n=15
calibrate_a=48
plugin_iCarDuino_is=1
и эти переменные, которые включают или выключают использование ик пульта, энкодеров или резестивных кнопок, если что то вами не используется. 0 - выключено, 1 - включено.
duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1
Для последней версии скина ХАМЕЛЕОН эти переменные хранятся в файле duino.ini, и если они в двух файлах одновременно, то возможен подобный результат.
изначально не делал, не работало, потом прописал как написано в первом посте - все равно не работает. у меня подключены только резистивные кнопки, ик и энкодеры, термометры и акселерометр нет. Опять таки всё тот же вопрос - когда нажимается любая кнопка или ик сигнал принимается на контроллере ведь должен мигать тх даже если програнна не подключена или настроена неправильно ?
Bersenev
20.07.2012, 00:34
Опять таки всё тот же вопрос - когда нажимается любая кнопка или ик сигнал принимается на контроллере ведь должен мигать тх даже если програнна не подключена или настроена неправильно ?
duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1
Если значения этих переменных равно нулю, то ничего передаваться не будет, так как сначала плагин смотрит значения этих переменных, и отправляет команды в ардуино обработку каких устройств надо включить. А если что то настроено не верно, то и команды на включение в ардуино не приходят, а следовательно и он ничего отдавать не будет.
Проверил, в dino.ini эти строки есть, из skin.ini их удалил, перезапустил, эффект тот же - тишина. То что у меня нет датчиков температуры и акселерометра на это может както влиять ?
Bersenev
20.07.2012, 08:55
Проверил, в dino.ini эти строки есть, из skin.ini их удалил, перезапустил, эффект тот же - тишина. То что у меня нет датчиков температуры и акселерометра на это может както влиять ?
Отсутствие датчиков ни на что не влияет.
1. попробуй перерегистрировать плагин.
2. Проверить включена ли загрузка плагина в настройках скина.
3. Проверь правильно ли заданы переменные duino_com=номер порта и duino_com_baudRate=скорость порта в iCarDSConfig
4. Проверь не занят ли порт другой программой.
Если всё это сделал, а плагин так и не заработал, то в скетче найди такую строку
if( is_ir_key ) ir_key();
и измени её на такую
ir_key();
при таком варианте скетч всегда будет отдавать данные при поступлении сигнала от ик-пульта, не зависимо от того отключены они в плагине или нет, то есть начнёт мигать светодиод передачи данных на ардуино.
1. Плагин перерегистрируется просто запуском RunMe1st.cmd ? Если так то сделал.
2. Загрузка плагина в скине включена, на всякий случай выключил и включил снова, с перезапусками.
3. Переменные в iCarDSConfig указаны правильно, на всякий случай стёр и прописал заново.
4. Порт вроде ничем не занят, монитор порта на нём запускается, ардуино программируется, программа от старого управления работает, естественно при запуске icar все эти программы не используются.
Не помогло, не работает.
А вот изменение кода помогло. ИК заработал, сделал такие же изменения для кнопок и энкодеров - тоже заработали.
Так можно оставить? это как то будет влиять на производительность, стабильность или ещё на что нибудь? Компик у меня слабенький, на первом атоме, каждый мегагец на счету. Или ещё где то поискать причину не работы с оригинальным кодом?
Появился ещё один вопрос - с обычными, большими, пультами работает нормально, но я покупал специально для машины довольно удобный и симпатичный автомобильный пульт SONY RM-X6S, пульт точно рабочий, проверял, но icar его команды не видит, видимо какая то хитрая кодировка, с этим можно что нибудь сделать ?
Bersenev
20.07.2012, 17:05
А вот изменение кода помогло. ИК заработал, сделал такие же изменения для кнопок и энкодеров - тоже заработали.
Так можно оставить? это как то будет влиять на производительность, стабильность или ещё на что нибудь? Компик у меня слабенький, на первом атоме, каждый мегагец на счету. Или ещё где то поискать причину не работы с оригинальным кодом?
Можно, на производительность это влиять не будет. Если не используешь акселерометр и термометры, то ничего страшного не случится, а вот если будешь использовать, то могут быть проблемы при выходе из сна
Появился ещё один вопрос - с обычными, большими, пультами работает нормально, но я покупал специально для машины довольно удобный и симпатичный автомобильный пульт SONY RM-X6S, пульт точно рабочий, проверял, но icar его команды не видит, видимо какая то хитрая кодировка, с этим можно что нибудь сделать ?
Здесь не помогу, это лучше у Chip-а спросить
Подскажите пожалуйста ещё один момент - можно ли адаптировать вашу программу для подключения кнопок руля значительно большего сопротивления, конкретно нужно подключить сониевский проводной джойстик его сопротивление может достигать 50кОм, вот расклад по кнопкам http://forummotor.israelinfo.ru/files/x2s1_476.gif , как сделать его видимым для икара?
Программа только измеряет сопротивление. Тебе нужно припаять другое сопротивление от аналогового входа на +5в, примерно 5,1к-6,8к
Ошибка вышла, оказывается работает как есть и с 50кОм джойстиком, просто после тестирования не верно указал вход от кнопок на контроллере.
как в плагине carduino задать "разброс" значений для сопротивлений кнопки?
проблема в том, что я жму кнопку - а сопротивление не стабильно, оно скачет от 250 до 255. Программно все значения в этом диапазоне - нажатие одной и той же кнопки. Когда же я настраиваю в икардс кнопки кардуино - одно нажатие на кнопку добавляет 4-5 строк. Если задать динамическую кнопку для каждой строки, то при нажатии потом в музыке кнопки пауза (с помощью кардуино) пауза нажимается несколько раз.
а кондеры керамические присудствуют в схеме?
не знаю, у меня схемы нет
но сопротивление при нажатии имеет не стабильное значение, а скачет примерно в 5 единиц. Это единицы из оригинальной программы hotkey.exe к адаптеру Joystick. Насколько скачет в Омах не знаю. В hotkey.exe есть возможность разброс задавать - производитель рекомендует значение 10 единиц.
Как это сделать в плагине икара?
Как вариант, можно поставить конденсатор 0,1мкф параллельно двум проводам, к тем которые подключаются к рулевым кнопкам.
это что за прикол? есть устройство, у него есть рабочая программа. в первом посте написано плагин поддерживает это устройство... я так понимаю если не хватает чего-то в программе плагина - надо добавить, или не так?
что за прикол кондер впаивать, чтобы можно было программу другую использовать...
Bersenev
01.08.2012, 00:04
в первом посте написано плагин поддерживает это устройство... я так понимаю если не хватает чего-то в программе плагина - надо добавить, или не так?
В плагине такая возможность есть, но работать она будет только с последней версией моего скетча для ардуино. Со скетчем от кармонитора данная функция работать не будет. Причина в том, что кармонитор данную функцию реализовал в программе, так как считается, что ардуино запрограммировано только для работы с резестивными кнопка. А у меня это реализовано в самом скетче для ардуино, так как ардуино одновременно передаёт данные от нескольких устройств.
Так что если готов залить новый скетч в ардуино, то завтра выложу последнюю версию скетча и плагина.
твой скетч работает с резистивными кнопками?
мне для заливки твоего скетча миниусб кабеля и карписи на вин7 достаточно?
если да, то я к вашим услугам
P.s.: я сегодня понял что все хуже чем я описал. Каждое просыпание - кнопки не работают. Захожу в настройки, жму кнопки - новые значения. и так 4ре раза. жесть
Платы получил
http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-503.jpg
Вот теперь могу ответить. За выходные сделаю несколько блоков реле, а к концу следующей недели закончу прошивку, плагин и поддержку в скине
Ну когда уже можно опробовать плагин для реле?:smile2:
Bersenev
16.08.2012, 14:48
Ну когда уже можно опробовать плагин для реле?:smile2:
Третий день занимаюсь плагином и скетчем. Переделал работу скетча с резестивными кнопками, теперь возвращается не значение сопротивления кнопки, а номер этой кнопки, который присваивается при первом нажатии кнопки. В результате теперь у меня резестивная кнопка всегда возвращает один код. Сделал работу с реле, теперь на одну кнопку в скине можно задать включение любого количества доступных реле, а реле понимает следующие команды: включиться, выключиться, переключиться и включиться на 0.3 сек. Осталось сделать один экран настроек, думаю на этой неделе закончу и выложу скетч, плагин и скин.
а скетч залить в адаптер как? специальных инструментов не нужно?
Bersenev
16.08.2012, 18:53
а скетч залить в адаптер как? специальных инструментов не нужно?
Только установить компилятор
http://www.compcar.ru/forum/showthread.php?t=4773
Anthonymus
17.08.2012, 07:26
Напомню, еще были пожелания включения нагрузки после определенного времени старта икара... Я так понял, что бы усилок включать...
Работает на vBulletin® версия 3.8.4. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot