Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Уважаемый Chip!
Программа во вложении пишет: "Запуск программы невозможен, так как на компьютере отсутствует ftd2xx.dll. Попробуйте переустановить программу."
Я так понимаю, что это библиотека от USB-Моста FT232, через которую осуществляется обмен скетча, прошитого в ардуино, с компьютером.
у меня в Ордуине стоит чип CP2103, дергаться бесполезно?
Программа работает на прямую с драйвером
Цитата:
Никак нельзя изменить модуль общения ардуины с компом для какой-то большей универсальности, БЕЗ ПРИВЯЗКИ к железу?
а то ведь теряется универсальность, которая изначально закладывалась как краеугольный камень платформы Ардуино, и появляется некая избирательность по отношению к пользователям...
В Arduino никогда не использовали мосты Silabs
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Chip
Программа работает на прямую с драйвером
В Arduino никогда не использовали мосты Silabs
внимательное чтение моего сообщения могло бы дать некие зацепки к тому, что не все то Ардуино, что сделано из Меги и фт232, есть оооочень много проектов и без мостов вообще - напрямую в СОМ порт включаются, и на другой элементной базе... при этом работают. странно, правда? :rolleyes:
но игнорировать другое железо проще, верно?
зачем читать порт (пусть даже эмулированный, как и у любой настоящей ардуины), если можно хитро влезть в обмен фт232 и читать оттуда. :rolleyes:
жаль. :(
всегда удивляло в программерском искусстве использование костылей и недокументированных возможностей (а также документированных бэкдоров), но, видимо, я как-то не так воспринимаю этот вопрос.
в общем, выкиньте из названия проекта слово "УНИВЕРСАЛЬНЫЙ" - и я заткнусь
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
M@troskin
внимательное чтение моего сообщения могло бы дать некие зацепки к тому, что не все то Ардуино, что сделано из Меги и фт232, есть оооочень много проектов и без мостов вообще - напрямую в СОМ порт включаются, и на другой элементной базе... при этом работают. странно, правда? :rolleyes:
но игнорировать другое железо проще, верно?
зачем читать порт (пусть даже эмулированный, как и у любой настоящей ардуины), если можно хитро влезть в обмен фт232 и читать оттуда. :rolleyes:
жаль. :(
всегда удивляло в программерском искусстве использование костылей и недокументированных возможностей (а также документированных бэкдоров), но, видимо, я как-то не так воспринимаю этот вопрос.
в общем, выкиньте из названия проекта слово "УНИВЕРСАЛЬНЫЙ" - и я заткнусь
Объединенный проект для Carduino (Arduino) All-In-One.
внимательнее читаем название
и не хамим (проще было нормально попросить)
человек потратил своё время , написал программу...
если у вас клон или плата не Carduino или Arduino (это торговые марки)
какие притензии
короче я считаю за такие сообщения поможет БАН
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Alexx13
Объединенный проект для Carduino (Arduino) All-In-One.
внимательнее читаем название
и не хамим (проще было нормально попросить)
человек потратил своё время , написал программу...
если у вас клон или плата не Carduino или Arduino (это торговые марки)
какие притензии
короче я считаю за такие сообщения поможет БАН
Ок. Бан на неделю (!) без объяснения причин в личку или мылом (!) - вы случаем не перепутали форум про компьютеры и гестапо?
теперь по порядку.
вот первая статья уважаемого CHIP-а:
http://compcar.ru/forum/showthread.p...ll=1#post34811
Вот ее заголовок:
Универсальный USB девайс для использования совместно с CarPC
вот ее содержимое:
Сейчас на столе лежит USB девайс под названием Freeduino (аналог Arduino), ...
дальше я чего-то не понял:
мы говорим про Ардуино или про аналоги - про первую фридуино Чипа, о которой он, похоже, уже забыл, про мой Ордуино, вполне себе аналог Ардуино, но сделанную другим вендором, про "ардуино никогда не использовало мостов Silabs..." - только без банов и хамства, по существу - три вопроса, три ответа, ок?
и еще вопрос:
повторюсь, я не программист, мне сложно судить про написание программ, поэтому возможно мой вопрос в топике выше прозвучал для кого-то неприятно, прошу за это прощения.
и все же:
есть такая программа TermUSB под андроид (автор ШИПОВ АЛЕКСАНДР, https://play.google.com/store/apps/d...i50ZXJtdXNiIl0.) - терминал, который без проблем читает данные после любого моста - FT232, CP2102 и PL2303. Но она под андроид.
Программа Chip-а под винду, но читает только мост FT232.
проблема даже не в том, чтобы читать порт - проблема в том, что дальнейшая обработка данных из скетча для управления windows ведется только в программе all-in-one. вот такая, панимашь, загогулина...
И кстати:
Если я куплю на кармониторе Саrduino Nano V7 (то есть опять потрачу деньги на аналоги, потому что настоящей ардуино нано в данном магазине нет) - где гарантия, что этот девайс заработает нормально? да, где-то там выше по страницам было указано, что программа только для купленных в данном интернет-магазине девайсов, но не произойдет ли то же самое, что с Freeduino - забудется, как страшный сон, и все такое...
да и седьмая (!) реинкарнация одного и того же устройства как-то не вдохновляет - страшно думать, что с предыдущими шестью стало...
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
AndrewM
И кстати:
Если я куплю на кармониторе Саrduino Nano V7 (то есть опять потрачу деньги на аналоги, потому что настоящей ардуино нано в данном магазине нет) - где гарантия, что этот девайс заработает нормально? да, где-то там выше по страницам было указано, что программа только для купленных в данном интернет-магазине девайсов, но не произойдет ли то же самое, что с Freeduino - забудется, как страшный сон, и все такое...
да и седьмая (!) реинкарнация одного и того же устройства как-то не вдохновляет - страшно думать, что с предыдущими шестью стало...
я не нашел 3х вопросов...
отвечу на те которые нашел
Саrduino Nano V7 заработает 100%
Саrduino Nano V3 была у меня (впуск начался с 3 версии) пробле нет не каких
а что изменилось с 3 до 7 можно найти на форуме (только есть ли в этом смысл)
а по поводу работы просто с ком портом проси Chipа
может и поможет...
или
http://www.autohotkey.com/board/topi...cript/#p187247
учи автохоткей или другие языки
кстати TermUSB
это простой терминал который есть и так в любой винде
поправил шапку на будущее чтоб не было вопросов
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Подправил код, оставил только рулевые кнопки и энкодер с нажатием.
Хочу так же подключить второй энкодер, но ничего не получается :-(
На данный момент у меня работает полноценно один энкодер и у второго энкодера работает только нажатие.
Код:
Код:
#include <IRremote.h>
#include <EEPROM.h>
byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник
int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок
int RECV_PIN = 10; // вход ИК приемника
int encoder0PinA = 2 ; // вывод А энкодера
int encoder0PinB = 3 ; // вывод В энкодера
int encoder0PinC = 4 ; // вход кнопки энкодера
int encoder1PinA = 5 ; // вывод А энкодера 2
int encoder1PinB = 6 ; // вывод В энкодера 2
int encoder1PinC = 7 ; // вход кнопки энкодера 2
byte temp;
//IRrecv irrecv(RECV_PIN);
//decode_results results;
unsigned long res_dt;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder1PinA, INPUT);
digitalWrite(encoder1PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinB, INPUT);
digitalWrite(encoder1PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinC, INPUT);
digitalWrite(encoder1PinC, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание энкодера interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание энкодера interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порт
}
//****************Кнопка Энкодера****************************
void loop()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 7;
bytes[2] = 0;
bytes[3] = 0;
}
if(digitalRead(encoder1PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 6;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder1PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 5;
bytes[2] = 0;
bytes[3] = 0;
}
joystik();
}
//****************Резистивные кнопки**************************
void joystik()
{
res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
if( res_dt < 1023)
{
delay(50); // пауза для проверки дребезга
if(res_dt == analogRead(JOYSTIK_PIN)) // если нет дребезга
{
bytes[0] = res_dt & 255; // преобразовать в 2-байта
bytes[1] = (res_dt & 768) >> 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
delay(250); // пауза между нажатиями
}
}
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
Пробовал добавить заменить строки в конце кода на такие:
Код HTML:
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
if(digitalRead(encoder1PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
И даже:
Код HTML:
if(digitalRead(encoder1PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
Со значениями bytes[1]=25; так же экспериментировал.
Но ничего не выходит, второй энкодер молчит.
И главное - при повороте первого энкодера (когда в коде прописываю encoder1PinB) работает именно первый.
2 энкодера отдельно (без резистивных кнопок) работали прекрасно: http://compcar.ru/forum/showthread.p...ll=1#post88754
Но там смотрю принцип немного другой.
По такому же принципу исправил код на такой:
Код:
#include <IRremote.h>
#include <EEPROM.h>
byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник
int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок
int RECV_PIN = 10; // вход ИК приемника
int encoder0PinA = 2 ; // вывод А энкодера
int encoder0PinB = 3 ; // вывод В энкодера
int encoder0PinC = 4 ; // вход кнопки энкодера
int encoder1PinA = 5 ; // вывод А энкодера 2
int encoder1PinB = 6 ; // вывод В энкодера 2
int encoder1PinC = 7 ; // вход кнопки энкодера 2
byte temp;
//IRrecv irrecv(RECV_PIN);
//decode_results results;
unsigned long res_dt;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор энкодера
pinMode(encoder1PinA, INPUT);
digitalWrite(encoder1PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinB, INPUT);
digitalWrite(encoder1PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinC, INPUT);
digitalWrite(encoder1PinC, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание энкодера interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание энкодера interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порт
}
//****************Кнопка Энкодера****************************
unsigned graydecode(unsigned gray)
{
unsigned bin;
for (bin = 0; gray; gray >>= 1)
bin ^= gray;
return bin;
}
void loop()
{
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]=9;
bytes[1]=6;
Serial.write( bytes,2);
bytes[0]=0;
} else if (tmp_code == 1)
{
bytes[0]=9;
bytes[1]=7;
Serial.write( bytes,2);
bytes[0]=0;
}
}
tmp_code = code;
delay(2);
if(digitalRead(encoder0PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 7;
bytes[2] = 0;
bytes[3] = 0;
}
if(digitalRead(encoder1PinC)==LOW)
{
bytes[0] = 0;
bytes[1] = 6;
bytes[2] = 0;
bytes[3] = 0;
Serial.write(bytes,4);
while(digitalRead(encoder1PinC)==LOW){delay(50);}
bytes[0] = 0;
bytes[1] = 5;
bytes[2] = 0;
bytes[3] = 0;
}
joystik();
}
//****************Резистивные кнопки**************************
void joystik()
{
res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
if( res_dt < 1023)
{
delay(50); // пауза для проверки дребезга
if(res_dt == analogRead(JOYSTIK_PIN)) // если нет дребезга
{
bytes[0] = res_dt & 255; // преобразовать в 2-байта
bytes[1] = (res_dt & 768) >> 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
delay(250); // пауза между нажатиями
}
}
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
//*******************Поворот Энкодера (обработка прерывания)****
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
sei();
}
Второй энкодер срабатывает примерно 1 раз из 5-10 (иногда проскакивают значения при повороте).
Не поможете подправить скетч?
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Вопрос не совсем по теме, но тем не менее прошу помочь.
Хочу часть данного проекта, а именно вольтметр, использовать для подобия интеллектуального модуля питания. Необходимо определенное значение значение temp привязать к действию. Так вот вопрос, как определить какое значение соответствует определенному напряжению. Способом "научного тыка" у меня вышло так:
Код:
void voltmetr()
{
temp = analogRead(VOLT_SENS);
if (temp <= 477) //если ниже 11,7 вольт
{
//действие 1
}
else if (temp <= 469) //если ниже 11,5 вольт
{
//действие 2
}
}
На сколько я правильно рассчитал? И как вообще правильно это делать?
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Для того что бы определить нужный уровень, нужно знать значения резисторов делителя
Re: Объединенный проект для Carduino (Arduino) All-In-One.
А возможно использовать энкодер на оптопаре, как в скрол в мышках?
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Цитата:
Сообщение от
Chip
Для того что бы определить нужный уровень, нужно знать значения резисторов делителя
Резисторы те же, 22 кОм и 5,1 кОм.
Правильно я понял?
Исходя из расчетов с этого калькулятора Входное напряжение 11,5 Вольт, R1 5,1 кОм, R2 22 кОм, получим Выходное напряжение 2,1642066420664 Вольт.
Далее 5 Вольт / на 1024 получаем ~0,0048828125, 2,1642066420664 Вольт / 0,0048828125 получаем значение ~443,2295203.
То есть 443 это ~11,494 Вольт?