PHP код:
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
#define A2 16
#define A3 17
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(A2, 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>710 && res_dt1<740) digitalWrite(A2,HIGH );
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
Последний раз редактировалось Chip; 25.05.2010 в 11:21.
Иееес!!! Заработало!
Спасибо всем!
Немного дописал скетч:
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
#define A1 15
#define A2 16
#define A3 17
#define A4 18
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, 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>710 && res_dt1<740) digitalWrite(A2,HIGH );
delay(30);
digitalWrite(A2, LOW);
if (res_dt1>640 && res_dt1<650) digitalWrite(A3,HIGH );
delay(30);
digitalWrite(A3, LOW);
if (res_dt1>410 && res_dt1<420) digitalWrite(A4,HIGH );
if (res_dt1>0 && res_dt1<3) digitalWrite(A4,LOW);
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
Теперь с помощью резисторной матрицы можно не только управлять компом, но и включать и выключать оборудование, причём РС не обязательно должен быть включен!
Это намного удобнее, чем : http://www.compcar.ru/forum/showthread.php?t=5010, тем более, что данная прога у меня нещадно глючила на трёх разных компах, с разными ОС.
Теперь на джойстик RMX4S (10 кн. + Shift)
Я повесил:
1. Вкл/выкл УМ, DAC, GPS, можно и сам комп включать
2. Регулировка громкости аналоговым моторизированым 6-канальным ALPS : http://www.samodelka.ru/goods/6201.htm
3. Стандартные функции управления РС
Спасибо всем за участие!
Последний раз редактировалось Rover 176; 25.05.2010 в 15:17.
Имею проблему с данным устройством...
Стоит Windows7 максимальная, залита прошивка с двойным нажатием.
Запускаю прогу HotKey разворачиваю вижу "1003" это когда ни одна кнопка не нажата, вижу дребезг т.е то 1003 то 1004 и т.п.
потом показания повисают и на нажатия не реагируют. Потом отвисает и даже реагирует на нажатия но может зависнуть в нажатом положении...
Смена прошивки на любую из этой темы не помогает.
Кто виноват - контроллер или прога на компе.
запустив файл KeyConfig.exe узнал значения всех кнопок. (680 , 110 ,30 , 413 и так далее)
как на кнопки повесить выходы D2-13? уже раз тридцать пробовал по разному,не выходит...
Последний раз редактировалось Beard; 27.02.2014 в 22:25.
почти добился своего,светодиод при нажатии нужной кнопки мигает,как сделать что бы пока нажимаешь он горел постоянно?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); // отправить прочитаное значение компьютеру
}
}
Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)