В чем может быть проблема?
В чем может быть проблема?
2832 такого значения быть не должно, максимальное значение это 1023
Из-за чего тогда у меня могут быть такие значения?
PHP код:
#define encoder0PinA 2
#define encoder0PinB 3
#define encoder1PinA 4
#define encoder1PinB 5
byte bytes[2]={0,20} ;
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinA, INPUT);
digitalWrite(encoder1PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinB, INPUT);
digitalWrite(encoder1PinB, HIGH); // подключить подтягивающий резистор
//10 кнопок. 2 на энкодере, 8 на панели.
pinMode(7, INPUT);
digitalWrite(7, 1);
pinMode(8, INPUT);
digitalWrite(8, 1);
pinMode(9, INPUT);
digitalWrite(9, 1);
pinMode(10, INPUT);
digitalWrite(10, 1);
pinMode(11, INPUT);
digitalWrite(11, 1);
pinMode(12, INPUT);
digitalWrite(12, 1);
pinMode(14, INPUT);
digitalWrite(14, 1);
pinMode(15, INPUT);
digitalWrite(15, 1);
pinMode(16, INPUT);
digitalWrite(16, 1);
pinMode(17, INPUT);
digitalWrite(17, 1);
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin (115200);
}
unsigned graydecode(unsigned gray)
{
unsigned bin;
for (bin = 0; gray; gray >>= 1)
bin ^= gray;
return bin;
}
void loop()
{
if(digitalRead(7)==LOW)
{
bytes[1]=7;
Serial.write( bytes,2);
while(digitalRead(7)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(8)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(8)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(9)==LOW)
{
bytes[1]=9;
Serial.write( bytes,2);
while(digitalRead(9)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(10)==LOW)
{
bytes[1]=10;
Serial.write( bytes,2);
while(digitalRead(10)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(11)==LOW)
{
bytes[1]=11;
Serial.write( bytes,2);
while(digitalRead(11)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(12)==LOW)
{
bytes[1]=12;
Serial.write( bytes,2);
while(digitalRead(12)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(14)==LOW)
{
bytes[1]=14;
Serial.write( bytes,2);
while(digitalRead(14)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(15)==LOW)
{
bytes[1]=15;
Serial.write( bytes,2);
while(digitalRead(15)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(16)==LOW)
{
bytes[1]=16;
Serial.write( bytes,2);
while(digitalRead(16)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(17)==LOW)
{
bytes[1]=17;
Serial.write( bytes,2);
while(digitalRead(17)==LOW){delay(50);}
bytes[1]=20;
}
static uint8_t tmp_code = 0;
uint8_t gray_code = digitalRead(encoder1PinA) | (digitalRead(encoder1PinB) << 1),
code = graydecode(gray_code);
if (code == 0)
{
if (tmp_code == 3)
{
bytes[0]=3;
bytes[1]=20;
Serial.write( bytes,2);
bytes[0]=0;
} else if (tmp_code == 1)
{
bytes[0]=4;
bytes[1]=20;
Serial.write( bytes,2);
bytes[0]=0;
}
}
tmp_code = code;
delay(2);
}
// обработка прерывания
void doEncoderA()
{
if(digitalRead(encoder0PinB)==HIGH){bytes[0]=1;}else{bytes[0]=2;}
Serial.write( bytes,2);
bytes[0]=0;
}
// обработка прерывания
void doEncoderB()
{
if(digitalRead(encoder0PinA)==HIGH){bytes[0]=2;}else{bytes[0]=1;}
Serial.write( bytes,2);
bytes[0]=0;
}
Ты не подключил внутренние подтягивающие резисторы как на энкодере, и вообще лучше опрашивать порты в цикле for , код будет компактнее
digitalWrite(7, 1);
Как это не подключил....
Это для чего?while(digitalRead(10)==LOW){delay(50);}
bytes[1]=20;
еще нужно бороться с дребезгом, для твоего скетча предел погрешности нужно сделать равным =0, вести опрос портов в циклеfor(перебор всех портов i) digitalRead(i)
Последний раз редактировалось Chip; 26.10.2011 в 15:26.
Ты в своем скетче так кнопку энкодера описал, я просто по наналогии повторил.
Я так понимаю это у тебя для сочетания нажатия с поворотом? Правда я не понял зачем задержка нужна.Чтоб во время поворота энкодара дребезг на кнопке не мешал?PHP код:
if(digitalRead(encoder0PinC)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[1]=7;
}
Погрешность в autohotkey?
В цикле попробую сделать.
Последний раз редактировалось SiMuS; 26.10.2011 в 15:34.
У тебя нет погрешности , так как ты отправляешь фиксированные значения
Обновление, выпущена бета версия программы упраления рулевыми кнопками
Пробуем и отписываемся
Последний раз редактировалось Chip; 02.11.2011 в 16:26.
Из сервиса мануала моего авто:
Remote audio control switch resistance
All switches released (OFF): 5119 – 5223 Ом
Switch “1” pushing on (ON): 55 – 57 Ом
Switch “2” pushing on (ON): 129 – 133 Ом
Switch “3” pushing on (ON): 238 – 244 Ом
Switch “4” pushing on (ON): 416 – 426 Ом
Switch “5” pushing on (ON): 743 – 759 Ом
Switch “6” pushing on (ON): 1555 – 1587 Ом
Посоветуйте пожалуйста, какого номинала лучше воткнуть резистор между разъемами +5V и A5?
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)