Я то не вижу какую он Вам ошибку выдает
Вид для печати
Я то не вижу какую он Вам ошибку выдает
....
запустив файл KeyConfig.exe узнал значения всех кнопок. (680 , 110 ,30 , 413 и так далее)
как на кнопки повесить выходы D2-13? уже раз тридцать пробовал по разному,не выходит...
почти добился своего,светодиод при нажатии нужной кнопки мигает,как сделать что бы пока нажимаешь он горел постоянно?PHP код:
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
Serial.begin(115200); // настроить скорость com порта
}
void loop()
{
old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
while(math_time < 300 && (analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}
if( math_time > 80 ) //если нет дребезга
{
if (res_dt1>675 && res_dt1<685) digitalWrite(2,LOW );
delay(30);
digitalWrite(2, HIGH);
if (res_dt1>105 && res_dt1<115) digitalWrite(3,LOW );
delay(30);
digitalWrite(3, HIGH);
if (res_dt1>25 && res_dt1<35) digitalWrite(4,LOW );
delay(30);
digitalWrite(4, HIGH);
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
так не критично? выделил жирным. на ненажатых кнопках код 1023. работает,но думаю,может по другому правильно?Цитата:
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
Serial.begin(115200); // настроить скорость com порта
}
void loop()
{
old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
while(math_time < 300 && (analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}
if( math_time > 80 ) //если нет дребезга
{
if (res_dt1>675 && res_dt1<685) digitalWrite(2,LOW );
delay(30);
digitalWrite(2, HIGH);
if (res_dt1>105 && res_dt1<115) digitalWrite(3,LOW );
if (res_dt1>1020 && res_dt1<1030)digitalWrite(3, HIGH);
if (res_dt1>25 && res_dt1<35) digitalWrite(4,LOW );
if (res_dt1>1020 && res_dt1<1030)digitalWrite(4, HIGH);
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
еще есть вопрос,поиском не нашел.
может ли ардуина имитировать ик-пульт?
суть в том что три кнопки с руля через ардуину на ик пульт,4 в комп,и 3 на реле.
хочется пульт исключить,что бы ардуина сама ик светила.
магнитола JVC,штекера проводного пульта нет.
Может.
А если у JVC есть возможность проводного дистанционного управления, на подобии Pioneer'овского Wired remote, то так будет надежнее чем по ИК.
А что там понимать? Вначале собираете приемник и читаете коды кнопок, только у меня на Carduino Nano на 11 пине приемник не заработал, подключал к 10 пину, и нужно изменить строчку в скетче int RECV_PIN = 11; на int RECV_PIN = 10;. А потом полученные коды кнопок используете как Вам нужно.
Вот здесь есть видео уроки.
всё собрал,всё работает.но.. подскажите как две ардуины одновременно поставить? чего то не пойму.
одна стоит на рулевые кнопки,вторая на реле-плагин на центрифугу. одну выдергиваешь,вторая работает...вместе нет...
или подскажите,можно слиять два скетча?
на плагине 8 реле,на рулевых кнопках 5 рэле.
вот так не компилируется,выдает ошибку.Цитата:
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(115200); // настроить скорость com порта
}
void loop()
{
old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
while(math_time < 300 && (analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}
if( math_time > 80 ) //если нет дребезга
{
if (res_dt1>675 && res_dt1<685) digitalWrite(10,LOW );
delay(30);
digitalWrite(10, HIGH);
if (res_dt1>105 && res_dt1<115) digitalWrite(11,LOW );
delay(30);
digitalWrite(11, HIGH);
if (res_dt1>25 && res_dt1<35) digitalWrite(12,LOW );
delay(30);
digitalWrite(12, HIGH);
if (res_dt1>410 && res_dt1<415) digitalWrite(13,LOW );
delay(30);
digitalWrite(13, HIGH);
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
void setup()
{
// выходы управления реле
for (int i=2; i < 10; i++)
{
pinMode(i,OUTPUT);
digitalWrite(i, LOW);
}
// инициализация порта
Serial.begin(9600);
}
void loop()
{
byte a, b, c;
if (Serial.available() > 2) // ждем данные от плагина
{
a = Serial.read();
b = Serial.read();
c = Serial.read();
if(a == 0xFF) //если данные от плагина, то выполим команду
{
digitalWrite(b+1, (c==0x01) ? HIGH : LOW); //выполнить
} } }
И не будет. Изучите хоть поверхностно основы работы с ардуино http://arduino.ru/Reference/Setup и http://arduino.ru/Reference/Loop
Так попробуйте:
Код:#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(115200); // настроить скорость com порта
// выходы управления реле
for (int i=2; i < 10; i++)
{
pinMode(i,OUTPUT);
digitalWrite(i, LOW);
}
}
void loop()
{
relay(); // цикл void relay()
old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
while(math_time < 300 && (analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}
if( math_time > 80 ) //если нет дребезга
{
if (res_dt1>675 && res_dt1<685) digitalWrite(10,LOW );
delay(30);
digitalWrite(10, HIGH);
if (res_dt1>105 && res_dt1<115) digitalWrite(11,LOW );
delay(30);
digitalWrite(11, HIGH);
if (res_dt1>25 && res_dt1<35) digitalWrite(12,LOW );
delay(30);
digitalWrite(12, HIGH);
if (res_dt1>410 && res_dt1<415) digitalWrite(13,LOW );
delay(30);
digitalWrite(13, HIGH);
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
void relay()
{
byte a, b, c;
if (Serial.available() > 2) // ждем данные от плагина
{
a = Serial.read();
b = Serial.read();
c = Serial.read();
if(a == 0xFF) //если данные от плагина, то выполим команду
{
digitalWrite(b+1, (c==0x01) ? HIGH : LOW); //выполнить
}
}
}
Beard, есть два варианта решения. первый: в каждой программе (плагине и обработчике кнопок на ПК) прописать порт для своей ардуины. второй: все повесить на одну ардуину и написать программу обрабатывающую и кнопки, и управление реле. нечто подобное делал тут, правда кнопки не резистивные (легко редактируется, все равно под ардуино переписывать).
Программа сама ищет подключенное устройство "Joystik"
с другими устройствами она не работает
в компе два ардуино,одно со скетчем из этой темы,второе со скетчем для центрифуги.
перегружаем комп,и работает только плагин центрифуги,ибо наверное что порт ему известен.
выдергиваем ардуину с центрифугой,сразу начинает видеть хоткей свою ардуину. втыкаем обратно ценрифужную,всё-хоткей не робит...
А какой порт выбран в плагине CF?
А к какому порту подключен Joystik?
перепутал,неверно сконспектировал.
4 порт СF
10 Joystik
А Вы можете проверить? А то мне кажется что все таки у Вас в CF 10 порт
А к CF какая модель ардуины подключается?
Посмотрите в "Устройства и принтеры" как она определяется системой
удивительное дело.но пока был в поездке(около часа),то окно принтеры и устройство так и не открылось,часики песочные только и полоса сверху зеленая потихоньку мигает....
переустановил винду.в принтерах появилось.
Вложение 17592
так в диспетчере Вложение 17593
это если СF первая запущена.Вложение 17594
это если первая Hotkey...Вложение 17595
А joystik на каком порту? В CF какой порт выбран?
есть мысли? поможете? очень хочу кнопки запустить,не вешать же на все 9 кнопок реле? это не правильно.
Попробуйте свежий драйвер установить
А если не запускать CF и подключить оба девайса, то HotKey работает?
В порядке бреда. А если использовать все таки одну ардуину с объединенным скетчем и программу клонирующую com порт, например Serial Splitter?