с икаром программа из шапки не нужна, она встроена
с икаром программа из шапки не нужна, она встроена
Что-то у меня вообще новая версия программы не хочет стабильно работать...
После сна вообще не подхватывает ардуино, вернее программа её видит, но в окне где должны быть цыфры пустое поле, помогает перезагрузка.
Иногда вместо 850 показывает 248788(в общем длинное число) и не реагирует на нажатия.
Старая версия программы работает стабильно, но примерно раз в неделю зависает наглухо, после перезагрузки всё норм...
Винда какая?
Win7 x86 пробовал разные сборки...
Версия драйверов какая?
Если есть возможность подьехать в офис www.carmonitor.ru, подвозите устройство, проверим и отремонтируем.
Последний раз редактировалось Chip; 31.01.2012 в 00:10.
а когда самое раннее можно завтра в офис подъехать (проблема с подключением joystick к subaru forester)?
P.S. на сайте carmonitor.ru кстати никогда не мог адрес найти... где он там? что-то вроде вернадского просп, да?
Последний раз редактировалось PGTomsk; 31.01.2012 в 13:02.
Завтра буду с 13-00 до 19-00
тел. 8-926-7782358
Последний раз редактировалось Chip; 01.02.2012 в 10:53.
Что-то у меня совсем странно ведёт себя ардуино....
Вчера замучался, перестала даже управлять нормально "пионером" оказалось, почему то все показания вырасли на 20....
Сегодня всё переделал, поставил как положено 3.3к и 0.01мкф, но результат тот же, показания скачут, иногда в программе выскакивают значения 154567, при нажатии 6345 или 2354. в общем не пойми что, но при этом магнитола пионер управляется нормально....
По выше указанному номеру много дней не могу дозвониться....
Телефон работает по будням с 10 до 19
Здравствуйте!
Помогите, пожалуйста!
решил сделать кнопки+энкодер, попытался соединить 2 кода в один... вот что получилось:
Если начинаю резко крутить энкодер - программа начинает читать неверные значения, а именно вместо 2048 - 1372830241 (число написал примерно, на самом деле их слишком много, выскакивают разные, иногда повторяются), кнопки при этом глюке тоже показывают неверные значения, тоже увеличенные до больших размеров, но все пропорционально... например вместо 20 показывает 248912, а вместо 250 показывает 5448912Код:#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0PinC 4 #define PIN 5 //номер аналогового порта #define LIMIT 10 //предел погрешности при дребезге byte bytes[4]; //byte bytes[2]={0,7}; unsigned long math_time,old_time,real_time, res_dt1, res_d; void setup() { pinMode(encoder0PinA, INPUT); digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор pinMode(encoder0PinB, INPUT); digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор pinMode(encoder0PinC, INPUT); digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2 attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3 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(digitalRead(encoder0PinC)==LOW) { res_d=res_d+2000; // Serial.write( bytes,2); while(digitalRead(encoder0PinC)==LOW){delay(50);} // bytes[1]=7; } 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); // отправить прочитаное значение компьютеру bytes[0] = 0; bytes[1] = 0; bytes[2] = 0; bytes[3] = 0; } } // обработка прерывания void doEncoderA() { if(digitalRead(encoder0PinB)==HIGH){res_d=2048; 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); // отправить прочитаное значение компьютеру bytes[0] = 0; bytes[1] = 0; bytes[2] = 0; bytes[3] = 0;} // Serial.write( bytes,2); // bytes[0]=0;} } // обработка прерывания void doEncoderB() { if(digitalRead(encoder0PinA)==HIGH){res_d=2084; 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); // отправить прочитаное значение компьютеру bytes[0] = 0; bytes[1] = 0; bytes[2] = 0; bytes[3] = 0;} // Serial.write( bytes,2); // bytes[0]=0;} }
и т.д... Через пару сек может все встать на свои места или через 10-20 сек... Где ошибка?
UPDATE:
Сейчас вместо 1000 четко показывал 256000, еще покрутил - показал 65536000
вместо 990 - 253440
вместо 1023 - 261888
ну то есть просто умножает на 256 программа или скетч... потом все нормально становится
Последний раз редактировалось WhiteWings; 02.03.2012 в 01:22.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)