PDA

Просмотр полной версии : iCarDS + Arduino = iCarDuino


Страницы : 1 [2] 3 4

folv
20.08.2012, 06:26
Третий день занимаюсь плагином и скетчем. Переделал работу скетча с резестивными кнопками, теперь возвращается не значение сопротивления кнопки, а номер этой кнопки, который присваивается при первом нажатии кнопки. В результате теперь у меня резестивная кнопка всегда возвращает один код. Сделал работу с реле, теперь на одну кнопку в скине можно задать включение любого количества доступных реле, а реле понимает следующие команды: включиться, выключиться, переключиться и включиться на 0.3 сек. Осталось сделать один экран настроек, думаю на этой неделе закончу и выложу скетч, плагин и скин.

А при загрузки iCarDS будут востанавливаться включенные реле и наоборот при завершении работы iCarDS отключатся?

Bersenev
20.08.2012, 09:08
А при загрузки iCarDS будут востанавливаться включенные реле и наоборот при завершении работы iCarDS отключатся?

Это не проблема, если надо сделаем.

Bersenev
28.08.2012, 21:55
Обновил в шапке плагин, скетч и схему подключения.

Изменения:

1. Теперь после загрузки скетча и при первом нажатии резестивной кнопке, ей присваивается внутренний номер, и в дальнейшем при нажатие этой кнопки возвращается её код, построенный на основании этого номера, а не код, построенный на основании значения сопротивления этой кнопки. В результате у меня полностью пропали ложные срабатывания.
2. Реализована работа с блоками реле, можно использовать 4 блока по 8 реле. Состояние реле сохраняются и при запуске икара восстанавливаются. При закрытии икара все реле отключаются

Через пару дней выложу обновлённый скин с поддержкой всех новых возможностей

Anthonymus
28.08.2012, 22:35
Здорово! А платы для силы когда в продаже появятся?

Bersenev
28.08.2012, 22:47
Здорово! А платы для силы когда в продаже появятся?

Сами платы уже в продаже, а вот с собранными блоками реле пока проблема. Если нужны только платы, то пиши в личку.

folv
14.09.2012, 13:59
Сами платы уже в продаже, а вот с собранными блоками реле пока проблема. Если нужны только платы, то пиши в личку.

Спаял платы, жду обновленный скин чтоб проверить:smile2:

folv
19.09.2012, 16:21
Выкладываю фото готовой платы (платы приобрел у Андрея), осталось скин новый для проверки:sad2:

Bersenev
19.09.2012, 23:38
Уезжал на неделю. Скин готов, так что завтра соберу и выложу.

1gremlin7
24.09.2012, 10:40
Хочу сделать управление регуляторами климатической установки через карписи, а то мешаются очень сильно :) Как лучше делать, как приложение, встраиваемое в икар, или в самом скине, что -то на подобие страницы акселерометра?

OsDima
30.09.2012, 17:21
Уезжал на неделю. Скин готов, так что завтра соберу и выложу.

Решил переделать управление штатными кнопками (сейчас стоит, безжалостно выдранный из клавиатуры контроллер), ИК управление с руля (МСЕ remote), температурные датчики (китайский девайс), добавить акселерометр и т.д.
В ранних постах было сообщение что можете выстлать наборы релейного блока.
Как и где?

evgeny100
30.09.2012, 23:35
to Bersenev

Внимательно начал рассматривать в шапке схему подключения Arduino и мне кажется там есть ошибки с адресами.
Она рабочая? И есть ли в лучшем качестве?

Хотел бы подключить еще магнитный датчик и датчик давления.

Bersenev
01.10.2012, 00:23
to Bersenev

Внимательно начал рассматривать шапке схему подключения Arduino и мне кажется там есть ошибки с адресами.
Она рабочая и есть ли лучшего качества?

С какими адресами ошибки? У меня всё работает и именно по этой схеме.

А про лучшее качество имеется ввиду картинка схемы? Если так, то да. Это форум занизил качество.

Хотел бы подключить еще магнитный датчик и датчик давления.

Это самостоятельно, пока в планах только фоторезистор и контроль напряжения аккумулятора

evgeny100
01.10.2012, 18:04
А про лучшее качество имеется ввиду картинка схемы? Если так, то да. Это форум занизил качество.


Пришли в личку схему в хорошем качестве, пожалуйста. Может я чего недосмотрел. Еще раз попробую разобраться.
Дело в том что купил платку с четырьмя датчиками, в том числе магнитометр и давление.
Поэтому хочу разобраться, чтобы подключить.

holywillie
07.10.2012, 23:27
Пытаюсь залить скетч из шапки ругается подскажите пожалуйста к ардуино ни чего не подключено пытаюсь залить первый раз в "мониторовский" для резистивных кнопок

sketch_oct07a.cpp:4:21: error: OneWire.h: No such file or directory
sketch_oct07:38: error: 'OneWire' does not name a type
sketch_oct07a.cpp: In function 'void temperature_sensors()':
sketch_oct07:789: error: 'ds' was not declared in this scope
sketch_oct07:799: error: 'OneWire' has not been declared
sketch_oct07:809: error: 'ds' was not declared in this scope
sketch_oct07:829: error: expected `}' at end of input

Bersenev
07.10.2012, 23:43
Пытаюсь залить скетч из шапки ругается подскажите пожалуйста к ардуино ни чего не подключено пытаюсь залить первый раз в "мониторовский" для резистивных кнопок

sketch_oct07a.cpp:4:21: error: OneWire.h: No such file or directory
sketch_oct07:38: error: 'OneWire' does not name a type
sketch_oct07a.cpp: In function 'void temperature_sensors()':
sketch_oct07:789: error: 'ds' was not declared in this scope
sketch_oct07:799: error: 'OneWire' has not been declared
sketch_oct07:809: error: 'ds' was not declared in this scope
sketch_oct07:829: error: expected `}' at end of input

Надо установить библиотеку OneWire, ссылка на библиотеку в шапке

holywillie
07.10.2012, 23:49
Спасибо установил все заскочило

holywillie
09.10.2012, 04:10
подскажите где рыть делал все по писаному при подключении измерителей темературы файл duino_temp_sensors.ini создается но пустая датчики не отображаются остальные функции отключены

holywillie
09.10.2012, 21:12
поясните удачная регистрация или нет
C:\Program Files (x86)\TipTop software\iCar DS\Extentions\iCarDuino>regasm /code
base /tlb iCarDuino.dll
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.

RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can ca
use your assembly to interfere with other applications that may be installed on
the same computer. The /codebase switch is intended to be used only with signed
assemblies. Please give your assembly a strong name and re-register it.
Types registered successfully
Assembly exported to 'C:\Program Files (x86)\TipTop software\iCar DS\Extentions\
iCarDuino\iCarDuino.tlb', and the type library was registered successfully

C:\Program Files (x86)\TipTop software\iCar DS\Extentions\iCarDuino>pause
Для продолжения нажмите любую клавишу . . .

Bersenev
09.10.2012, 21:22
Удачная

holywillie
09.10.2012, 21:26
Удачная
спасибо но датчики так и не определяются подскажите где искать причину

Bersenev
09.10.2012, 21:49
спасибо но датчики так и не определяются подскажите где искать причину

Датчики иногда не определяются из за плохой массы. У меня стоило пошевелить usb разъём на ардуино и датчики начинали работать, хотя всё остальное работало без проблем, бросил отдельный проводок на GND и больше не сбоит.

holywillie
10.10.2012, 03:48
Датчики иногда не определяются из за плохой массы. У меня стоило пошевелить usb разъём на ардуино и датчики начинали работать, хотя всё остальное работало без проблем, бросил отдельный проводок на GND и больше не сбоит.

Спасибо но все из-за невнимательности при копировании в вставке необходимых строк подобавлялись пробелы поубирал все заработало

gworum
20.10.2012, 21:28
А можно еще раз схему выложить, а то постоянно ошибку выдает.

Bersenev
20.10.2012, 22:01
А можно еще раз схему выложить, а то постоянно ошибку выдает.

Какую схему? и что именно выдаёт ошибку?

gworum
21.10.2012, 00:58
В первом посте, схема соединения не открывается

Bersenev
21.10.2012, 11:49
В первом посте, схема соединения не открывается

У меня всё открывается.

Хотел залить архив со схемой, но форум отказывается принимать файл, так что пиши в личку куда отправить

admin
21.10.2012, 12:24
Хотел залить архив со схемой, но форум отказывается принимать файл, так что пиши в личку куда отправить
Какой объем архива? Что за ошибку выдает? В каком формате архив?

Bersenev
21.10.2012, 15:26
Какой объем архива? Что за ошибку выдает? В каком формате архив?

пробовал в rar и zip, объём около 400Кб, пишет

схема подключения arduino.rar:
Загрузка файла прошла неудачно.

admin
21.10.2012, 19:06
Rar можно до 2-х мегабайт загружать
Сейчас проверил залил фаил rar размером 350кб, все работает

Bersenev
21.10.2012, 20:26
Rar можно до 2-х мегабайт загружать
Сейчас проверил залил фаил rar размером 350кб, все работает

А у меня так и не грузится:dntknw:

http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-510.jpg

gworum
25.10.2012, 20:13
Подскажите в чем проблема, файл "duino_temp_sensors.ini" ни как не хочет создаваться, хотя все остальное работает отлично.

Bersenev
25.10.2012, 20:22
Подскажите в чем проблема, файл "duino_temp_sensors.ini" ни как не хочет создаваться.

Возможно плагин не загружается, но если другие функции плагина работают, то возможно датчики не так подключены.

D@nger
17.11.2012, 12:20
вопросик, был первый плагин, где задержки небыло почти, сейчас секунды 3, раздражает...как исправить??

Bersenev
17.11.2012, 13:31
вопросик, был первый плагин, где задержки небыло почти, сейчас секунды 3, раздражает...как исправить??

Задержка не 3 секунды, а целых 30. Только в таком варианте гибернация работает без багов. Но я сделаю эту задержку регулируемой.

D@nger
17.11.2012, 13:40
ну может быть, я не пользуюсь гибернацией, поэтому жутко раздражает что кнопки не сразу работают..

Bersenev
17.11.2012, 19:20
Задержка не 3 секунды, а целых 30. Только в таком варианте гибернация работает без багов. Но я сделаю эту задержку регулируемой.

Я немного ошибся, задержка была 10.5 сек.

ну может быть, я не пользуюсь гибернацией, поэтому жутко раздражает что кнопки не сразу работают..

В шапке версия 1.0.0.9, задержка по умолчанию в ней такая же, чтобы изменить её надо в iCarDSConfig -- Global Vars надо добавить duino_wait_time=<время в милисекундах>

Допустим

duino_wait_time=1000

Тогда задержка составит 1 сек. перед открытием порта, 0.5сек обязательная задержка, 1сек. - на инициализацию. Итого 2.5 сек. По умолчанию duino_wait_time=5000, что соответсвует задержке в 10.5 сек.

Время задержки зависит от того установлена перемычка разрешающая прошивку ардуино или нет, от того как система инициирует usb устройства и т.д. Значения duino_wait_time=5000 подходит фактически для любой системы.

Knight
19.11.2012, 17:36
т.к. готового устройства для iCarDuino нет, то придется воять устройство самостоятельно, всвязи с этим просьба помочь в изготовлении данного девайса специалистом.
С паяльником дружу на базовом уровне, программирование на С++ писал 10 лет назад, друзей электронщиков нет.
В идеале из Питера, чтобы показать практически (с меня вознаграждение сок, пиво, рукопожатие =)). Буду рад любому совету.

Задачи (Этап 1) (Этап 2 - это больше мечты =))
этап 1 Температура салона
этап 1 Температура улицы
этап 1 Температура двигателя
этап 1 Энкодер
этап 1 Автоматический регулятор яркости монитора
этап 1 Ик пульт
этап 1 Кренометр
этап 1 Напряжение
этап 1 Остаток в баке
этап 2 Регулятор давления шин
этап 2 Барометр
этап 2 Климат
этап 2 Стеклоподьемник
этап 2 Запирание дверей

что для этого нужно прикупить?
Устройства
Температура салона датчик температуры http://carmonitor.ru/ru/product_info.php?products_id=189 или http://carmonitor.ru/ru/product_info.php?products_id=109?
Температура улицы датчик температуры http://carmonitor.ru/ru/product_info.php?products_id=189 или http://carmonitor.ru/ru/product_info.php?products_id=109?
Температура двигателя датчик температуры http://carmonitor.ru/ru/product_info.php?products_id=189 или http://carmonitor.ru/ru/product_info.php?products_id=109?
Энкодер ??? (хотелось бы поворот, нажание с поворотом, нажатие, длинное нажатие, двойное нажатие, право, лево, верх, низ) если конечно такое возможно какой выбрать незнаю
Автоматический регулятор яркости монитора фоторезистор http://carmonitor.ru/ru/product_info.php?products_id=119
Ик пульт Приемник инфракрасного (ИК) излучения TSOP 38кГц. http://carmonitor.ru/ru/product_info.php?products_id=117
Кренометр 3-х осевой акселерометр MMA7260 http://carmonitor.ru/ru/product_info.php?products_id=174
Напряжение ???
Остаток в баке ???
Carduino Nano Duo http://carmonitor.ru/ru/product_info.php?products_id=120
макетная плата http://carmonitor.ru/ru/-p-122.html
набор соединителей для макетной платы
также нужны резисторы (какие и где купить?)
и конденсаторы (какие и где купить?)

может чего еще не учел?

PS: если немного не по теме просьба перенести в нужную

Bersenev
19.11.2012, 18:12
Задачи (Этап 1)
этап 1 Температура салона
этап 1 Температура улицы
этап 1 Температура двигателя
этап 1 Ик пульт
этап 1 Кренометр


Это уже реализовано в плагине, в скине и скетче для ардуино, надо просто собрать устройство по схеме из шапки


этап 1 Напряжение
этап 1 Автоматический регулятор яркости монитора


Это будет в ближайшее время, как только приедет фоторезистор


этап 1 Остаток в баке


Это тоже будет, самому нужно для вот этого проекта http://www.pccar.ru/showthread.php?t=18055


этап 1 Энкодер
Энкодер ??? (хотелось бы поворот, нажание с поворотом, нажатие, длинное нажатие, двойное нажатие, право, лево, верх, низ) если конечно такое возможно какой выбрать незнаю


Вот здесь только повороты и нажатие, если хочешь большего, то надо писать скетч самому


этап 2 Стеклоподьемник
этап 2 Запирание дверей


Это и сейчас реализуется при помощи вот этого блока реле http://www.pccar.ru/showpost.php?p=230982&postcount=257


(Этап 2 - это больше мечты =))
этап 2 Регулятор давления шин
этап 2 Барометр
этап 2 Климат


Вот с этим сложнее, боюсь что выводов ардуино на эти задачи уже не хватит, но всё это планируется в моём проекте с 21-й волгой. Но скорее всего на втором ардуино.

admin
19.11.2012, 18:29
Есть плата на которой сразу установлены: Барометр, акселерометр, гироскоп, компас
И эта плата подключается к Arduino по I2C

Knight
19.11.2012, 20:25
Есть плата на которой сразу установлены: Барометр, акселерометр, гироскоп, компас
И эта плата подключается к Arduino по I2C
а можно поподробней? какая плата и где можно её найти? и будет ли она работать со схемой Bersenev и насколько сложно будет дописать код на Барометр, гироскоп, компас?

Bersenev
19.11.2012, 20:52
и будет ли она работать со схемой Bersenev и насколько сложно будет дописать код на Барометр, гироскоп, компас?

Пока не будет, схему и код надо будет новый делать. Но это не проблема

Есть плата на которой сразу установлены: Барометр, акселерометр, гироскоп, компас
И эта плата подключается к Arduino по I2C

А вот ссылку на это "чудо электроники" очень хочется увидить.

Knight
19.11.2012, 21:02
Забыл добавить: можно ли повесить тач-экранчик на ардуино 2,6 дюйма для отдельного вывода: часы, дата, тепмература, уровень топлива. типа мини трип компьютер. в рамках того же проекта?

по устройству Барометр, акселерометр, гироскоп, компас
то что нагуглил:
http://www.ebay.com/itm/goo-GY-80-9-axis-BMP085-3-axis-magnetic-field-acceleration-gyroscope-atmospheric-/330810337403?pt=LH_DefaultDomain_0&hash=item4d05d5287b

folv
11.12.2012, 16:40
На схеме нарисована плата Arduino и у нее после +5V маркировка А0....А7 , а в реале А7....А0.
Это просто для удобства рисования схемы?

Bersenev
11.12.2012, 18:49
Это просто для удобства рисования схемы?

Нет, это просто мне досталась такая картинка ардуино

folv
11.12.2012, 18:57
У меня при проверке ошибка, что не так делаю?

Bersenev
11.12.2012, 19:13
У тебя версия компилятора 1.0.3, а на соседнем форуме я слышал, что некоторые старые библиотеки выдают ошибки в новых версиях компилятора. Я использую 1.0.1 и у меня всё нормально. Так что есть два варианта. Первый - искать или править библиотеку под новый компилятор. Второй - использовать более старую версию компилятора

folv
11.12.2012, 20:01
попробовал 1.0.1- тоже самое.

folv
11.12.2012, 20:42
попробовал 0023- другая ошибка:shok:
У меня Carduino Nano V.4 (посмотрел чип стоит Atmega-168)

folv
11.12.2012, 21:12
Получается, у тебя в архиве нет папочки examples

Bersenev
11.12.2012, 22:54
Получается, у тебя в архиве нет папочки examples

Не понял, а какое отношение наличие этой папки имеет к ошибкам?

Я использую 1.0.1 и у меня всё нормально.

На днях полетел комп, поэтому писал на память. Сейчас всё восстановил. Оказывается у меня версия 1.0. Попробовал в 1.0.1 тоже ошибки, а в 1.0 всё нормально.

folv
11.12.2012, 23:33
у меня и в версии 1.0 тоже ошибки:shok:
И еще один баг когда ставлю iCarDuino_1_0_0_8 или iCarDuino_1_0_0_9, то перегружается икар циклически:be:

folv
12.12.2012, 12:52
а для чего duino.def ?

folv
12.12.2012, 12:59
С код JoyStick почему-то работает, а с этим кодом не хочет - что не так делаю:be:

Bersenev
12.12.2012, 13:45
а для чего duino.def ?

все def-файлы в скине, это настройки по умолчанию

С код JoyStick почему-то работает, а с этим кодом не хочет - что не так делаю:be:
Что значит не работает? То есть код в ардуино загрузил, а он не работает или код в ардуино не грузится из-за ошибок в компиляторе?

folv
12.12.2012, 14:30
все def-файлы в скине, это настройки по умолчанию


Что значит не работает? То есть код в ардуино загрузил, а он не работает или код в ардуино не грузится из-за ошибок в компиляторе?

Я имел в виду в iCarDS.:blush:
1. Загрузку кода в ардуино вроде победил - использовал компилятор 1.0 и IRremote (2) " взятый в этой теме".
2. драйвера на ардуино - WIN 8 Pro x64 сама поставила свои.
С родным кодом в iCarDS где датчики температуры какие-то цифры (датчики не подключены), на резистивные кнопки не реагирует, крутилки н и ИК не подключены.
Дальше не знаю куда копать.

folv
12.12.2012, 17:02
А у меня не работает. У меня старый carduino nano v4, на ATMEGA 168, из партии с не правильными стабилизаторами. Старые коды типа http://www.compcar.ru/forum/showthread.php?t=4640 и http://www.compcar.ru/forum/showthread.php?t=4959 работают нормально а вот код для из этой темы не работает, загружается в контроллер а дальше тишина, ни icar, ни монитор порта, ни индикатры передачи/ приёма никак не реагируют, может для 168 нужен специальный код?



Судя по всему просто не включены нужные режимы работы.

Случайно вот это не делал?



Для последней версии скина ХАМЕЛЕОН эти переменные хранятся в файле duino.ini, и если они в двух файлах одновременно, то возможен подобный результат.

Отсутствие датчиков ни на что не влияет.

1. попробуй перерегистрировать плагин.
2. Проверить включена ли загрузка плагина в настройках скина.
3. Проверь правильно ли заданы переменные duino_com=номер порта и duino_com_baudRate=скорость порта в iCarDSConfig
4. Проверь не занят ли порт другой программой.

Если всё это сделал, а плагин так и не заработал, то в скетче найди такую строку

if( is_ir_key ) ir_key();

и измени её на такую

ir_key();

при таком варианте скетч всегда будет отдавать данные при поступлении сигнала от ик-пульта, не зависимо от того отключены они в плагине или нет, то есть начнёт мигать светодиод передачи данных на ардуино.

получается этот код не корректно работает с ардуидо ATMEGA168

Bersenev
12.12.2012, 18:42
Дальше не знаю куда копать.

Давай по порядку

1) Для начала проверь совпадают ли номера пинов в скетче с пинами в твоей схеме. Если не совпадают, то задай свои в этих переменных в скетче

int WIRE_PIN = 4; // цифровой вход(пин) 1WIRE-шины ( температурные датчики )
int RECV_PIN = 7; // цифровой вход(пин) ИК приемника
int REG_SELECT = 8 ; // цифровой вход(пин), управляющий защёлкой (SS в терминах SPI)

int xpin=0; // аналоговый вход(пин) для оси X акселерометра
int ypin=1; // аналоговый вход(пин) для оси Y акселерометра
int zpin=2; // аналоговый вход(пин) для оси Z акселерометра
int ENCODER1_PIN = 6 ; // аналоговый вход(пин) для первого энкодера
int ENCODER2_PIN = 7 ; // аналоговый вход(пин) для второго энкодера
int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок


2) проверь значения этих переменных в файле duino.ini

duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1

и если энкодеры или ик-приёмник не используется, то задай 0 вместо 1

3) Если температурные датчики не подключены, то убери все показатели температуры из шапки и инфопанели, и данные о температуре отключатся автоматически

Но самое главное что бы первый пункт был выполнен

folv
12.12.2012, 23:33
Давай по порядку

1) Для начала проверь совпадают ли номера пинов в скетче с пинами в твоей схеме. Если не совпадают, то задай свои в этих переменных в скетче

int WIRE_PIN = 4; // цифровой вход(пин) 1WIRE-шины ( температурные датчики )
int RECV_PIN = 7; // цифровой вход(пин) ИК приемника
int REG_SELECT = 8 ; // цифровой вход(пин), управляющий защёлкой (SS в терминах SPI)

int xpin=0; // аналоговый вход(пин) для оси X акселерометра
int ypin=1; // аналоговый вход(пин) для оси Y акселерометра
int zpin=2; // аналоговый вход(пин) для оси Z акселерометра
int ENCODER1_PIN = 6 ; // аналоговый вход(пин) для первого энкодера
int ENCODER2_PIN = 7 ; // аналоговый вход(пин) для второго энкодера
int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок


2) проверь значения этих переменных в файле duino.ini

duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1

и если энкодеры или ик-приёмник не используется, то задай 0 вместо 1

3) Если температурные датчики не подключены, то убери все показатели температуры из шапки и инфопанели, и данные о температуре отключатся автоматически

Но самое главное что бы первый пункт был выполнен

Что-то не выходит каменный цветок:shok:
Все делал по инструкции - молчит ардуина с эти скетчем, а от JoyStick работает.:be:
И еще один баг когда ставлю iCarDuino_1_0_0_6 по iCarDuino_1_0_0_9, то перегружается икар сам циклически с ошибкой, а с iCarDuino_1_0_0_1 нет.

Bersenev
12.12.2012, 23:37
Все делал по инструкции - молчит ардуина с эти скетчем, а от JoyStick работает.:be:

Работает с плагином или с родной программой? и дай ссылку на скетч

И еще один баг когда ставлю iCarDuino_1_0_0_6 по iCarDuino_1_0_0_9, то перегружается икар сам циклически с ошибкой, а с iCarDuino_1_0_0_1 нет.

Что значит перезагружается "циклически с ошибкой"?

folv
12.12.2012, 23:59
Работает с плагином или с родной программой? и дай ссылку на скетч



Что значит перезагружается "циклически с ошибкой"?

1. http://compcar.ru/forum/showthread.php?4640-%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D 0%B8%D0%B5-%D1%80%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D0%BC%D0%B8-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC%D0%B8-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8-Carduino

Bersenev
13.12.2012, 00:04
Всё равно не ясно какой конкретно скетч используешь и что значит "циклически".
Заодно ещё хотелось бы знать что именно подключено к ардуино кроме резестивных кнопок

folv
13.12.2012, 00:17
Всё равно не ясно какой конкретно скетч используешь и что значит "циклически".
Заодно ещё хотелось бы знать что именно подключено к ардуино кроме резестивных кнопок

//http://compcar.ru
#define PIN 5 //номер аналогового порта
#define LIMIT 5 //предел погрешности сопротивления

byte bytes[2];
int res_dt1, res_d;
unsigned long math_time,old_time,real_time;
void setup()
{
Serial.begin(115200); // настроить скорость com порта
}

void loop()
{
res_d = analogRead(PIN); // прочитать данные АЦП
delay(30);
res_dt1 = analogRead(PIN); // прочитать данные АЦП
old_time = millis();
math_time = 0;
while(math_time < 300 && (res_dt1 > res_d-LIMIT && res_dt1 < res_d+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность нажатия
res_dt1 = analogRead(PIN); // прочитать данные АЦП
}

if( math_time > 50) //если нет дребезга то короткое нажатие
{
bytes[0] = res_d & 255; // преобразовать в 2-байта
bytes[1] = (res_d & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}
"циклически" - нажимаю на закрыть на окошке об прекращении работы приложения, икар закрываетя сам и потом сам запускается с ошибкой -- пока через диспетчер задач не закроешь.

собрал на макетной только резестивную часть и энкодеров.

Bersenev
13.12.2012, 00:50
"циклически" - нажимаю на закрыть на окошке об прекращении работы приложения, икар закрываетя сам и потом сам запускается с ошибкой -- пока через диспетчер задач не закроешь.

С этим пока никаких идей, но у меня на восьмёрке 32-й с ардуино v.7 всё работает и ничего не вылетает. А какой размер памяти EEPROM в ардуино v.4?

собрал на макетной только резестивную часть и энкодеров.

Можно попробовать отключить неиспользуемые функции как в примере


// if( is_ir_key ) ir_key(); // ИК приёмник
// if( is_temperature_sensors ) temperature_sensors(); // температурные датчики
// if( is_accelerometer ) accelerometer(); // акселерометр
if( is_encoder_1 ) encoder_1(); // первый энкодер
if( is_encoder_2 ) encoder_2(); // второй энкодер
if( is_res_keys ) res_keys(); // резестивные кнопки
if( is_relay_state ) relay_state();

folv
13.12.2012, 01:07
С этим пока никаких идей, но у меня на восьмёрке 32-й с ардуино v.7 всё работает и ничего не вылетает. А какой размер памяти EEPROM в ардуино v.4?


У меня Win8Pro x64
Ошибка не зависит от подключения ардуино, только когда скопируешь файлы.
размер памяти (EEPROM) 512 байт

folv
15.12.2012, 10:23
Мне так и понятно - обязательно ли собирать полностью схему ,чтобы заработал плагин?

filinmd
15.12.2012, 12:00
Мне так и понятно - обязательно ли собирать полностью схему ,чтобы заработал плагин?

нет, не обязательно.

folv
15.12.2012, 13:05
Весь мозг уже сломался:shok:
Спецально уже вместо Win8 Pro x64 вернул Win7 Ult x32.
Заливал скетч в Carduino Nano V4 и CyberBoard Mega
На макетной плате собрал только резестивную часть
1. Плагин зарегистрил запустив RunMe1st.cmd
2. переменные duino.ini есть
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1
3. В iCarDSConfig закладка Global Vars добавил согласно своим параметрам duino_com=20 и duino_com_baudRate=115200
4. на четвёртом экране настроек включил загрузку плагина iCarDuino и перезагрузил iCarDS
И реакци ноль:be: какой-то полтергейс

Bersenev
15.12.2012, 13:13
Всё сделано абсолютно правильно. Попробуй сделать вот это http://www.pccar.ru/showpost.php?p=226882&postcount=232 , по моему там тоже был Carduino Nano V4. Создаётся ощущение, что ардуино не принимает команды от компа.

Только там речь идёт про ик-приёмник, а в случае с резестивными кнопками вместо

if( is_res_keys ) res_keys(); // резестивные кнопки

сделай так

res_keys(); // резестивные кнопки

folv
15.12.2012, 15:42
Всё сделано абсолютно правильно. Попробуй сделать вот это http://www.pccar.ru/showpost.php?p=226882&postcount=232 , по моему там тоже был arduino Nano V4. Создаётся ощущение, что ардуино не принимает команды от компа.

Только там речь идёт про ик-приёмник, а в случае с резестивными кнопками вместо

if( is_res_keys ) res_keys(); // резестивные кнопки

сделай так

res_keys(); // резестивные кнопки


При таком методе заработал только CyberBoard Mega, а от arduino Nano V4 так и не активности.

Смущает враза

Можно, на производительность это влиять не будет. Если не используешь акселерометр и термометры, то ничего страшного не случится, а вот если будешь использовать, то могут быть проблемы при выходе из сна


получается нормально работать будет только с arduino Nano Duo V.7?:dntknw:

Bersenev
15.12.2012, 16:22
При таком методе заработал только CyberBoard Mega, а от arduino Nano V4 так и не активности.
получается нормально работать будет только с arduino Nano Duo V.7?:dntknw:

У меня есть два ардуино v.5 и v.7, оба работают без проблем. На других я не тестировал.

Но я не пойму, почему CyberBoard Mega не получает команду на включение процедуры резестивных кнопок от плагина. Сделай скриншот настроек порта ардуино в windows, сравню со своими, может там что не так.

folv
15.12.2012, 17:14
У меня есть два ардуино v.5 и v.7, оба работают без проблем. На других я не тестировал.

Но я не пойму, почему CyberBoard Mega не получает команду на включение процедуры резестивных кнопок от плагина. Сделай скриншот настроек порта ардуино в windows, сравню со своими, может там что не так.

У тебя ардуино v.5 и v.7 наверное на Atmega-328 - может в этом вся загвоздка?
Сделал скриншот настроек

YraY
16.12.2012, 12:01
При таком методе заработал только CyberBoard Mega, а от Carduino Nano V4 так и не активности.
получается нормально работать будет только с Carduino Nano Duo V.7?:dntknw:

у меня после вот этого
if( is_res_keys ) res_keys(); // резестивные кнопки
сделай так
res_keys(); // резестивные кнопки
старый Carduino Nano заработал, какой версии он не помню, но с резистивными кнопками и ИК, работает нормально без нареканий.
А вот с датчиками температуры и энкодерами что-то не получилось, но я с ними и не сильно старался но столе попробовал, не заработали и забил на них. Win7 x32.

holywillie
20.12.2012, 23:35
Подскажите уличный градусник застыл на 85 салон работает где искать?

awtoap
20.12.2012, 23:44
Возможно либо обрыв линии, либо КЗ через попадание влаги. Также возможен выход из строя самого датчика.

Alex-NN
20.12.2012, 23:44
Подскажите уличный градусник застыл на 85 салон работает где искать?

У меня периодически та же фигня. :yes2: Но не постоянно, а через какое-то время после начала работы системы.
Правда у меня ардуино не запитан от 5 В. Просто USB. Может быть в этом дело...:dntknw:

holywillie
20.12.2012, 23:55
Возможно либо обрыв линии, либо КЗ через попадание влаги. Также возможен выход из строя самого датчика.

спасибо видать последствия ледяного дождя

holywillie
22.12.2012, 12:49
Датчик DS18B20 можно заменить на DS1820?

awtoap
22.12.2012, 20:05
нет...они разные.

folv
26.12.2012, 19:29
На ардуино V.7 все заработало:shok:, кроме энкодеров - сопротивления для "кнопки, А и В" можно поменять на другие? просто не нашел под рукой 1,8 и 3,2 кОм.

Bersenev
26.12.2012, 19:35
кроме энкодеров - сопротивления для "кнопки, А и В" можно поменять на другие? просто не нашел под рукой 1,8 и 3,2 кОм.

можно, но тогда придётся в процедурах обработки энкодеров подбирать новый значения

folv
26.12.2012, 19:50
можно, но тогда придётся в процедурах обработки энкодеров подбирать новый значения

А как подобрать эти значения и в каких строках? Если не трудно:blush:

Bersenev
26.12.2012, 20:26
А как подобрать эти значения и в каких строках? Если не трудно:blush:

Менять надо в этих строках, то что выделено красным

if( encoder1_dt >= 0x226 && encoder1_dt <= 0x2a6 )


if( encoder1_dt >= 0x3E0 && encoder1_dt <= 0x410 && encoder1_key3 != 1 )

if( encoder1_dt >= 0xA0 && encoder1_dt <= 0xF0 && encoder1_key3 != 2 )

if( encoder1_dt >= 0x1A0 && encoder1_dt <= 0x200 && encoder1_key3 != 3 )

а вот что бы получить нужные значения наверно придётся написать скетч как для резестивных кнопок и через какую-нибудь программу-терминал общения с com-портом получить эти значения вращая энкодер.

folv
26.12.2012, 20:47
Менять надо в этих строках, то что выделено красным

if( encoder1_dt >= 0x226 && encoder1_dt <= 0x2a6 )


if( encoder1_dt >= 0x3E0 && encoder1_dt <= 0x410 && encoder1_key3 != 1 )

if( encoder1_dt >= 0xA0 && encoder1_dt <= 0xF0 && encoder1_key3 != 2 )

if( encoder1_dt >= 0x1A0 && encoder1_dt <= 0x200 && encoder1_key3 != 3 )

а вот что бы получить нужные значения наверно придётся написать скетч как для резестивных кнопок и через какую-нибудь программу-терминал общения с com-портом получить эти значения вращая энкодер.

по отдельности для каждого вывода А (key3 != 1 ), В (key3 != 2 ) и кнопка (key3 != 3)
а это общее значение if( encoder1_dt >= 0x226 && encoder1_dt <= 0x2a6 )

Bersenev
26.12.2012, 20:57
это кнопка(нажатие)

if( encoder1_dt >= 0x226 && encoder1_dt <= 0x2a6 )


А это вращение влево или в право.

if( encoder1_dt >= 0x3E0 && encoder1_dt <= 0x410 && encoder1_key3 != 1 )

if( encoder1_dt >= 0xA0 && encoder1_dt <= 0xF0 && encoder1_key3 != 2 )

if( encoder1_dt >= 0x1A0 && encoder1_dt <= 0x200 && encoder1_key3 != 3 )

Дело в том, что для выводов А и В есть три значения сопротивлений, а не два. И порядок смены этих сопротивлений и определяет в какую сторону вращается энкодер.

folv
26.12.2012, 21:04
это кнопка(нажатие)

if( encoder1_dt >= 0x226 && encoder1_dt <= 0x2a6 )


А это вращение влево или в право.

if( encoder1_dt >= 0x3E0 && encoder1_dt <= 0x410 && encoder1_key3 != 1 )

if( encoder1_dt >= 0xA0 && encoder1_dt <= 0xF0 && encoder1_key3 != 2 )

if( encoder1_dt >= 0x1A0 && encoder1_dt <= 0x200 && encoder1_key3 != 3 )

Дело в том, что для выводов А и В есть три значения сопротивлений, а не два. И порядок смены этих сопротивлений и определяет в какую сторону вращается энкодер.

так это максимальное и минимальное значение в шестнадцатеричном отображении?

Bersenev
26.12.2012, 21:07
так это максимальное и минимальное значение в шестнадцатеричном отображении?

Да, но можешь и в десятичном виде их записать. Просто я получал значения сопротивлений в шестнадцатеричном виде, поэтому так и записал

folv
26.12.2012, 21:26
Да, но можешь и в десятичном виде их записать. Просто я получал значения сопротивлений в шестнадцатеричном виде, поэтому так и записал

А можно скетч для получения значений и в какой программе-терминал получить :blush:, а в этом я не очень:no:

Bersenev
26.12.2012, 21:37
А можно скетч для получения значений и в какой программе-терминал получить :blush:, а в этом я не очень:no:

Здесь сложнее, я получаю эти данные через отладчик скина, модифицирую плагин и скетч, а для такого варианта придётся много чего установить.

Самый простой вариант это найти ближайшие по номиналу сопротивления и подкорректировать значения расширяя диапозоны.

Или бери скетч для резестивных кнопок от Chip-а, он фактически выдаёт значения сопротивлений

folv
26.12.2012, 21:47
Здесь сложнее, я получаю эти данные через отладчик скина, модифицирую плагин и скетч, а для такого варианта придётся много чего установить.

Самый простой вариант это найти ближайшие по номиналу сопротивления и подкорректировать значения расширяя диапозоны.

Или бери скетч для резестивных кнопок от Chip-а, он фактически выдаёт значения сопротивлений

скетч для резестивных кнопок от Chip-а
получились значения Ноткей
А = 510
В = 320
и еще 243
кнопка 580

Вставлял их на 20 больше и меньше.

не работает

Bersenev
26.12.2012, 21:58
скетч для резестивных кнопок от Chip-а
получились значения Ноткей


Дай ссылку на скетч или сам скетч

folv
26.12.2012, 22:01
Дай ссылку на скетч или сам скетч

//http://compcar.ru
#define PIN 5 //номер аналогового порта
#define LIMIT 10 //предел погрешности сопротивления

byte bytes[2];
int res_dt1, res_d;

void setup()
{
Serial.begin(115200); // настроить скорость com порта
}

void loop()
{
res_d = analogRead(PIN); // прочитать данные АЦП
delay(30);
res_dt1 = analogRead(PIN); // прочитать данные АЦП


if( res_dt1 > res_d-LIMIT && res_dt1 < res_d+LIMIT ) //если нет дребезга то короткое нажатие
{
bytes[0] = res_d & 255; // преобразовать в 2-байта
bytes[1] = (res_d & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}

Bersenev
26.12.2012, 22:13
читаешь нормально, теперь вопрос чем смотришь значения?

folv
26.12.2012, 22:19
читаешь нормально, теперь вопрос чем смотришь значения?

HotKey от Chipa

Bersenev
26.12.2012, 22:25
HotKey от Chipa

А вот как эта программа преобразует полученное от ардуино значение я не знаю. Возможно оно как то обрабатывается, для того что бы убрать дребезг. Поэтому и говорю что лучше использовать терминал.

folv
26.12.2012, 22:35
пробывал в терминале при этом скетче, одно значение FF 03 00 00 бежит постоянно и заблудился где цифиры для кнопок

admin
26.12.2012, 22:40
Программа HotKey ничего не преобразует выводит в чистом виде

Bersenev
26.12.2012, 23:01
Программа HotKey ничего не преобразует выводит в чистом виде

По предыдущему скриншоту увидел.

пробывал в терминале при этом скетче, одно значение FF 03 00 00 бежит постоянно и заблудился где цифиры для кнопок

Так и должно быть. Теперь сделай следующее. Запусти терминал, нажимай на энкодер секунд 5, делай скриншот. Потом перезапускай или сбрасывай терминал и вращай энкодер в одну сторону секунд 5, делай скриншот, а потом тоже самое в другую сторону. И выкладывай скриншоты

Bersenev
26.12.2012, 23:13
И ещё используй такой скетч

//http://compcar.ru
#define PIN 5 //номер аналогового порта
#define LIMIT 10 //предел погрешности сопротивления

byte bytes[2];
int res_dt1, res_d;

void setup()
{
Serial.begin(115200); // настроить скорость com порта
}

void loop()
{
res_d = analogRead(PIN); // прочитать данные АЦП
delay(40);
res_dt1 = analogRead(PIN); // прочитать данные АЦП


{
bytes[0] = res_d & 255; // преобразовать в 2-байта
bytes[1] = (res_d & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
}

Кстати странно, тот скетч, который ты выложил отправляет два байта, а терминал получает 4

admin
27.12.2012, 00:29
Наверно вот такой, ты имел ввиду
Но тогда будут ложные срабатывания от дребезга

//http://compcar.ru
#define PIN 5 //номер аналогового порта

byte bytes[2];
int res_d;

void setup()
{
Serial.begin(115200); // настроить скорость com порта
}

void loop()
{
res_d = analogRead(PIN); // прочитать данные АЦП

bytes[0] = res_d & 255; // преобразовать в 2-байта
bytes[1] = (res_d & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру

}

Bersenev
27.12.2012, 00:37
Наверно вот такой, ты имел ввиду
Но тогда будут ложные срабатывания от дребезга

Это не важно, главное убрать проверку, что бы удивить картину происходящего. Это же код для отладки, а не для работы

folv
27.12.2012, 12:15
По предыдущему скриншоту увидел.



Так и должно быть. Теперь сделай следующее. Запусти терминал, нажимай на энкодер секунд 5, делай скриншот. Потом перезапускай или сбрасывай терминал и вращай энкодер в одну сторону секунд 5, делай скриншот, а потом тоже самое в другую сторону. И выкладывай скриншоты

понажимал по 5 сек., вот что получилось

admin
27.12.2012, 14:25
580, 320, 510 тоже самое что и было (http://www.pccar.ru/showpost.php?p=241500&postcount=339)

Bersenev
27.12.2012, 15:48
понажимал по 5 сек., вот что получилось

Теперь вроде видно порядок смены значений, вечерком повнимательнее проанализирую и и скажу какие значения и где изменить

580, 320, 510 тоже самое что и было (http://www.pccar.ru/showpost.php?p=241500&postcount=339)

Так никто не сомневался, но кроме самих значений важен ещё и порядок их смены.

Bersenev
27.12.2012, 21:31
2 folv

Попробуй такую процедуру для энкодера

void encoder_1()
{
if( encoder1_key_millis + encoder1_key_wait_millis*2 < millis() ) { encoder1_key_old = 0; }
if( encoder1_millis + encoder1_wait_millis < millis() )
{
encoder1_millis = millis();
encoder1_dt = analogRead(ENCODER1_PIN); // прочитать данные АЦП

if( encoder1_dt >= 0x224 && encoder1_dt <= 0x264 )
{ // Здесь обрабатываем удержание кнопки
encoder1_key = ENCODER1_PIN;
encoder1_key = (encoder1_key << 16) | 0x030000EE;
if ( encoder1_key == encoder1_key_old )
{ // Здесь обрабатываем удержание кнопки
if( encoder1_key_millis + encoder1_key_wait_millis < millis() )
{
bytes[0] = encoder1_key & 0xFF; // преобразовать в 4-байта
bytes[1] = (encoder1_key & 0xFF00) >> 8;
bytes[2] = (encoder1_key & 0xFF0000) >> 16;
bytes[3] = (encoder1_key & 0xFF000000) >> 24;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
encoder1_key_millis = millis(); encoder1_key_wait_millis = encoder1_key_wait; //ir_wait_next;
}
}
else
{ // Здесь обрабатываем первое нажатие кнопки
encoder1_key_millis = millis(); encoder1_key_wait_millis = 50; //ir_wait_first;
}
encoder1_key_old = encoder1_key;
}
else
{
if( encoder1_dt >= 0x3C0 && encoder1_dt <= 0x3FF && encoder1_key3 != 1 )
{
if( (encoder1_key2 == 2) && (encoder1_key3 == 3))
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER1_PIN;
bytes[3] = 1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( (encoder1_key2 == 3) && (encoder1_key3 == 2) )
{
bytes[0] = 0xEE; // преобразовать в 2-байта
bytes[1] = 0;
bytes[2] = ENCODER1_PIN;
bytes[3] = 2;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=1;
}
else
{
if( encoder1_dt >= 0xC3 && encoder1_dt <= 0x113 && encoder1_key3 != 2 )
{
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=2;
}
else
{
if( encoder1_dt >= 0x120 && encoder1_dt <= 0x160 && encoder1_key3 != 3 )
{
encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=3;
}
}
}
}
}
}

Если заработает, то сделай то же самое для второго энкодера

И ещё в адуино V.7 лучше вешать на аналоговый пин №7 резестивные кнопки. А энкодеры на 5 и 6-й пин.

folv
28.12.2012, 06:45
2 folv

Попробуй такую процедуру для энкодера

Если заработает, то сделай то же самое для второго энкодера

И ещё в адуино V.7 лучше вешать на аналоговый пин №7 резестивные кнопки. А энкодеры на 5 и 6-й пин.

Все заработало, большое спасибо!:notworthy:
в адуино V.7 сразу переписал
int ENCODER1_PIN = 5 ; // аналоговый вход(пин) для первого энкодера
int ENCODER2_PIN = 6 ; // аналоговый вход(пин) для второго энкодера
int RES_PIN = 7 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок

folv
28.12.2012, 13:14
1. Можно вопросик ели это не секрет:blush:

if( encoder1_dt >= 0x224 && encoder1_dt <= 0x264 ) - это для кнопки я понял как вычислить

А для вращения в влево и право - не допонял эти значения
if( encoder1_dt >= 0x3C0 && encoder1_dt <= 0x3FF && encoder1_key3 != 1 )
if( encoder1_dt >= 0xC3 && encoder1_dt <= 0x113 && encoder1_key3 != 2 )
if( encoder1_dt >= 0x120 && encoder1_dt <= 0x160 && encoder1_key3 != 3 )

2. Длина проводов до енкодора кретична или нет?

Bersenev
28.12.2012, 13:48
А для вращения в влево и право - не допонял эти значения

if( encoder1_dt >= 0x3C0 && encoder1_dt <= 0x3FF && encoder1_key3 != 1 ) - 3FF выдаётся когда в энкодер находится в нулевом положении, когда не нажата ни одна кнопка. Но в связи с тем что и в этом положении бывает дребезг (видно из скриншотов), то задаём некоторый диапозон задав минимальное значение 3C0
if( encoder1_dt >= 0xC3 && encoder1_dt <= 0x113 && encoder1_key3 != 2 )
if( encoder1_dt >= 0x120 && encoder1_dt <= 0x160 && encoder1_key3 != 3 )

При повороте в одну сторону у тебя происходит выдача таких значений 3FF -- F3 -- 140 -- 3FF, а в другую 3FF -- 140 --F3 -- 3FF. Отсюда и диапазон для F3 (C3 - 113), а для 140 (120 - 160). Разумеется всё в шестнадцатеричной системе

2. Длина проводов до енкодора кретична или нет?

При тестах были метровые провода, всё работало без сбоев

folv
28.12.2012, 19:15
Данный скетч из шапки на ардуино Nano V.4 не помещается - большой размер

folv
28.12.2012, 19:37
А в этом плагине реализовано - двойное нажатие и поворот с нажатием?

Bersenev
28.12.2012, 21:29
Данный скетч из шапки на ардуино Nano V.4 не помещается - большой размер

Можно выкинуть из скетча код не используемых функций

Bersenev
28.12.2012, 21:38
А в этом плагине реализовано - двойное нажатие и поворот с нажатием?

Нет. В скине есть режим SHIFT, который позволяет на один энкодер повесить 4 действия,если переключателем режима SHIFT выбрано нажатие на энкодер. Или 6 действий, если переключение режима SHIFT находится на отдельной кнопке.

Таким образом на два энкодера можно повесить переключатель SHIFT и ещё 10-ть действий. На два энкодера с резестивной кнопкой-переключателем SHIFT 12 действий.

gukov
29.12.2012, 01:02
Андрей, подскажи пожалуйста

-этот плагин может работать как просто терминальный для COM порта?

Jury
01.01.2013, 00:22
Чтобы скетч для Nano v.7 компилировался в среде разработки 1.0.3 нужно в библиотеке IRremote в файле IRremoteInt.h строчку

#include "WProgram.h"

заменить на

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

С Новым годом!:sm490:

Jury
04.01.2013, 01:36
Теперь вопросец.. Дуину запустил, Икар настроил, акселерометр цифирки выводит. А вот экран Кренометра не запускается, и кнопка его не имеет значка. Хотя флешка accelerometer.swf на месте, лишнего тоже вроде не трогал

Bersenev
04.01.2013, 12:11
Теперь вопросец.. Дуину запустил, Икар настроил, акселерометр цифирки выводит. А вот экран Кренометра не запускается, и кнопка его не имеет значка. Хотя флешка accelerometer.swf на месте, лишнего тоже вроде не трогал

Скорее всего в файле main_screens.ini переменная screen_32_is равна 0, сделай так screen_32_is=1. А значок на кнопку я пока не придумал.

Jury
04.01.2013, 13:26
Супер! Спасибо.

Vlad-bodryi
04.01.2013, 19:46
всем здравствуйте! очень интересный форум для меня оказался, но к сожалению я незнаю программирования. очень много у меня идей но незнаю как их реализовать в моём авто, по части программирования, а схемотехника вроде как вырисовывается +/-.
есть некоторые замечания или вопросы:
почему реализация управления нагрузками на реле, а не на транзисторных ключах и/или оптореле? вопрос к тому, что реле больше потребляют и невозможность шим регулирования некоторых нагрузок.
возможно ли подключение от 2-х и более блоков Arduino и/или CyberBoard Mega для наращивания вх./вых.?
это для виндовс 7,8

Vlad-bodryi
07.01.2013, 13:30
да-а, ни одного ответа.
все бухают чё-ль?

Jury
08.01.2013, 10:20
не на транзисторных ключах и/или оптореле? вопрос к тому, что реле больше потребляют и невозможность шим регулирования некоторых нагрузок.
возможно ли подключение от 2-х и более блоков Arduino и/или CyberBoard Mega для наращивания вх./вых.?
это для виндовс 7,8

Можешь и на ключах реализовать, тогда м/с uln2803 не нужна, но появляется небольшой минус - общая шина всех ключей, тогда как реле вполне себе независимы по коммутируемой нагрузке. Шим в данном скетче не реализован (да и не может быть реализован с более-менее приличной частотой при данной схеме). Впрочем ШИМ делается на м/с 555 с пятью навесными деталюшками, и управляться может тем же блоком реле вообще без всякой переделки схемы и скетча.
Хотя я бы реализовал в даном iCarDuino полноценный SPI-интерфейс, тогда можно будет подключать к нему вообще что хочешь, ибо периферии с этим интерфейсом ну очень много.. Например 1(одна) м/с max7219 даст возможность управлять 64 независимыми нагрузками. Есть и регистры, и шим, и даже OSD-наложение на монитор.
Насчет 2-ч и более Дуинок. Вопрос интересный. В-принципе ОС пофик, ограничений на количество нет, управляются независимо друг от друга. При небольшой переделке iCar вполне может управлять и десятком.

Vlad-bodryi
10.01.2013, 14:09
БОЛЬШОЕ СПАСИБО Jury! сделаю вид, что почти всё понял.....

но появляется небольшой минус - общая шина всех ключей, тогда как реле вполне себе независимы по коммутируемой нагрузке.

почему общая? например есть оптореле, оптопары, + транзистор - прекрасная замена реле, если нужно гальванически развязать цепь и шины. выйдет конечно чуток дороже, но и электричество с экономит и функционал большой.
мне кажется, вам ребята стоит над этим подумать!
к тому же в авто не так уж много напряжений для выбора к тому же все они отталкиваются от бортсети 12 В !

Jury
10.01.2013, 15:09
БОЛЬШОЕ СПАСИБО Jury! сделаю вид, что почти всё понял.....

Не нужно сарказма. Если что непонятно, спрашивай, ответ у кого-нибудь всегда есть.

в авто не так уж много напряжений для выбора к тому же все они отталкиваются от бортсети 12 В

Я потому и написал, что минус небольшой. Но все ж изредка встречаются задачи, в которых без развязки не обойтись (например нужно скоммутировать другой прибор, не имеющий с бортсетью никаких контактов).

почему общая? например есть оптореле, оптопары, + транзистор - прекрасная замена реле

"Черный ящик" - два входа, два выхода. Но у транзистора, в отличие от реле, всего три вывода, и один из них обязательно будет общим.
Впрочем речь не о том, чтобы развязать вход с выходом, а о том, чтобы у всей группы выходных транзисторов не было бы общей массы.. или плюса.. Реализовать это непросто.
Но опять же повторюсь, в большинстве случаев это и не требуется.
А чем тебе реле не нравятся? Быстродействием? Ресурсом? Шумом? Может расскажешь свои задачи и люди посоветуют чего?

Vlad-bodryi
10.01.2013, 16:26
никакого сарказма! непонимаю только то что связано с программированием, написанием программ, программаторами и т.д.

реле не нравится потому что: большое самопотребление электричества(тем более гирлянда из реле), невозможность регулировки мощности, срок службы при больших токах, соотношение габариты/самопотреление/мощность потребителя.

pierrotm777
29.01.2013, 22:08
This plugin is very fun .
When can i found the screens files for this plugin please (.skin , .png)

Thanks for this wonderful share :rolleyes2:

D@nger
29.01.2013, 22:41
Может было уже, но вольтметр хочу сделать. реле, температуру не надо, реально?

Bersenev
29.01.2013, 22:46
When can i found the screens files for this plugin please (.skin , .png)


У этого плагина нет жёстко привязанных к нему экранов

При нажатии резестивной кнопки или повороте энкодера плагин вызывает событие "OnDuinoKeyPress", при этом переменная "duino_key" содержит код клавиши. Как это обрабатывать решает автор скина.

Команды
duino_rеlay_N_toggle - переключить реле с номером N
duino_rеlay_N_press - включить реле с номером N на 300 мс.
duino_rеlay_N_on - Включить реле с номером N
duino_rеlay_N_off - Выключить реле с номером N

N от 1 до 32.

Bersenev
29.01.2013, 22:50
Может было уже, но вольтметр хочу сделать.

Для ардуино NANO V.7 сделаю, в нём есть специальный пин для этих целей.

реле, температуру не надо, реально?

Не надо не используй, скеч и плагин написаны так, что если что то не используешь это никак не влияет на работу всего остального

Anthonymus
30.01.2013, 16:03
Для ардуино NANO V.7 сделаю, в нём есть специальный пин для этих целей.

А где можно правленный скетч с вольтметром видеть?

pierrotm777
30.01.2013, 16:04
And how i use the acceleromter !
I have found the accelerometer.swf into the Flash directory !

D@nger
30.01.2013, 19:22
Для ардуино NANO V.7 сделаю, в нём есть специальный пин для этих целей.


а для других? помню где то видел сделано через резистор или два ли, но не помню где, найти не могу.:mellow2:

Anthonymus
31.01.2013, 22:10
а для других? помню где то видел сделано через резистор или два ли, но не помню где, найти не могу.:mellow2:

Это было где-то в панели приборов...

D@nger
31.01.2013, 22:49
нашел на соседнем сайте) http://compcar.ru/forum/showthread.php?4463-%D0%92%D0%BE%D0%BB%D1%8C%D1%82%D0%BC%D0%B5%D1%82%D 1%80-%D0%BD%D0%B0-Arduino ток как 2 кода щас слить вместе)) слабоват я в этом..

folv
07.02.2013, 10:04
На схеме это 22мкф или 22nF?

D@nger
07.02.2013, 11:33
На схеме это 22мкф или 22nF?

микрофарад

folv
07.02.2013, 12:45
микрофарад

вроде нарисовано не как электролитический конденсатор и для чего они?

D@nger
07.02.2013, 12:49
Это керамический конденсатор, он от помех и высокочастотных скачков..

Bersenev
07.02.2013, 13:49
вроде нарисовано не как электролитический конденсатор и для чего они?

У меня стоят электролиты, основное их назначение сглаживание дребезга значений. Чем больше значения конденсатора, тем меньше разброс значений, но больше инертность. Опытным путём подобрал именно такие, и дребезг не большой и инертность не заметная.

folv
07.02.2013, 18:26
Сделал платку iCarDuino по коробочку:smile2:

Anthonymus
07.02.2013, 19:28
Сделал платку iCarDuino по коробочку:smile2:

А можно поподробнее. Пока вижу акселерометр и выход на IR приемник...

folv
07.02.2013, 19:49
А можно поподробнее. Пока вижу акселерометр и выход на IR приемник...

вот нарисовал

Anthonymus
07.02.2013, 20:30
вот нарисовал

Я так и предположил. А платкой не поделишься? Тоже надо от соплей уходить. Только добавлю датчики температуры...

folv
07.02.2013, 20:40
Я так и предположил. А платкой не поделишься? Тоже надо от соплей уходить. Только добавлю датчики температуры...

в Sprint-Layout нарисована -могу выложить файл не жалко:smile2:

Anthonymus
07.02.2013, 22:48
в Sprint-Layout нарисована -могу выложить файл не жалко:smile2:

Я в нем работал - думаю многим будет интересен полный проект для iCar'а. Добавлю свою часть и тоже выложу.

folv
08.02.2013, 11:14
файл платы iCarDuino:smile2: - если кому надо

pierrotm777
08.02.2013, 14:00
файл платы iCarDuino:smile2: - если кому надо
How to open the iCarDuino.lay file please ?

pierrotm777
08.02.2013, 14:02
файл платы iCarDuino:smile2: - если кому надо
Can you to give a complet bill of materials please ?

folv
08.02.2013, 14:15
How to open the iCarDuino.lay file please ?

Sprint-Layout 5.0

pierrotm777
08.02.2013, 15:35
Sprint-Layout 5.0

Thanks

Vodkin
24.02.2013, 19:31
Добрый день.
Наконец-то я все подключил и проверил в домашних условиях.
Вопрос по энкодеру: можно ли вместо него использовать вот такой Potentiometer:30010
Спасибо.

Bersenev
24.02.2013, 20:03
Вопрос по энкодеру: можно ли вместо него использовать вот такой Potentiometer:

С данным скетчем нельзя, это переменный резистор, а не энкодер. Для него надо будет писать не только другой скетч, но и дорабатывать плагин.

filinmd
25.02.2013, 10:01
на пульт можно назначить кнопки вверх вниз влево вправо, а вот работают они почему то не везде. К примеру на главном экране у меня отображен список воспроизведения и я хочу его полистать , а сделать я это не могу. Можно как то исправить?

Bersenev
25.02.2013, 10:30
на пульт можно назначить кнопки вверх вниз влево вправо, а вот работают они почему то не везде.


Работают они действительно не везде, а только в большинстве основных экранов. Если конечно речь о динамических кнопках, а не о кнопках клавиатуры вверх вниз влево вправо

К примеру на главном экране у меня отображен список воспроизведения и я хочу его полистать , а сделать я это не могу. Можно как то исправить?

Как раз на главном экране они работают. Список листается динамическими кнопками КНОПКА ВВЕРХ и КНОПКА ВНИЗ. Вот их и надо назначать на кнопки ардуино.

filinmd
25.02.2013, 11:26
Как раз на главном экране они работают. Список листается динамическими кнопками КНОПКА ВВЕРХ и КНОПКА ВНИЗ. Вот их и надо назначать на кнопки ардуино.

Странно, Назначаю их как динамические кнопки, и кнопки вверх вниз работают только в проводнике или в плейлисте, а на главном экране работают только влево и вправо

Bersenev
25.02.2013, 14:49
Странно, Назначаю их как динамические кнопки, и кнопки вверх вниз работают только в проводнике или в плейлисте, а на главном экране работают только влево и вправо

А какой вариант главного меню?

filinmd
25.02.2013, 15:48
А какой вариант главного меню?

"Инфопанель"

И в "Музыке" тоже не работает.

Bersenev
25.02.2013, 18:23
"Инфопанель"

Здесь должно работать, сейчас проверил

И в "Музыке" тоже не работает.

А в Музыке не должно, там я ещё не сделал. Включи режим МЕДИАПЛЕЕРА, там должно работать, только что проверил. Режим МЕДИАПЛЕЕРА от обычного режима сейчас отличается только тем, что при любых сменах источников всегда открывается экран медиаплеера (Раньше различий было больше, но со временем оба режима стали фактически идентичными)

Vodkin
26.02.2013, 21:55
это переменный резистор, а не энкодер
Спасибо. Почитал про устройство энкодера и понял, что это совсем разные вещи и разный принцип.

awtoap
15.03.2013, 23:12
Так возьми контроллер с двумя UART и USB и фильтруй все на нем...никаких трудностей не вижу. То есть подключай один уарт к MMI, а другой дальше в систему. Ну по USB прямиком в комп. Или реализовать софтово уарты, что немного сложнее, но так как скорость передачи низкая, вполне задача подъемная.

filinmd
15.03.2013, 23:15
Так возьми контроллер с двумя UART и USB и фильтруй все на нем...никаких трудностей не вижу. То есть подключай один уарт к MMI, а другой дальше в систему. Ну по USB прямиком в комп. Или реализовать софтово уарты, что немного сложнее, но так как скорость передачи низкая, вполне задача подъемная.

Arduino uno и mega 2560 , если не ошибаюсь, имеют несколько uart. Поправьте если не так.

Bersenev
18.03.2013, 16:40
Обсуждение MMI перенёс в отдельную тему http://www.pccar.ru/showthread.php?t=18860

YraY
15.04.2013, 01:26
А можно в код для ардуино добавить задержку включения камеры заднего вида, так чтобы при переключении передач монитор не переключался, чтобы на какой нибудь вход приходил сигнал на включение, а с какого нибудь выхода подавался сигнал на монитор с небольшой задержкой ?

OsDima
28.04.2013, 08:10
Купил Дуинку v3.0
Пока подключил только акселерометр.
Пришлось прошерстить более половины темы пока нашел IrRеmote(2) - добавьте её в первый пост, многим облегчите жизнь.

Акселерометр откалибровал но заметил непропорциональность при наклоне платы и наклоне машины на экране кренометра (сначала угол наклона растет более быстрыми темпами, потом скорость наклона замедляется (помоему не показалось), с чем это связано.

При наклоне платы влево машина на экране "Кренометра" наклоняется вправо - так должно быть или перевернуть плату акселерометра. Сегодня проверю логику в полевых условиях в машине.

Возможно ли добавить звуковое оповещение при наклоне выше 30 градусов (например большая скорость при затяжном повороте) летом поеду третий год подряд в Краснодарский край из Красноярска, думаю в дороге мне это поможет.

Bersenev
28.04.2013, 11:51
Акселерометр откалибровал но заметил непропорциональность при наклоне платы и наклоне машины на экране кренометра (сначала угол наклона растет более быстрыми темпами, потом скорость наклона замедляется (помоему не показалось), с чем это связано.


Акселерометр не меряет углы наклона, он меряет ускорения действующие на микросхему акселерометра, поэтому использование его в качестве измерителя углов наклона автомобиля не совсем корректно.

При наклоне платы влево машина на экране "Кренометра" наклоняется вправо - так должно быть или перевернуть плату акселерометра. Сегодня проверю логику в полевых условиях в машине.


Куда наклонятся акселерометр туда же должна наклонятся и машина на экране


Возможно ли добавить звуковое оповещение при наклоне выше 30 градусов (например большая скорость при затяжном повороте) летом поеду третий год подряд в Краснодарский край из Красноярска, думаю в дороге мне это поможет.

В скине это есть, настройки скина -Звуки и задавай какие хочешь звуковые предупреждения

OsDima
29.04.2013, 16:50
В скине это есть, настройки скина -Звуки и задавай какие хочешь звуковые предупреждения

Звуковые оповещения работают но функционал условий достаточно скуден. Пришлось зделать 2 условия на оповещение при поворотах (1. X>=30, 2) X<=-30)
При этом занялось 2 оповещения, а их количество ограничено 8 шт. Если понадобится больше - как поступить?

Bersenev
29.04.2013, 17:08
Звуковые оповещения работают но функционал условий достаточно скуден.

А каких ещё условий не хватает? При сравнении двух элементов можно разве что добавить НЕРАВНО и всё. Но думаю это особо не нужно.

Пришлось зделать 2 условия на оповещение при поворотах (1. X>=30, 2) X<=-30) При этом занялось 2 оповещения, а их количество ограничено 8 шт. Если понадобится больше - как поступить?

Не 8 шт, а 6 шт. Я хотел сделать около двух десятков, но потом решил остановится на 6-ти, так за это время никому больше и не требовалось.

Увеличить количество условий особого труда не представляет.

OsDima
29.04.2013, 18:00
А каких ещё условий не хватает? При сравнении двух элементов можно разве что добавить НЕРАВНО и всё. Но думаю это особо не нужно.
В случае с окном Кренометра -30>X>30 (исключающий диапазон (от -30 до 30) при выходе из этого диапазона крен в критическом диапазоне.

Для управления реле можно использовать такой алгоритм:
Освещение ниже нормы,
скорость выше 5 км/ч,
двигатель заведен
- значит включить ходовые огни.
Три условия для управления одним реле или группой реле.

Помоему наличие нескольких условий будет более функционально, тоже самое и для голосовых сообщений можно добавить.
POI, звуки и управление реле в одном едином стиле составления условий.

Может это перебор, но это мое мнение, я бы их использовал во многих случаях.

OsDima
29.04.2013, 18:04
Где-то в ветке я встречал о ситуации о неопределении устройства Arduino после выхода из спяшего режима.
Помогает передергивание USB и кнопка ресет у Arduino.
Ткните носом чем лечится?

M@troskin
04.05.2013, 12:14
Arduino IDE 1.0.4 выдает в строке статуса "скетч слишком большой, обратитесь к (куда-то в дебри arduino.cc) за советами по его уменьшению.
Я один такой счастливчик?

Bersenev
04.05.2013, 12:35
Arduino IDE 1.0.4 выдает в строке статуса "скетч слишком большой, обратитесь к (куда-то в дебри arduino.cc) за советами по его уменьшению.
Я один такой счастливчик?

В Ардуино v5 и v7 скетч влазит, с другими не пробовал. Могу только посоветовать убрать из скетча неиспользуемые функции.

M@troskin
04.05.2013, 17:42
В Ардуино v5 и v7 скетч влазит, с другими не пробовал. Могу только посоветовать убрать из скетча неиспользуемые функции.

а комментировать надо от и до? или достаточно шапку комментировать слэшами?
то есть мне не нужны реле и термодатчики, к примеру:

// Функция работы с реле
//----------------------------------------------------------------------------------
void relay_state()
{
if( relays_milles + relays_wait_milles < millis() )
{
bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
bytes[0] = relays_state4; // преобразовать в 4-байта
bytes[1] = relays_state3;
bytes[2] = relays_state2;
bytes[3] = relays_state1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру

relays_milles = millis();
}
}

ставить // перед каждой строкой или достаточно закомментировать void relay_state()?

M@troskin
04.05.2013, 17:56
а комментировать надо от и до? или достаточно шапку комментировать слэшами?
то есть мне не нужны реле и термодатчики, к примеру:


ставить // перед каждой строкой или достаточно закомментировать void relay_state()?

поскипано

разобрался. траблшутинг рекомендует выкинуть все инклюды с неиспользуемыми библиотеками.
убрал пока ИК-часть и акселерометры, скетч усох до 9 кбайт и вроде как зашился.
вопрос остается такой:
парочка варнингов проскакивает в начале компиляции про sketch_may04a.ino: In function 'void setup()':
sketch_may04a.ino:126: warning: comparison between signed and unsigned integer expressions
sketch_may04a.ino: In function 'void res_keys()':
sketch_may04a.ino:462: warning: suggest parentheses around arithmetic in operand of ^
вроде как ничего страшного не происходит, но мало ли что...

M@troskin
05.05.2013, 17:25
опять проблема:
скетч зашился, icar arduino видит ( у меня orduino - это atmega 168 и мост Silabs CP2102), но вместо осмысленных нажатий кнопок - сыпятся кучами DUINO_EE с номерами, DUINO_AA... куда копать?

это все без подключенных кнопок, энкодеров и датчиков - голая дуина в USB-порту

Bersenev
05.05.2013, 17:53
опять проблема:
скетч зашился, icar arduino видит ( у меня orduino - это atmega 168 и мост Silabs CP2102), но вместо осмысленных нажатий кнопок - сыпятся кучами DUINO_EE с номерами, DUINO_AA... куда копать?


Непонятно что используется, только резестивные кнопки или энкодеры тоже. DUINO_EE - это сообщение от энкодера, DUINO_AA - это сообщения от резестивных кнопок. Судя по кодам энкодеры подключены к 6-му и 7-му пину, а резестивные кнопки к 5-му. Если это не так, то надо в скетче задать правильные номера пинов. Часто бывает такое, допустим энкодер не используется, а скетч читает этот пин, в результате начинается всякая ерунда. Поэтому если что то не используется, то надо или отключить неиспользуемые вещи в скине ( как это сделать в шапке расписано) , или исключить это из скетча.

Данное устройство я не тестировал, поэтому как оно будет себя вести с данным скетчем я не знаю. Проверял на CarDuino Nano v.5 и v.7, на них схема и скетч из шапки работают без проблем. Возможно на твоём устройстве нужно подгонять скетч.

OsDima
05.05.2013, 20:57
это все без подключенных кнопок, энкодеров и датчиков - голая дуина в USB-порту

Все сыпется потому что ничего не подключено, оключи в duino.ini что не подключено. У меня был подключен только энккодер и на его действия сыпались кнопки.

M@troskin
05.05.2013, 23:59
Непонятно что используется, только резестивные кнопки или энкодеры тоже. DUINO_EE - это сообщение от энкодера, DUINO_AA - это сообщения от резестивных кнопок. Судя по кодам энкодеры подключены к 6-му и 7-му пину, а резестивные кнопки к 5-му. Если это не так, то надо в скетче задать правильные номера пинов. Часто бывает такое, допустим энкодер не используется, а скетч читает этот пин, в результате начинается всякая ерунда.

Данное устройство я не тестировал, поэтому как оно будет себя вести с данным скетчем я не знаю. Проверял на CarDuino Nano v.5 и v.7, на них схема и скетч из шапки работают без проблем. Возможно на твоём устройстве нужно подгонять скетч.

Я собираюсь использовать И кнопки, И энкодер. Плата разведена, вытравлена, спаяна, но пока не подключена. Голая ардуино выдает весь этот букет ужасов :)
Подключения организованы в соответствии со схемой на 1-й странице (кстати, а нельзя схему покрупнее организовать? а то на моей плате пины расположены по-другому, а уверенности нет, плохо видно на Вашей схеме).
Поэтому если что то не используется, то надо или отключить неиспользуемые вещи в скине ( как это сделать в шапке расписано) , или исключить это из скетча.
О! Вспомнил! в каком месте скина ковырять?

кстати, интересный вопрос: обсуждались тут как-то различия фронтендов, и там упомянуто было про сложности с кучей переменных в родраннере (не осиливает). А нынче как оно в смысле упорядочения куч файлов в скинах? один Хамелеон содержит в себе порядка 4 тысяч файлов - может, стоило бы уже подумать в сторону неких объединенных архивов (типа текстур-паков и левел-паков в играх)? читать из одного последовательного файла системе в любом случае проще, чем найти нужный файл и прочесть из него данные, ИМХО.

Bersenev
06.05.2013, 00:26
Я собираюсь использовать И кнопки, И энкодер. Плата разведена, вытравлена, спаяна, но пока не подключена. Голая ардуино выдает весь этот букет ужасов :)


На голом ардуино это нормальная ситуация.

Подключения организованы в соответствии со схемой на 1-й странице (кстати, а нельзя схему покрупнее организовать? а то на моей плате пины расположены по-другому, а уверенности нет, плохо видно на Вашей схеме).


В папке скина должен быть файл "схема arduino.jpg"

О! Вспомнил! в каком месте скина ковырять?


В шапке этой темы всё написано

кстати, интересный вопрос: обсуждались тут как-то различия фронтендов, и там упомянуто было про сложности с кучей переменных в родраннере (не осиливает). А нынче как оно в смысле упорядочения куч файлов в скинах? один Хамелеон содержит в себе порядка 4 тысяч файлов - может, стоило бы уже подумать в сторону неких объединенных архивов (типа текстур-паков и левел-паков в играх)? читать из одного последовательного файла системе в любом случае проще, чем найти нужный файл и прочесть из него данные, ИМХО.

Количество файлов на скорость работы сильно не влияет, такое количество связано не столько со скином сколько с темами, а также с тем что в скине очень большое количество экранов настроек, которые используются редко.

А с переменными икар справляется без проблем, я не считал сколько их, но уже давно перевалило за 5тыс. По нашим расчётам даже если их будет порядка 100тыс, тормозов быть не должно, но до этого точно не дойдёт.

M@troskin
13.05.2013, 11:49
Возможно на твоём устройстве нужно подгонять скетч.

Перепроверил схему, пересобрал на макетке (вот скрин из fritzing, мож, чего не так подключил???:blush:) - все равно икар трещит, как будто по кнопкам мыши толпами носятся...
вопрос: в нашей радиолавке (единственной в городе) нет резисторов на 3,2 кОм, есть только на 3,3 кОм. Насколько критична такая замена в делителе для кнопок? мож, дело в нем?

OsDima
13.05.2013, 13:56
Перепроверил схему, пересобрал на макетке (вот скрин из fritzing, мож, чего не так подключил???:blush:) - все равно икар трещит, как будто по кнопкам мыши толпами носятся...
вопрос: в нашей радиолавке (единственной в городе) нет резисторов на 3,2 кОм, есть только на 3,3 кОм. Насколько критична такая замена в делителе для кнопок? мож, дело в нем?

Я сильно не гнался за точностью номиналов резисторов, у меня работает. Проверь у тебя нижние контакты питания соединены по всей длине, у меня нет (поделены на 3 части).
Но у меня другая проблема, Duino Nano у меня 3 версии
и поэтому у меня проблемы с распознованием USB соединения при загрузке системы и выходе из сна.
Последнее к чему я пришел - запитал USB порт от отдельного DC-DC преобразователя и он у меня включается раньше чем подается питание на CarPC. В 90% случаев запуск удачный.
Есть у меня сторонний преобразователь USB - COM (на CP2102) у него есть Rx, Tx, GND. Он распознается в 100% случаев подключения.
Продавец ардуньки говорит что он не будет работать с NANO с контактами D0 (Rx) и D1 (Tx),
говорит что нужен какой-то с 5-ю информационными контактами (Reset в их число не входит), либо перепрошить загрузчик на какой-то "Быстрый, точно не запомнил".
Если у кого есть опыт в данном вопросе, направте "жаждуюшего"

M@troskin
13.05.2013, 14:44
Есть у меня сторонний преобразователь USB - COM (на CP2102) у него есть Rx, Tx, GND. Он распознается в 100% случаев подключения.
Продавец ардуньки говорит что он не будет работать с NANO с контактами D0 (Rx) и D1 (Tx),
говорит что нужен какой-то с 5-ю информационными контактами (Reset в их число не входит), либо перепрошить загрузчик на какой-то "Быстрый, точно не запомнил".
Если у кого есть опыт в данном вопросе, направте "жаждуюшего"

загрузчик быстрый - наверно, имеется в виду, компилированная прошивка (HEX) без бутлоадера ардуины - сразу грузится прошивка в контроллер, без ожидания бутлоадером сигнала ресет. экономия порядка 5 кбайт для прошивки, мгновенный старт. недостаток - ардуина превращается в голый МК с периферией.
а ср2102 у меня стоит в моей дуине, вместо ФТ232. только как с ней работать - не в курсе.
потыкал мультиметром в монтажку - у меня шины питания (нижние и верхние) поделены зазорами на половинки, а не на трети.

OsDima
15.05.2013, 20:51
Но у меня другая проблема, Duino Nano у меня 3 версии
и поэтому у меня проблемы с распознованием USB соединения при загрузке системы и выходе из сна.
Последнее к чему я пришел - запитал USB порт от отдельного DC-DC преобразователя и он у меня включается раньше чем подается питание на CarPC. В 90% случаев запуск удачный.
Есть у меня сторонний преобразователь USB - COM (на CP2102) у него есть Rx, Tx, GND. Он распознается в 100% случаев подключения.
Продавец ардуньки говорит что он не будет работать с NANO с контактами D0 (Rx) и D1 (Tx),
говорит что нужен какой-то с 5-ю информационными контактами (Reset в их число не входит), либо перепрошить загрузчик на какой-то "Быстрый, точно не запомнил".
Если у кого есть опыт в данном вопросе, направте "жаждуюшего"

Ответ нашел такой: Chip писал на другом форуме.
_______________________
У китайских плат Arduino Nano V3 есть ошибка в разводке, на форуме это не однократно обсуждалось
Нога "Test" контроллера FTDI висит в воздухе, а должна быть подтянута к земле

Капнул между 25 и 26 ногой FTDI, заработало как часики. (столько времени потерял в поисках истины)
_______________________
А это перенес из другой темы
____________________________
Когда придут наборы реле для Arduino (уже пришли и спаяны), я хотел-бы реализовать алгоритм закрытия дверей одним из реле по скорости от GPS. Подключить к центральному замку - не проблема. Как заставить срабатывать реле при увеличении скорости с небольшой задержкой при начале движения. Об открытии центрального замка немного позже.

Для этого необходимо подключить либо напряжение на АКБ через ардуино либо ACC от замка зажигания как у сигнализации. Контроль напряжения по аналогии как в реле контроля напряжения, я такой использую для ходовых огней.

Может быть не в ту тему пишу но нельзя ли пристроить в плагин iCarDuino чать схемы из этой темы http://compcar.ru/forum/showthread.php?t=5307&p=49437&viewfull=1#post49437?
Если Chip не будет против небольшого плагиата. По моему мнению: напряжение на АКБ, сигнал с топливного датчика, и уровень освещенности будет не лишним. А если из завязать с реде iCarDuino в совокупности с GPS и т.д. - будет вообще прекрасно.

Фото-датчик у меня остался от сумеречника Shteinel. Сопротивление его меняется в пределах от десятков МегаОм до единиц КилоОм.
Активное тестирование со своей стороны гарантирую (когда придут наборы реледля iCarDuino).

Хоть отдельная железка по уровню освещенности у меня есть и прекрасно работает. Интеграция данной функции в CarPC будет более идеальней.

На последок. Прикупил данную ленту. http://www.jewelfox.ru/lot.php?id=1090. Со своим скечем работает класно. Вопрос к знатокам: возможно - ли пристроить iCarDuino управление данной лентой (в зависимости от музыки, журнал "Радио" сразу вспоминается)?

Bersenev
16.05.2013, 22:27
Теперь блок реле можно приобрести у меня.
В качестве конструктора 750р за блок, в собранном виде 1000р.
Обращаемся в личку

http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-600.jpg

pierrotm777
17.05.2013, 12:05
Теперь блок реле можно приобрести у меня.
В качестве конструктора 750р за блок, в собранном виде 1000р.
Обращаемся в личку

http://content.foto.mail.ru/mail/bersenev_s/Chameleon/i-600.jpg

Nice PCB:smile1:

Vodkin
19.05.2013, 14:55
Добрый день. Собрал схему из первого поста (2 энкодера пяти контактные и 6 кнопок). Получилось следующее: первые 4 кнопки работают, а 5 и 6 выдают код 4 кнопки (подключение через 100 ом), первый энкодер работает отлично (влево, вправо и нажатие), а вот второй энкодер (вправо удовлетворительно, нажатие отлично, влево работает примерно через 1 полный оборот) подключение 3.3 К вместо 3.2 К и 6.2 К вместо 6.1 К. Направте на путь истинный!? Спасибо.

Bersenev
19.05.2013, 16:41
Добрый день. Собрал схему из первого поста (2 энкодера пяти контактные и 6 кнопок). Получилось следующее: первые 4 кнопки работают, а 5 и 6 выдают код 4 кнопки (подключение через 100 ом), первый энкодер работает отлично (влево, вправо и нажатие), а вот второй энкодер (вправо удовлетворительно, нажатие отлично, влево работает примерно через 1 полный оборот) подключение 3.3 К вместо 3.2 К и 6.2 К вместо 6.1 К. Направте на путь истинный!? Спасибо.

А какой у тебя ардуино, и к каким пинам подключены энкодер и резестивные кнопки? Если ардуино версии 7, то резестивные кнопки лучше цеплять на А7, причём без подтягивающего резистора. И если второй энкодер висит на входе А7, то процедура тоже будет работать неправильно, так как на А7 уже есть подтягивающий резистор на плате самого ардуино.

Vodkin
19.05.2013, 17:49
А какой у тебя ардуино, и к каким пинам подключены энкодер и резестивные кнопки? Если ардуино версии 7, то резестивные кнопки лучше цеплять на А7, причём без подтягивающего резистора. И если второй энкодер висит на входе А7, то процедура тоже будет работать неправильно, так как на А7 уже есть подтягивающий резистор на плате самого ардуино.

Добрый день. Цепляю все на ардуино UNO. Для кнопок пин не менял (5), а вот для енкодеров переделал на 3 и 4 пины.

M@troskin
20.05.2013, 10:10
А какой у тебя ардуино, и к каким пинам подключены энкодер и резестивные кнопки? Если ардуино версии 7, то резестивные кнопки лучше цеплять на А7, причём без подтягивающего резистора. И если второй энкодер висит на входе А7, то процедура тоже будет работать неправильно, так как на А7 уже есть подтягивающий резистор на плате самого ардуино.

ух ты, какие интересные подробности поплыли... :be:
чорт побъери, как теперь высмотреть. есть ли у меня на плате Ордуины подтягивающие резисторы? в смысле, по схеме Ардуины 7 версии (видимо, Нано 7) в какой квадрат пялиться и что искать?

M@troskin
20.05.2013, 10:14
ух ты, какие интересные подробности поплыли... :be:
чорт побъери, как теперь высмотреть. есть ли у меня на плате Ордуины подтягивающие резисторы? в смысле, по схеме Ардуины 7 версии (видимо, Нано 7) в какой квадрат пялиться и что искать?

ага, сам спросил, сам поискал, сам нашел :)
в общем, у меня на моем контроллере подтяжки А7 к плюсу через 3.3кОм нету, а скетч тем не менее ведет себя, мягко говоря, безобразно.
Ув. Bersenev, может, мне проще тебе контроллер почтой бандеролькой запульнуть, чтобы ты его пощупал-подергал-попинал за всякие мягкие места? ;) и заставил его кнопками кнопкать, как положено?

OsDima
25.05.2013, 21:06
Попытался вспомнить програмирование и поразбирался со скетчем.
Как я понял что переменная res_key_count содержит количество резистивных кнопок и при работе скетча оно запоминается в ПЗУ (куда-то) и оно (количество) потом всегда остается такое-же.
У меня стояло = 0 а их физически аж 19 при 100 Ом между ними.
И сейчас не всегда выходят одни и теже коды в iCar (иногда 2, иногда 3, иногда пересекаются на разных соседних кнопках - особенно при прогреве двигателя.
Хотя на трассе такого потом не наблюдается (при больших оборотах)).
Мне заново залить скетч с res_key_count = 19 , чтоли (чтобы работало постабильнее) или подобрать другие резисторы.

Может подскажет кто-нибудь как пристроить сюда-же этот код. Чтобы работал при этом оригинальный код от iCarDuino
http://www.jewelfox.ru/lot.php?id=1090

Bersenev
25.05.2013, 22:32
Попытался вспомнить програмирование и поразбирался со скетчем.
Как я понял что переменная res_key_count содержит количество резистивных кнопок и при работе скетча оно запоминается в ПЗУ (куда-то) и оно (количество) потом всегда остается такое-же.
У меня стояло = 0 а их физически аж 19 при 100 Ом между ними.
И сейчас не всегда выходят одни и теже коды в iCar (иногда 2, иногда 3, иногда пересекаются на разных соседних кнопках - особенно при прогреве двигателя.
Хотя на трассе такого потом не наблюдается (при больших оборотах)).
Мне заново залить скетч с res_key_count = 19 , чтоли (чтобы работало постабильнее) или подобрать другие резисторы.


переменная res_key_count должна быть равна 0 при загрузке скетча. Потом ей будет присвоено значение из EEPROM.

Твоя проблема скорее всего связана с низким качеством самих кнопок. Я вначале поставил тактовые кнопки и запарился с ними, они всё время возвращали разные значения. Заменил их на микроконтакты и всё сразу исправилось.

В твоём случае думаю стоит увеличить шаг сопротивлений, то есть использовать не 100 Ом, а 200 или 300. И увеличить переменную unsigned int res_key_delta = 3; с 3-х, до 5-ти, а может и до 6-ти или 7-ми.

Но прежде чем заливать новый скетч поменяй это значение

#define RES_KEY_FLAG_ 0x76 // Флаг первого запуска скетча

с 0x76 на другое значение, допустим 0x77. Тогда скетч будет считать что это его первый запуск и сотрёт из EEPROM все ранее запомненые значения

OsDima
25.05.2013, 22:41
В твоём случае думаю стоит увеличить шаг сопротивлений, то есть использовать не 100 Ом, а 200 или 300. И увеличить переменную unsigned int res_key_delta = 3; с 3-х, до 5-ти, а может и до 6-ти или 7-ми.

Но прежде чем заливать новый скетч поменяй это значение
#define RES_KEY_FLAG_ 0x76 // Флаг первого запуска скетча
с 0x76 на другое значение, допустим 0x77. Тогда скетч будет считать что это его первый запуск и сотрёт из EEPROM все ранее запомненые значения
"Мерси" завтра попробую. Попробывал.
Поставил 6 и флаг первого запуска, сопротивление не менял. Итог работает как часики.
Мерси.

OsDima
31.05.2013, 22:57
На последок. Прикупил данную ленту. http://www.jewelfox.ru/lot.php?id=1090. Со своим скечем работает класно. Вопрос к знатокам: возможно - ли пристроить iCarDuino управление данной лентой (в зависимости от музыки, журнал "Радио" сразу вспоминается)?
Немного теории, и лента уже работает с iCarDuino. Хочу встроить её в Фары. Днем работает как ходовые огни. При поворотах мигает желтым. ну и т.д.
Только нужно брать сигнал с поворотника для синхронизации желтого, гуру подскажите как на цифровой пин подключить сигнал с поворотника, к чему притянуть и т.д. Аналоговые планирую под Фоторезистор и еще один последний - не придумал. Зато цифровых еще 6 или 8 осталось.
Извиняюсь за каламбур в голове каша от MyHome, KNX, Arduino.

admin
01.06.2013, 11:33
Думаю что возможно, http://compcar.ru/forum/showthread.php?t=9462

AlexIz
01.06.2013, 15:24
Что-то у меня не получается запустить кардуину. Контроллер на 168 атмеге из carmonitor. Ранее работал с HotKey. Соответственно укоротил скетч Berseneva до необходимого мне. Поключаю только резистивные кнопки и температурные датчики. Скетч такой:
//

#include <OneWire.h>
#include <SPI.h>
#include <EEPROM.h>

#define RES_KEY_FLAG_ 0x76 // Флаг первого запуска скетча

byte bytes[4];

//-----------------------------------------
//- входы(пины) ардуино -
//-----------------------------------------
int WIRE_PIN = 4; // цифровой вход(пин) 1WIRE-шины ( температурные датчики )

int REG_SELECT = 8 ; // цифровой вход(пин), управляющий защёлкой (SS в терминах SPI)


int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок

//-----------------------------------------
//- переменные включения функций скетча -
//-----------------------------------------
boolean is_ir_key = false;
boolean is_temperature_sensors = false;
boolean is_accelerometer = false;
boolean is_encoder_1 = false;
boolean is_encoder_2 = false;
boolean is_res_keys = false;
boolean is_relay_state = false;

//-----------------------------------------
//- Переменные для температурных датчиков -
//-----------------------------------------
OneWire ds(WIRE_PIN);
byte addr[8];
byte data[12];
unsigned long temperature_sensors_milles;
unsigned long temperature_sensors_wait_milles = 500; // Интервал передачи данных от температурных датчиков



//-----------------------------------------
//- Переменные для резистивных кнопок -
//-----------------------------------------
unsigned long res_dt = 0;
unsigned long res_dt_sum=0;
#define RES_DT_COUNT 500 // Количество считываемых данных
#define RES_DT_SKIP_COUNT 100 // Количество данных, которые надо пропустить при нажатии
#define RES_DT_POINT 6 // Точность
int res_dt_n = 0;
unsigned long res_key=0;
unsigned long res_key_old=0;
unsigned long res_key_wait_first = 500; // время ожидания после первого нажатия кнопки
unsigned long res_key_wait_next = 250; // время ожидания до следующего нажатия кнопки
unsigned long res_key_wait_millis = 0;
unsigned long res_key_millis;
unsigned long res_key_array[51][2];
unsigned int res_key_count = 0;
unsigned int res_key_delta = 3;



void setup()
{
Serial.begin(115200);
temperature_sensors_milles = millis();
res_key_millis = millis();


unsigned int first_run_key = EEPROM.read(0);
if ( first_run_key == RES_KEY_FLAG_ )
{
res_key_count = EEPROM.read(1);
//EEPROM.write(addr, val);
for(int i=0; i<res_key_count;i++)
{
res_key_array[i][0] = (EEPROM.read(i+2) * 256) + EEPROM.read(i+2+50) - res_key_delta; res_key_array[i][1] = res_key_array[i][0] + res_key_delta + res_key_delta;
}
}
for(int i=res_key_count; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}

// Инициализируем шину SPI. Если используется программная реализация,
// то вы должны сами настроить пины, по которым будет работать SPI.
SPI.begin();
pinMode(REG_SELECT, OUTPUT);
digitalWrite(REG_SELECT, LOW); // выбор ведомого - нашего регистра

// Завершаем передачу данных. После этого регистр установит
// на выводах Q0-Q7 уровни, соответствующие записанным битам.
digitalWrite(REG_SELECT, HIGH);
}

void loop()
{
if (Serial.available() >= 1) // Проверяем наличие команд от компьютера
{
switch (Serial.read())
{
case 0x01: // включить передачу данных от ик-пульта
is_ir_key = true;
break;

case 0x02: // включить передачу данных от датчиков температуры
is_temperature_sensors = true;
break;

case 0x03: // включить передачу данных от акселерометра
is_accelerometer = true;
break;

case 0x04: // включить передачу данных от первого энкодера
is_encoder_1 = true;
break;

case 0x05: // включить передачу данных от второго экнодера
is_encoder_2 = true;
break;

case 0x06: // включить передачу данных от резистивных кнопок
is_res_keys = true;
break;

case 0x07: // включить передачу данных о состоянии реле
is_relay_state = true;
break;

case 0x17: // восстановить состояние реле
{

digitalWrite(REG_SELECT, LOW);

digitalWrite(REG_SELECT, HIGH);

bytes[0] = 0xBF; // преобразовать в 4-байта
bytes[1] = 0xFF;
bytes[2] = 0xFF;
bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру

Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
break;

case 0x81: // выключить передачу данных от ик-пульта
is_ir_key = false;
break;

case 0x82: // выключить передачу данных от датчиков температуры
is_temperature_sensors = false;
break;

case 0x83: // выключить передачу данных от акселерометра
is_accelerometer = false;
break;

case 0x84: // выключить передачу данных от первого энкодера
is_encoder_1 = false;
break;

case 0x85: // выключить передачу данных от второго энкодера
is_encoder_2 = false;
break;

case 0x86: // выключить передачу данных от резистивных кнопок
is_res_keys = false;
break;

case 0x87: // выключить передачу данных от резистивных кнопок
is_relay_state = false;
break;

case 0x27: // сохранить текущее состояние реле и отключить их
{
}
break;

case 0xAA: // выключить передачу данных от резистивных кнопок
{
while (Serial.available() < 5) {}
int i = Serial.read();
bytes[0] = Serial.read(); // преобразовать в 4-байта
bytes[1] = Serial.read();
bytes[2] = Serial.read();
bytes[3] = Serial.read();
unsigned long key_res_min = 0; key_res_min = bytes[0]; key_res_min = key_res_min * 256 + bytes[1];
unsigned long key_res_max = 0; key_res_max = bytes[2]; key_res_max = key_res_max * 256 + bytes[3];
res_key_array[i-1][0] = key_res_min;
res_key_array[i-1][1] = key_res_max;
}
break;

case 0xAB: // сбросить настройки резистивных кнопок в EEPROM
{
EEPROM.write(0,0); // сбросить флаг первого запуска
res_key_count = 0; // сбросить количество резистивных кнопок
EEPROM.write(1,0); //
for(int i=0; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}
}
break;

case 0xBB: // Команда управление реле
{

}
}
}
}


//----------------------------------------------------------------------------------
// Функция работы с резистивными кнопками
//----------------------------------------------------------------------------------
void res_keys()
{
{
res_dt = analogRead(RES_PIN); // прочитать данные АЦП
if( res_dt >= 0x05 && res_dt <= 0x3F0 )
{
res_dt_n++;
if( res_dt_n > RES_DT_SKIP_COUNT )
{
res_dt_sum += (res_dt << RES_DT_POINT);
if( res_dt_n == RES_DT_COUNT)
{

res_key = (res_dt_sum / (RES_DT_COUNT - RES_DT_SKIP_COUNT));
res_key = (((((( res_dt_sum / (( RES_DT_COUNT - RES_DT_SKIP_COUNT ) + (2^(RES_DT_POINT-1)-1) ) >> (RES_DT_POINT-1)) + 1) >> 1) + 1)>> 1)); // + 1) >> 1;
res_dt_sum = 0; res_dt_n = 0;
}
}
}
else
{
res_dt_sum = 0; res_dt_n = 0; res_key = 0;
res_key_wait_millis = 0;
}
}
if( res_key_millis + res_key_wait_millis*2 <= millis() ) { res_key_old = 0; }
if( res_key_millis + res_key_wait_millis <= millis() )
{
if( res_key != 0 )
{
if( ((res_key_old - res_key_delta) <= res_key) && (res_key <= (res_key_old + res_key_delta)) )
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_next;
}
else
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_first;
}

int i = 0; int exit = 0;
while( res_key_array[i][0] != 0xFFFFFFFF && exit == 0 )
{
if( (res_key_array[i][0] <= res_key) && (res_key <= res_key_array[i][1]) ) exit = 1; else i++;
}
if( exit == 1 )
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = i+1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( res_key_count < 50 )
{
res_key_array[res_key_count][0] = res_key - res_key_delta; res_key_array[res_key_count][1] = res_key + res_key_delta;
res_key_count++;

EEPROM.write(1, res_key_count); // Запоминаем количество кнопок
byte one_byte = res_key / 256;
EEPROM.write(res_key_count+1, one_byte ); // Запоминаем старший байт значения кнопки
one_byte = res_key - one_byte * 256;
EEPROM.write(res_key_count+1+50, one_byte ); // Запоминаем младший байт значения кнопки
EEPROM.write(0, RES_KEY_FLAG_);

bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = res_key_count;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0xAA;
bytes[2] = (res_key & 0xFF00) >> 8;
bytes[3] = res_key & 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
}
res_key_old = res_key;
}
}


//----------------------------------------------------------------------------------
// Функция определение температуры датчиков DS18B20
//----------------------------------------------------------------------------------
void temperature_sensors()
{
if( temperature_sensors_milles + temperature_sensors_wait_milles < millis() )
{
temperature_sensors_milles = millis();

byte i;

if (!ds.search(addr))
{ // поиск нового датчика
ds.reset_search(); // если не нашли, сбрасываем поиск в начало
return; // и выходим
}

// Часть кода, которая ниже, выполняется только если
// найден новый датчик, с которым ещё не работали в
// главном цикле до сброса поиска

if (OneWire::crc8( addr, 7) != addr[7]) // Проверка CRC
{
return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
}

if (addr[0] != 0x28) // Проверка того, что найденное устройство - температурный датчик DS18B20
{
return; // Если не он, то опять в начало главного цикла на продолжение поиска
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);
ds.reset();
ds.select(addr);
ds.write(0xBE);

bytes[0] = 0xFF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xFFFFFFFF - код температурного датчика
Serial.write( addr,8); // отправить 8 байтовый номер температурного датчика

for ( i = 0; i < 9; i++) // получаем данные с датчика
{
data[i] = ds.read();
}
bytes[0] = 0; // отправляем байты содержащие температуру
bytes[1] = 0;
bytes[2] = data[0];
bytes[3] = data[1];
Serial.write( bytes,4); // значение температурного датчика
}
}

Скопмпилировался и записался нормально.
Далее указал порт и скорость, ну и всё, что написано в первом сообщении. При настройках ничего не происходит. Ни температуры, ни нажатия клавиш. Термодатчики тоже не определились. Правда в файле temp_sensor.ini были каких-то 4 адреса, но у меня только два датчика. Куда смотреть?

Bersenev
01.06.2013, 19:50
Контроллер на 168 атмеге из carmonitor.

С данным контроллером я скетч не проверял. Данный скетч работает с EEPROM, вопрос есть ли эта память в твоём ардуино.

Термодатчики тоже не определились. Правда в файле temp_sensor.ini были каких-то 4 адреса, но у меня только два датчика.

Очисти содержимое файла temp_sensor.ini, запусти икар и потом посмотри его содержимое

OsDima
01.06.2013, 22:38
Думаю что возможно, http://compcar.ru/forum/showthread.php?t=9462
Тема хорошая. Но про мой чип в светодиодах - 2811 там нет. Библиотека дугая и скейтч надо переделывать под неё. SPI уже распаян на реле и поэтому попробывать немогу. Надо еще UNO покупать (это не сейчас). Тем более что мне надо всего одна цифровая линия и опыта пока мало в написании и подгонки программ. LED.showRGB - пока не понимаю как организовать аргументы для неё. Хоть программа по логике очень проста но застрял на этом:

#include "FastSPI_LED2.h"

WS2811Controller800Mhz<5> LED; // задаём через какую ногу выводятся данные для светодиодов
unsigned long nTime, rTime, t;

void setup()
{
// инициализация ленты
{ LED.init(); }
delay(1); //пауза для инициализации ленты
//--------------------
Serial.begin(115200);
}

void loop()
{
uint8_t data;
t = millis(); //получаем текущее время
Serial.write(170); //отправляем байт синхронизации для ПК
if (Serial.read()) //ждем от ПК первый байт с колличеством пикселей ленты
{
uint16_t pix_num = data*3; //получаем общее колличество цветовых каналов ленты
uint16_t eTime = micros()-rTime; //получим время с момента окончания загрузки
if( eTime < 900) delay(eTime); //ждем полной инициализации (минус 100мкс для загрузки след. байта)
for(uint16_t i=0; i<pix_num; i++)
{ int num = 5; LED.showRGB(num, Serial.read()); //читаем UART и сразу сбрасываем в ленту пиксели
__________________________________________________ ________________________________________________
rTime = micros(); //стартуем счетчик времени инициализации ленты
nTime = t; // //обнулить время простоя
} else {
if((t - nTime) > 4000) ///гасим подсветку если нет потока более 2 сек
{
for(int16_t z=0; z<768; z++) LED.init(); //погасить все пикселы ленты
nTime = t;
}
}
}
//************************************************** *************************
unsigned char uart_read(void)
{ uint8_t val;
for (uint8_t i=0; i<255; ++i) //цикл ожидания байта данных из UART порта, время ожидания 2560мкс
{
if(Serial.read()>0) break; //если байт данных получен, то цикл прерывается
delay(10); //время ожидания байта
}
return val;
}

AlexIz
01.06.2013, 23:38
С данным контроллером я скетч не проверял. Данный скетч работает с EEPROM, вопрос есть ли эта память в твоём ардуино.
Очисти содержимое файла temp_sensor.ini, запусти икар и потом посмотри его содержимое
ATMega168 EEPROM 16кБ

temp_sensor.ini чистил, но ничего туда не записалось. Как проверить видит ли iCar ардуину?

AlexIz
02.06.2013, 22:55
Поменял контроллер запустил с полным скетчем. В файле temp_sensor.ini пусто. Контроллер периодически моргает синим диодом "L".
Чего делать то?

Bersenev
03.06.2013, 10:50
Чего делать то?

Давай сделаем так, заливаешь в ардуино скетч от кармонитора для резистивных кнопок. Пробуешь что бы он работал с их программой. Как убеждаешься что всё работает, подключаешь к икару через плагин iCarDuino. Если резистивные кнопки через iCarDuino заработают, то убедимся что всё с плагином нормально и я сделаю тебе скетч только под термодатчики и резистивные кнопки.

AlexIz
03.06.2013, 21:52
Т.е. запускать в iCar со скетчем от Chipa? Я правильно понял?

Bersenev
03.06.2013, 21:59
Т.е. запускать в iCar со скетчем от Chipa? Я правильно понял?

Правильно

AlexIz
03.06.2013, 22:01
Да, я пробовал и на полном скетче с другим контроллером и на другом компе. Результат одинаковый.

Bersenev
03.06.2013, 22:10
Да, я пробовал и на полном скетче с другим контроллером и на другом компе. Результат одинаковый.

1. В ардуино скетч от Chip-а и программа Chip-а работает?
2. В ардуино скетч от Chip-а и плагин iCarDuino в Настройках кнопок CarDuino что то происходит?

AlexIz
03.06.2013, 22:48
Давай сделаем так, заливаешь в ардуино скетч от кармонитора для резистивных кнопок. Пробуешь что бы он работал с их программой. Как убеждаешься что всё работает, подключаешь к икару через плагин iCarDuino. Если резистивные кнопки через iCarDuino заработают, то убедимся что всё с плагином нормально и я сделаю тебе скетч только под термодатчики и резистивные кнопки.

Сделал, как ты написал, кнопки работают.:tease:
А надо ли какие-то драйверы для ардуино ставить?

Bersenev
03.06.2013, 22:56
Сделал, как ты написал, кнопки работают.:tease:

То есть хочешь сказать, что скетч от Chip-a работает в iCarDuino?

А надо ли какие-то драйверы для ардуино ставить?

Вообще-то надо, надо. Драйвера от FTDI для создания com-порта

AlexIz
03.06.2013, 23:06
То есть хочешь сказать, что скетч от Chip-a работает в iCarDuino?

Да. При подключении слышны звуки нажатия кнопок.

Вообще-то надо, надо. Драйвера от FTDI для создания com-порта

Ну, если com порт появляется, значит всё есть.

Bersenev
03.06.2013, 23:10
Да. При подключении слышны звуки нажатия кнопок.

Раз плагин работает, то давай к каким пинам подсоединены резистивные кнопки и термодатчики, сделаю скетч.

AlexIz
04.06.2013, 08:04
Всё как на твоей схеме: 5-аналоговый - кнопки, 5 цифровой - термодатчики.

Bersenev
04.06.2013, 09:11
Всё как на твоей схеме: 5-аналоговый - кнопки, 5 цифровой - термодатчики.

Пробуй

//
#include <OneWire.h>
#include <EEPROM.h>

#define RES_KEY_FLAG_ 0x77 // Флаг первого запуска скетча

byte bytes[4];

//-----------------------------------------
//- входы(пины) ардуино -
//-----------------------------------------
int WIRE_PIN = 5; // цифровой вход(пин) 1WIRE-шины ( температурные датчики )

int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок

//-----------------------------------------
//- переменные включения функций скетча -
//-----------------------------------------
boolean is_temperature_sensors = false;
boolean is_res_keys = false;

//-----------------------------------------
//- Переменные для температурных датчиков -
//-----------------------------------------
OneWire ds(WIRE_PIN);
byte addr[8];
byte data[12];
unsigned long temperature_sensors_milles;
unsigned long temperature_sensors_wait_milles = 1000; // Интервал передачи данных от температурных датчиков
int t_status = 0;

//-----------------------------------------
//- Переменные для резестивных кнопок -
//-----------------------------------------
unsigned long res_dt = 0;
unsigned long res_dt_sum=0;
#define RES_DT_COUNT 500 // Количество считываемых данных
#define RES_DT_SKIP_COUNT 100 // Количество данных, которые надо пропустить при нажатии
#define RES_DT_POINT 6 // Точность
int res_dt_n = 0;
unsigned long res_key=0;
unsigned long res_key_old=0;
unsigned long res_key_wait_first = 500; // время ожидания после первого нажатия кнопки
unsigned long res_key_wait_next = 250; // время ожидания до следующего нажатия кнопки
unsigned long res_key_wait_millis = 0;
unsigned long res_key_millis;
unsigned long res_key_array[51][2];
unsigned int res_key_count = 0;
unsigned int res_key_delta = 5; // дельта для определения кода кнопки

void setup()
{
Serial.begin(115200);
temperature_sensors_milles = millis();
t_status = 0;
res_key_millis = millis();

unsigned int first_run_key = EEPROM.read(0);
if ( first_run_key == RES_KEY_FLAG_ )
{
res_key_count = EEPROM.read(1);
//EEPROM.write(addr, val);
for(int i=0; i<res_key_count;i++)
{
res_key_array[i][0] = (EEPROM.read(i+2) * 256) + EEPROM.read(i+2+50) - res_key_delta; res_key_array[i][1] = res_key_array[i][0] + res_key_delta + res_key_delta;
}
}
for(int i=res_key_count; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}

}

void loop()
{
if (Serial.available() >= 1) // Проверяем наличие команд от компьютера
{
switch (Serial.read())
{

case 0x02: // включить передачу данных от датчиков температуры
is_temperature_sensors = true;
break;

case 0x06: // включить передачу данных от резестивных кнопок
is_res_keys = true;
break;

case 0x82: // выключить передачу данных от датчиков температуры
is_temperature_sensors = false;
break;

case 0x86: // выключить передачу данных от резестивных кнопок
is_res_keys = false;
break;

case 0xAA: // выключить передачу данных от резестивных кнопок
{
while (Serial.available() < 5) {}
int i = Serial.read();
bytes[0] = Serial.read(); // преобразовать в 4-байта
bytes[1] = Serial.read();
bytes[2] = Serial.read();
bytes[3] = Serial.read();
unsigned long key_res_min = 0; key_res_min = bytes[0]; key_res_min = key_res_min * 256 + bytes[1];
unsigned long key_res_max = 0; key_res_max = bytes[2]; key_res_max = key_res_max * 256 + bytes[3];
res_key_array[i-1][0] = key_res_min;
res_key_array[i-1][1] = key_res_max;
}
break;

case 0xAB: // сбросить настройки резестивных кнопок в EEPROM
{
EEPROM.write(0,0); // сбросить флаг первого запуска
res_key_count = 0; // сбросить количество резистивных кнопок
EEPROM.write(1,0); //
for(int i=0; i<51;i++)
{
res_key_array[i][0] = 0xFFFFFFFF; res_key_array[i][1] = 0xFFFFFFFF;
}
}
break;
}
}
if( is_temperature_sensors ) temperature_sensors(); // температурные датчики
if( is_res_keys ) res_keys(); // резестивные кнопки
}

//----------------------------------------------------------------------------------
// Функция работы с резестивными кнопками
//----------------------------------------------------------------------------------
void res_keys()
{
{
res_dt = analogRead(RES_PIN); // прочитать данные АЦП
if( res_dt >= 0x05 && res_dt <= 0x3F0 )
{
res_dt_n++;
if( res_dt_n > RES_DT_SKIP_COUNT )
{
res_dt_sum += (res_dt << RES_DT_POINT);
if( res_dt_n == RES_DT_COUNT)
{

res_key = (res_dt_sum / (RES_DT_COUNT - RES_DT_SKIP_COUNT));
res_key = (((((( res_dt_sum / (( RES_DT_COUNT - RES_DT_SKIP_COUNT ) + (2^(RES_DT_POINT-1)-1) ) >> (RES_DT_POINT-1)) + 1) >> 1) + 1)>> 1)); // + 1) >> 1;
res_dt_sum = 0; res_dt_n = 0;
}
}
}
else
{
res_dt_sum = 0; res_dt_n = 0; res_key = 0;
res_key_wait_millis = 0;
}
}
if( res_key_millis + res_key_wait_millis*2 <= millis() ) { res_key_old = 0; }
if( res_key_millis + res_key_wait_millis <= millis() )
{
if( res_key != 0 )
{
if( ((res_key_old - res_key_delta) <= res_key) && (res_key <= (res_key_old + res_key_delta)) )
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_next;
}
else
{
res_key_millis = millis(); res_key_wait_millis = res_key_wait_first;
}

int i = 0; int exit = 0;
while( res_key_array[i][0] != 0xFFFFFFFF && exit == 0 )
{
if( (res_key_array[i][0] <= res_key) && (res_key <= res_key_array[i][1]) ) exit = 1; else i++;
}
if( exit == 1 )
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = i+1;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
if( res_key_count < 50 )
{
res_key_array[res_key_count][0] = res_key - res_key_delta; res_key_array[res_key_count][1] = res_key + res_key_delta;
res_key_count++;

EEPROM.write(1, res_key_count); // Запоминаем количество кнопок
byte one_byte = res_key / 256;
EEPROM.write(res_key_count+1, one_byte ); // Запоминаем старший байт значения кнопки
one_byte = res_key - one_byte * 256;
EEPROM.write(res_key_count+1+50, one_byte ); // Запоминаем младший байт значения кнопки
EEPROM.write(0, RES_KEY_FLAG_);

bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0;
bytes[2] = RES_PIN;
bytes[3] = res_key_count;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
else
{
bytes[0] = 0xAA; // преобразовать в 4-байта
bytes[1] = 0xAA;
bytes[2] = (res_key & 0xFF00) >> 8;
bytes[3] = res_key & 0xFF;
Serial.write( bytes,4); // отправить прочитаное значение компьютеру
}
}
}
res_key_old = res_key;
}
}

//----------------------------------------------------------------------------------
// Функция определение температуры датчиков DS18B20
//----------------------------------------------------------------------------------
void temperature_sensors()
{
if(t_status == 0)
{

if (!ds.search(addr))
{ // поиск нового датчика
ds.reset_search(); // если не нашли, сбрасываем поиск в начало
return; // и выходим
}

// Часть кода, которая ниже, выполняется только если
// найден новый датчик, с которым ещё не работали в
// главном цикле до сброса поиска

if (OneWire::crc8( addr, 7) != addr[7]) // Проверка CRC
{
return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
}

if (addr[0] != 0x28) // Проверка того, что найденное устройство - температурный датчик DS18B20
{
return; // Если не он, то опять в начало главного цикла на продолжение поиска
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);

t_status = 1;
}
else
{
if( temperature_sensors_milles + temperature_sensors_wait_milles < millis() )
{
temperature_sensors_milles = millis();

byte i;

ds.reset();
ds.select(addr);
ds.write(0xBE);

for ( i = 0; i < 9; i++) // получаем данные с датчика
{
data[i] = ds.read();
}
bytes[0] = 0xFF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xFFFFFFFF - код температурного датчика
Serial.write( addr,8); // отправить 8 байтовый номер температурного датчика
bytes[0] = 0; // отправляем байты содержащие температуру
bytes[1] = 0;
bytes[2] = data[0];
bytes[3] = data[1];
Serial.write( bytes,4); // значение температурного датчика
t_status = 0;
}
}
}

D@nger
04.06.2013, 11:02
а пауза при загрузке плагина увеличилось? Раньше быстрее работать начинали кнопки, щас дольше ждать приходится..

Bersenev
04.06.2013, 11:11
а пауза при загрузке плагина увеличилось? Раньше быстрее работать начинали кнопки, щас дольше ждать приходится..

Нет, но в плагине есть возможность регулировать её. Для этого в iCarDSConfig -- Global Vars добавляем переменную

duino_resume_timer=20000

которая задаёт время задержки в миллисекундах, понижаем его до тех пор пока работа плагина при выходе из сна стабильна.

AlexIz
04.06.2013, 21:10
Пробуй



Не работает. Да, я дезинформировал по поводу входа температурных датчиков. Они на D4 подключены. В скетче я поправил.

Bersenev
04.06.2013, 22:19
Не работает. Да, я дезинформировал по поводу входа температурных датчиков. Они на D4 подключены. В скетче я поправил.

Честно говоря я выложил код не проверив его, просто не на чем было. Все ардуино стоят в компах. Но сейчас залил этот скетч в комп от 21-й волги, так он сразу запустился, без каких либо проблем и резистивные кнопки и температурные датчики, все четыре штуки.

Давай попробуем так, найди в скетче эти строки

if( is_temperature_sensors ) temperature_sensors(); // температурные датчики
if( is_res_keys ) res_keys(); // резестивные кнопки

и замени на эти

temperature_sensors(); // температурные датчики
res_keys(); // резестивные кнопки

AlexIz
04.06.2013, 22:47
УРА!!!! Заработало!!!! СПАСИБО!!!

Bersenev
04.06.2013, 22:53
УРА!!!! Заработало!!!! СПАСИБО!!!

Да это не очень хорошо, должен работать первый вариант скетча, с этим скорее всего будут проблемы при выходе из сна

В файле duino.ini эти переменные какие значения имеют?

duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1

AlexIz
04.06.2013, 23:10
duino_is_ir_key=1
duino_is_encoder_1=1
duino_is_encoder_2=1
duino_is_res_keys=1

Как я понимаю, надо
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1

А в чем разница в скетчах? Почему первый не работает?

Bersenev
04.06.2013, 23:20
Как я понимаю, надо
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1


Да, в твоём варианте

А в чем разница в скетчах? Почему первый не работает?

Первый скетч ждёт от плагина команды на включение функций опроса резистивных кнопок и термодатчиков, а второй просто сразу опрашивает, но это иногда приводит к сбоям, если плагин ещё не готов принимать эти данные.

А вот почему у тебя не происходит включение этих функций я пока не знаю.

AlexIz
04.06.2013, 23:24
:sad2:

AlexIz
06.06.2013, 09:09
Слушай, а почему у меня на разных компах с разными контроллерами скетч ведёт себя одинаково? Может есть какой отладчик?

Bersenev
06.06.2013, 14:04
Слушай, а почему у меня на разных компах с разными контроллерами скетч ведёт себя одинаково?

У меня тоже ведёт себя на всех компах одинаково, то есть везде работает. Так что не знаю, что именно у тебя мешает нормальной работе, возможно звёзды:smile1:.

Может есть какой отладчик?

Отладчик для скина есть, но в данном варианте он наверно не поможет. Для начала надо определить где проблема в скетче или в плагине, а для этого желательно поставить какой нибудь монитор com порта и записать лог общения плагина с ардуино, тогда станет ясно где искать проблему в скетче или в плагине.

AlexIz
07.06.2013, 22:38
поставить какой нибудь монитор com порта

Что-то я не нашел ничего подходящего. То с виртуальным портом не работает, то денег просит...

AlexIz
08.06.2013, 15:41
Какие-то чудеса... Похоже скетч заработал и полный и усечённый... Ничего не делал, просто подоткнул ардуину для снятия лога с com порта, а она испугалась и заработала. Восстановил отключенные строчки из сообщения 461. Работает. Отправляю лог. Один температурный датчик и одна кнопка.

AlexIz
09.06.2013, 13:24
CarDuino периодически не запускается. Приходится передёргивать. Не знаю как отследить это. Использую PortMon. C ним тоже какая-то беда - периодически пишет, типа, не могу подключить порт, потому, что он используется. Странно, ведь это как раз и надо...
Да, спящий режим не использую. Всегда отключаю питание компа.

AlexIz
09.06.2013, 14:20
Ещё обнаружил. При попытке уйти в сон или в ожидание, получл вот это. 16 порт - кардуино.

OsDima
09.06.2013, 17:26
CarDuino периодически не запускается. Приходится передёргивать. Не знаю как отследить это. Использую PortMon. C ним тоже какая-то беда - периодически пишет, типа, не могу подключить порт, потому, что он используется. Странно, ведь это как раз и надо...
Да, спящий режим не использую. Всегда отключаю питание компа.

Ответ нашел такой: Chip писал на другом форуме.
_______________________
У китайских плат Arduino Nano V3 есть ошибка в разводке, на форуме это не однократно обсуждалось
Нога "Test" контроллера FTDI висит в воздухе, а должна быть подтянута к земле

Капнул между 25 и 26 ногой FTDI, заработало как часики. (столько времени потерял в поисках истины)


может поможет, а комбинация со вторым симптомом - похоже что дрова глючные.

AlexIz
09.06.2013, 20:02
OK, посмотрю.

AlexIz
09.06.2013, 21:29
Ответ нашел такой: Chip писал на другом форуме.
_______________________
У китайских плат Arduino Nano V3 есть ошибка в разводке, на форуме это не однократно обсуждалось
Нога "Test" контроллера FTDI висит в воздухе, а должна быть подтянута к земле



Нет, не мой вариант. Test сидит на корпусе. Новые драйверы помогли.

напор
03.07.2013, 18:50
Возникла проблема, и не знаю куда копать.
установлена айкар и joystick. настраиваю как в шапке написано. когда в айкаре пытаюсь прописать кнопки создается впечатление, что залипла одна из кнопок на руле. то есть на какую бы кнопку не нажал, вновь нажатая кнопка появляется в списке, но выделение строчки опять перескакивает на ту кнопку, которая какбы залипла. когда выхожу из настроек в оболочку происходит залипание той функции, которая была назначена на эту кнопку(например уменьшение громкости чтобы я ни делал)
Когда подключил родную музыку такого эффекта нет. всё нормально.
Подскажите, может кто сталкивался или мысли есть какие на эту тему?

И второй вопрос как очистить список кодов кнопок в аикаре?

AlexIz
03.07.2013, 21:10
Возникла проблема, и не знаю куда копать.
установлена айкар и joystick. настраиваю как в шапке написано. когда в айкаре пытаюсь прописать кнопки создается впечатление, что залипла одна из кнопок на руле. то есть на какую бы кнопку не нажал, вновь нажатая кнопка появляется в списке, но выделение строчки опять перескакивает на ту кнопку, которая какбы залипла. когда выхожу из настроек в оболочку происходит залипание той функции, которая была назначена на эту кнопку(например уменьшение громкости чтобы я ни делал)
Когда подключил родную музыку такого эффекта нет. всё нормально.
Подскажите, может кто сталкивался или мысли есть какие на эту тему?

И второй вопрос как очистить список кодов кнопок в аикаре?

А под joystick что понимается?

напор
04.07.2013, 00:19
http://carmonitor.ru/ru/joystick-p-104.html?osCsid=0651191fda86c03cb87eaee553995f77

admin
04.07.2013, 00:41
Возникла проблема, и не знаю куда копать.
установлена айкар и joystick. настраиваю как в шапке написано. когда в айкаре пытаюсь прописать кнопки создается впечатление, что залипла одна из кнопок на руле. то есть на какую бы кнопку не нажал, вновь нажатая кнопка появляется в списке, но выделение строчки опять перескакивает на ту кнопку, которая какбы залипла. когда выхожу из настроек в оболочку происходит залипание той функции, которая была назначена на эту кнопку(например уменьшение громкости чтобы я ни делал)
Когда подключил родную музыку такого эффекта нет. всё нормально.
Подскажите, может кто сталкивался или мысли есть какие на эту тему?

И второй вопрос как очистить список кодов кнопок в аикаре?

Возможно что Вы настроили на кодовое значение которое считывается при отпущенных кнопках

AlexIz
04.07.2013, 08:52
А кнопки обычные резистивные?

напор
04.07.2013, 10:22
Кнопки резистивные.

admin.
Если можно, по подробнее.
Я ничего не успел настроить, но по признакам очень похоже на кодовое значение которое считывается при отпущенных кнопках.
В каких настройках указывается фоновое значение? Так сказать значение покоя.

admin
04.07.2013, 10:41
Фоновое значение нужно удалить из конфига

Bersenev
04.07.2013, 11:03
Возникла проблема, и не знаю куда копать.
установлена айкар и joystick. настраиваю как в шапке написано. когда в айкаре пытаюсь прописать кнопки создается впечатление, что залипла одна из кнопок на руле. то есть на какую бы кнопку не нажал, вновь нажатая кнопка появляется в списке, но выделение строчки опять перескакивает на ту кнопку, которая какбы залипла. когда выхожу из настроек в оболочку происходит залипание той функции, которая была назначена на эту кнопку(например уменьшение громкости чтобы я ни делал)

Какой скетч загружен в ардуино? Если из шапки этой темы, то какой именно код выдаётся при залипании и к какому пину подключены резистивные кнопки?

Когда подключил родную музыку такого эффекта нет. всё нормально.


Что значит "родную музыку"?

напор
04.07.2013, 11:23
аппарат не под рукой. позже посмотрю подробности
admin.
где лежит конфиг?

Bersenev
У меня не ардуино, а JoyStick сделаный как я понял на базе ардуино.
Поэтому ни какого скетча не заливал. На сколько я понял это готовый продукт в который можно ничего не заливать, так как там уже что-то залито. Да и в шапке нет указаний на необходимость заливки, если нужны только кнопки, а не температура.
К какому пину что подключено не видно, т.к. всё закрыто термоусадочной трубкой. А из неё выходят 2 проводка: + и -.
какой именно код выдаётся при залипании смогу посмотреть чуть позже. Если на память, то в коде много буков F

Под родной музыкой я подразумеваю штатную магнитолу

напор
04.07.2013, 11:31
код при залипании duino_FEFEFEFE

OsDima
04.07.2013, 12:20
Ограничения на количество температурных датчиков есть? Насколь-ко понял в скейтче нет. Вероятно опять глючный датчик попался. 2-ой из 5-ти.

Bersenev
04.07.2013, 15:04
Bersenev
У меня не ардуино, а JoyStick сделаный как я понял на базе ардуино.
Поэтому ни какого скетча не заливал. На сколько я понял это готовый продукт в который можно ничего не заливать, так как там уже что-то залито. Да и в шапке нет указаний на необходимость заливки, если нужны только кнопки, а не температура.
К какому пину что подключено не видно, т.к. всё закрыто термоусадочной трубкой. А из неё выходят 2 проводка: + и -.


код при залипании duino_FEFEFEFE

Вот теперь ситуация ясная. Но немного безрадостная для тебя.

Судя по всему у тебя залит один из этих скетчей http://compcar.ru/forum/showthread.php?t=4640 , данные скетчи передают по два байта, а раньше в этой теме были скетчи, которые передавали по 4 байта. Именно под них и был написан плагин iCarDuino. Кроме того старые скетчи не передавали ничего, когда не нажата ни одна кнопка. А эти если ничего не нажата передают байты FEFE.

Так что единственное решение на данный момент, это залить скетч из шапки в ардуино или исправить скетчи отсюда http://compcar.ru/forum/showthread.php?t=4640 , под передачу четырёх байтов

Bersenev
04.07.2013, 15:11
Ограничения на количество температурных датчиков есть? Насколь-ко понял в скейтче нет. Вероятно опять глючный датчик попался. 2-ой из 5-ти.

Попробуй использовать вот такую функцию обработки температурных датчиков. Та что в шапке сейчас иногда глючит, так что возможно причина не в датчиках



//-----------------------------------------
//- Переменные для температурных датчиков -
//-----------------------------------------
OneWire ds(WIRE_PIN);
byte addr[8];
byte data[12];
unsigned long temperature_sensors_milles;
unsigned long temperature_sensors_wait_milles = 1000; // Интервал передачи данных от температурных датчиков
int t_status = 0;


void temperature_sensors()
{
if(t_status == 0)
{

if (!ds.search(addr))
{ // поиск нового датчика
ds.reset_search(); // если не нашли, сбрасываем поиск в начало
return; // и выходим
}

// Часть кода, которая ниже, выполняется только если
// найден новый датчик, с которым ещё не работали в
// главном цикле до сброса поиска

if (OneWire::crc8( addr, 7) != addr[7]) // Проверка CRC
{
return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
}

if (addr[0] != 0x28) // Проверка того, что найденное устройство - температурный датчик DS18B20
{
return; // Если не он, то опять в начало главного цикла на продолжение поиска
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);

t_status = 1;
}
else
{
if( temperature_sensors_milles + temperature_sensors_wait_milles < millis() )
{
temperature_sensors_milles = millis();

byte i;

ds.reset();
ds.select(addr);
ds.write(0xBE);

for ( i = 0; i < 9; i++) // получаем данные с датчика
{
data[i] = ds.read();
}
bytes[0] = 0xFF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xFFFFFFFF - код температурного датчика
Serial.write( addr,8); // отправить 8 байтовый номер температурного датчика
bytes[0] = 0; // отправляем байты содержащие температуру
bytes[1] = 0;
bytes[2] = data[0];
bytes[3] = data[1];
Serial.write( bytes,4); // значение температурного датчика
t_status = 0;
}
}
}

напор
04.07.2013, 16:27
удалено

Bersenev
04.07.2013, 16:43
Подскажите куда надо класть библиотеки IRremote, OneWire

В папку ..\Arduino\libraries\

admin
04.07.2013, 16:55
Вот здесь есть скетч с инструкцией (http://compcar.ru/forum/showthread.php?t=4957&p=87533#post87533)

напор
04.07.2013, 17:03
Куда класть уже разобрался. Спасибо.
Теперь компилятор требует SPI.h
И есть подозрение что ещё потребует eeprom.h
Гугл выдает что-то далекое от моего понимания...


Нашел более свежую версию компилятора с нужными библиотекками по ссылке выше.

Спасибо.

Bersenev
04.07.2013, 17:16
Куда класть уже разобрался. Спасибо.
Теперь компилятор требует SPI.h
И есть подозрение что ещё потребует eeprom.h
Гугл выдает что-то далекое от моего понимания...

Здесь ссылки на все библиотеки

http://arduino.cc/en/Reference/Libraries

напор
04.07.2013, 17:36
Был я там. Но как скачать не понял...

Но уже нашел в другом месте.

напор
08.07.2013, 19:41
Продолжаем. Прошивку из шапки удалось залить. Ещё раз поискал поиском. Поставил все нужные настройки, перепрописал ардуину и т. д.
Теперь кнопки в айкар выдают коды вида АА000503, АА000504 и т.д.
Но все равно происходит зацикливание на АА000503. Открыв настройки первым делом я вижу АА000503, не успев нажать ни одной кнопки.
Нажимаю , она выдает следующий код и выделение возвращается обратно на АА000503. И опять если я назначаю на АА000503 какое либо действие -- оно зацикливается.
При чем одна итаже кнопка может выдавать разные коды
Куда копать дальше?

напор
08.07.2013, 19:44
Вот теперь ситуация ясная. Но немного безрадостная для тебя.

Судя по всему у тебя залит один из этих скетчей http://compcar.ru/forum/showthread.php?t=4640 , данные скетчи передают по два байта, а раньше в этой теме были скетчи, которые передавали по 4 байта. Именно под них и был написан плагин iCarDuino. Кроме того старые скетчи не передавали ничего, когда не нажата ни одна кнопка. А эти если ничего не нажата передают байты FEFE.

Так что единственное решение на данный момент, это залить скетч из шапки в ардуино или исправить скетчи отсюда http://compcar.ru/forum/showthread.php?t=4640 , под передачу четырёх байтов

Если можно, по подробней. Как добиться, чтоб скетчи не передавали ничего, когда не нажата ни одна кнопка

напор
08.07.2013, 20:42
Прописал в duino.ini и в skin.ini
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1

Теперь зацикливания не происходит. Но при открытии настроек в айкар независимо от нажатия кнопок появляется код АА000519. И всё. Если назначить на этот код , допустим, увеличение громкости, то безсистемно происходит однократное увеличение громкости на 5 единиц и больше ни чего не происходит.

Что-то я в тупике. Помогите...

OsDima
09.07.2013, 07:03
После обновления в машине на 33 версию с предыдущей, стали тормозить энкодеры - "как в замедленном кино" крутанул и каждый "шечок" обрабатывается с паузой ~1 сек.
Причем на домашнем ноуте этот контроллер отрабатывает номально. В настройках "кнопок iCarDuino" паузы между шелчками не заметил. Что делать? Не хочется устанавливать на чистую систему - времени мало, собираюсь в Крым на машине. 3-й раз за 3 года, и каждый раз с iCar, уже не могу без него.

Bersenev
09.07.2013, 12:10
Прописал в duino.ini и в skin.ini
duino_is_ir_key=0
duino_is_encoder_1=0
duino_is_encoder_2=0
duino_is_res_keys=1

Теперь зацикливания не происходит. Но при открытии настроек в айкар независимо от нажатия кнопок появляется код АА000519. И всё. Если назначить на этот код , допустим, увеличение громкости, то безсистемно происходит однократное увеличение громкости на 5 единиц и больше ни чего не происходит.

Что-то я в тупике. Помогите...

В строке скетча

#define RES_KEY_FLAG_ 0x76 // Флаг первого запуска скетча

измени значение на другое, допустим 0x77, это переведёт скетч в первоначальное состояние, то есть сбросит ранее запомненные коды клавиш.

Потом желательно точно определить к какому именно пину на ардуино подсоединены резистивные кнопки, к 5-му или 7-му и указать этот номер в строке скетча

int RES_PIN = 5 ; // аналоговый вход(пин) для резестивных(рулевых) кнопок

Дело в том, что если твоё устройство построено на Arduino Nano V5 , то скорее всего у тебя используется 5-й пин, а если Arduino Nano V7, то скорее всего на 7-м.

Ещё желательно знать схему подключения, ты писал что данные кнопки работают с родной музыкой(то есть с магнитолой), так вон случайно кнопки не подключены одновременно и к ардуино и к магнитоле?

Bersenev
09.07.2013, 12:13
После обновления в машине на 33 версию с предыдущей, стали тормозить энкодеры - "как в замедленном кино" крутанул и каждый "шечок" обрабатывается с паузой ~1 сек.
Причем на домашнем ноуте этот контроллер отрабатывает номально. В настройках "кнопок iCarDuino" паузы между шелчками не заметил. Что делать? Не хочется устанавливать на чистую систему - времени мало, собираюсь в Крым на машине. 3-й раз за 3 года, и каждый раз с iCar, уже не могу без него.

Попробуй в настройках скина (3-й экран) --Звуки -- отключить звук при нажатии на кнопку