Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 10.07.2016, 12:09   #26
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,233
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5,690
Поблагодарили 4,004 раз(а) в 1,549 сообщениях
Репутация: репутация неоспорима (4257)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
Конечно можно. Только нужно писать прогу, формирующую DCC пилу на одном из пинов малины. Или даже, это поосто может быть библиоотека для рокрейла на малине(наверное, я не знаю, в че они написаны.).
Мне кажется, что всё уже есть в сети, надо поискать хорошенько.

https://github.com/hsanjuan/dccpi
https://github.com/brianwiddas/gpiodcc
__________________
HO, цифра, OpenDCC, S-88N
С приветом из подземки!!!
http://www.dccwiki.ru/
laba вне форума   Вверх
3 пользователя(ей) сказали cпасибо:
Старый 11.07.2016, 06:42   #27
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
https://github.com/hsanjuan/dccpi
https://github.com/brianwiddas/gpiodcc

Обе очень сильно обрезанные и сырые. Вторая работает с JMRI, первая вообще ни с чем. Даже нет защиты от КЗ.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 11.07.2016, 11:40   #28
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,233
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5,690
Поблагодарили 4,004 раз(а) в 1,549 сообщениях
Репутация: репутация неоспорима (4257)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
Обе очень сильно обрезанные и сырые.
оффтопик
__________________
HO, цифра, OpenDCC, S-88N
С приветом из подземки!!!
http://www.dccwiki.ru/
laba вне форума   Вверх
Пользователь сказал cпасибо:
Старый 11.07.2016, 12:13   #29
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

А я и не говорил, что Вы говорили. )
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 11.07.2016, 16:24   #30
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Ну и на закуску.

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

Но, посредством вот такой штуки можно сделать серийное соединение с компьтером беспроводным:


Ссылка на то, как с этим работать!

Купить можно на banggood 5$ за модуль.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
5 пользователя(ей) сказали cпасибо:
Старый 12.07.2016, 10:01   #31
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Попробовал программировать локи - красота! Сивишки читает, пишет, на програмном треке. Програмирет на POM без проблем.

Короче, как программатор - маст хэв.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
5 пользователя(ей) сказали cпасибо:
Старый 12.07.2016, 18:21   #32
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 75
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 147
Поблагодарили 95 раз(а) в 45 сообщениях
Репутация: скоро придёт к известности (95)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
Попробовал программировать локи - красота! Сивишки читает, пишет, на програмном треке. Програмирет на POM без проблем.

Короче, как программатор - маст хэв.
Скажите какой "motor shield" вы подключали при чтении CV?
Мне просто интересно, будет ли этот функционал работать на драйверах 5 или 43 ампера.

Хочу добавить для тех кто решит попробовать dcc++ станцию. Ищите "motor shield" именно с "обратной связью", как в примерах. Просто существует множество китайских клонов где она отсутствует для удешевления платы. В лучшем случает вы останетесь без чтения CV и защиты от перегрузки, в худшем придется доставать паяльник...
Qvan22 вне форума   Вверх
Старый 12.07.2016, 19:20   #33
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Для чтения- как в примере и в видео. Он читает с програмного трека.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 12.07.2016, 20:39   #34
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,207
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 282
Поблагодарили 1,228 раз(а) в 684 сообщениях
Репутация: этим человеком можно гордиться (1228)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Скажите какой "motor shield" вы подключали при чтении CV?
Родной Итальянский. https://www.arduino.cc/en/Main/ArduinoMotorShieldR3

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Ищите "motor shield" именно с "обратной связью", как в примерах.
Абсолютно верно. Смотрим в районе 2 и 19 ноги резисторы.
У клонов эти ноги "сидят на земле" т.е. соеденены с ногами 1 и 20 соответственно.
Цитата:
Сообщение от Qvan22 Посмотреть сообщение
в худшем придется доставать паяльник...
Там ещё и усилители. Т.ч. паять много придётся.
схема
Alexmit вне форума   Вверх
4 пользователя(ей) сказали cпасибо:
Старый 12.07.2016, 21:35   #35
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,233
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5,690
Поблагодарили 4,004 раз(а) в 1,549 сообщениях
Репутация: репутация неоспорима (4257)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Мне просто интересно, будет ли этот функционал работать на драйверах 5 или 43 ампера.
Вот здесь товарищ экспериментировал с разными мотор-шилдами.
__________________
HO, цифра, OpenDCC, S-88N
С приветом из подземки!!!
http://www.dccwiki.ru/
laba вне форума   Вверх
Пользователь сказал cпасибо:
Старый 13.07.2016, 00:40   #36
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Просто существует множество китайских клонов где она отсутствует для удешевления платы.
Ищем с надписью current sense.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 15.07.2016, 08:55   #37
Yashcher
Заглянувший
 
Аватар для Yashcher
 
Регистрация: 10.09.2010
Адрес: Кострома
Сообщений: 7
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 8
Поблагодарили 1 раз в 1 сообщении
Репутация: пока неопределено (1)
По умолчанию

При проверке выдаёт
Arduino: 1.6.6 (Windows XP), Плата:"Arduino/Genuino Uno"

avr-g++: error: missing filename after '-o'

exit status 1
Ошибка компиляции.

Чего то не хватает? У кого такое было?
Yashcher вне форума   Вверх
Старый 15.07.2016, 10:28   #38
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 75
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 147
Поблагодарили 95 раз(а) в 45 сообщениях
Репутация: скоро придёт к известности (95)
По умолчанию

Цитата:
Сообщение от Yashcher Посмотреть сообщение
При проверке выдаёт
Arduino: 1.6.6 (Windows XP), Плата:"Arduino/Genuino Uno"

avr-g++: error: missing filename after '-o'

exit status 1
Ошибка компиляции.

Чего то не хватает? У кого такое было?
На буржуинских форумах советуют поменять версию IDE.
Скрытый текст
The problem is caused by using Arduino AVR Boards 1.6.10 with Arduino IDE 1.6.6, they are incompatible. The solution is to either:

-Use Arduino IDE 1.6.7 or 1.6.8.
-Install Arduino AVR Boards 1.6.8(due to a bug you can't go back to using 1.6.9) by: Tools > Board > Boards Manager... > Arduino AVR Boards(click on it) > Select version > 1.6.8 > Install. After this you will continue to get updatable notifications about the more recent Arduino AVR Boards version so you might want to File > Preferences > Check for updates on startup(uncheck) to disable this notification.
http://github.com/arduino/Arduino/issues/4721


У меня 1.6.5 и для этого проекта приходиться переподключать библиотеки в главном окне для обхода ошибки:
Accessories.cpp:66:20: fatal error: EEPROM.h: No such file or directory
Qvan22 вне форума   Вверх
Пользователь сказал cпасибо:
Старый 29.07.2016, 11:00   #39
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Купил шилды на ебее. Пришли, потестил - работают. Чувство силы тока есть.

Вот эти. 4,92$ с бесплатной доставкой.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Пользователь сказал cпасибо:
Старый 07.08.2016, 23:56   #40
YMOR2012
Заглянувший
 
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 62 раз(а) в 16 сообщениях
Репутация: скоро придёт к известности (62)
По умолчанию

Перестал гореть диод на последнем контакте программного трека.
Прогу перезаливал, ардуинку IDE (v 1.6.9) переустанавливал -результата нет .
Основной трек работает нормально. Что то сгорело или глюк в софте кто знает?
YMOR2012 вне форума   Вверх
Старый 08.08.2016, 06:55   #41
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

У меня эпизодически перестает гореть тоже. Нажимаю ресет на плате- загорается. Что за фигня-хз.

Но это только почемуто в связке с рокрейлом. Если включать изпод терминала IDE, все горит.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 08.08.2016, 12:57   #42
YMOR2012
Заглянувший
 
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 62 раз(а) в 16 сообщениях
Репутация: скоро придёт к известности (62)
По умолчанию

Кто знаком с Си -пример кода плиз как включить этот диод?
И если кто знает пример кода как управлять локами.
YMOR2012 вне форума   Вверх
Старый 08.08.2016, 14:30   #43
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Цитата:
Сообщение от YMOR2012 Посмотреть сообщение
Кто знаком с Си -пример кода плиз как включить этот диод?
Если диод не горит, то на разъеме 4 нету шима, а просто земля. Либо не пропай => попробуйте погнуть слегка плату.

У меня работает, если перезапустить командами <0>, <1> из окна терминала серийного порта.


Цитата:
Сообщение от YMOR2012 Посмотреть сообщение
И если кто знает пример кода как управлять локами.
В файле SerialCommand.cpp в папке скетча есть детальное описание команд:
Скрытый текст


PHP код:
void SerialCommand::parse(char *com){
  
  switch(
com[0]){

/***** SET ENGINE THROTTLES USING 128-STEP SPEED CONTROL ****/    

    
case 't':       // [B]<t REGISTER CAB SPEED DIRECTION>
/*
 *    sets the throttle for a given register/cab combination 
 *    
 *    REGISTER: an internal register number, from 1 through MAX_MAIN_REGISTERS (inclusive), to store the DCC packet used to control this throttle setting
 *    CAB:  the short (1-127) or long (128-10293) address of the engine decoder
 *    SPEED: throttle speed from 0-126, or -1 for emergency stop (resets SPEED to 0)
 *    DIRECTION: 1=forward, 0=reverse.  Setting direction when speed=0 or speed=-1 only effects directionality of cab lighting for a stopped train[/B]
 *    
 *    returns: <T REGISTER SPEED DIRECTION>
 *    
 */
      
mRegs->setThrottle(com+1);
      break;

/***** OPERATE ENGINE DECODER FUNCTIONS F0-F28 ****/    

    
case 'f':       // [B]<f CAB BYTE1 [BYTE2]>
/*
 *    turns on and off engine decoder functions F0-F28 (F0 is sometimes called FL)  
 *    NOTE: setting requests transmitted directly to mobile engine decoder --- current state of engine functions is not stored by this program
 *    
 *    CAB:  the short (1-127) or long (128-10293) address of the engine decoder
 *    
 *    To set functions F0-F4 on (=1) or off (=0):
 *      
 *    BYTE1:  128 + F1*1 + F2*2 + F3*4 + F4*8 + F0*16
 *    BYTE2:  omitted
 *   
 *    To set functions F5-F8 on (=1) or off (=0):
 *   
 *    BYTE1:  176 + F5*1 + F6*2 + F7*4 + F8*8
 *    BYTE2:  omitted
 *   
 *    To set functions F9-F12 on (=1) or off (=0):
 *   
 *    BYTE1:  160 + F9*1 +F10*2 + F11*4 + F12*8
 *    BYTE2:  omitted
 *   
 *    To set functions F13-F20 on (=1) or off (=0):
 *   
 *    BYTE1: 222 
 *    BYTE2: F13*1 + F14*2 + F15*4 + F16*8 + F17*16 + F18*32 + F19*64 + F20*128
 *   
 *    To set functions F21-F28 on (=1) of off (=0):
 *   
 *    BYTE1: 223
 *    BYTE2: F21*1 + F22*2 + F23*4 + F24*8 + F25*16 + F26*32 + F27*64 + F28*128
 *   
 *    returns: NONE
 * 
 */
[/B]
      
mRegs->setFunction(com+1);
      break;
      
/***** OPERATE STATIONARY ACCESSORY DECODERS  ****/    

    
case 'a':       // <a ADDRESS SUBADDRESS ACTIVATE>
/*
 *    turns an accessory (stationary) decoder on or off
 *    
 *    ADDRESS:  the primary address of the decoder (0-511)
 *    SUBADDRESS: the subaddress of the decoder (0-3)
 *    ACTIVATE: 1=on (set), 0=off (clear)
 *    
 *    Note that many decoders and controllers combine the ADDRESS and SUBADDRESS into a single number, N,
 *    from  1 through a max of 2044, where
 *    
 *    N = (ADDRESS - 1) * 4 + SUBADDRESS + 1, for all ADDRESS>0
 *    
 *    OR
 *    
 *    ADDRESS = INT((N - 1) / 4) + 1
 *    SUBADDRESS = (N - 1) % 4
 *    
 *    returns: NONE
 */
      
mRegs->setAccessory(com+1);
      break;

/***** CREATE/EDIT/REMOVE/SHOW & OPERATE A TURN-OUT  ****/    

    
case 'T':       // <T ID THROW>
/*
 *   <T ID THROW>:                sets turnout ID to either the "thrown" or "unthrown" position
 *   
 *   ID: the numeric ID (0-32767) of the turnout to control
 *   THROW: 0 (unthrown) or 1 (thrown)
 *   
 *   returns: <H ID THROW> or <X> if turnout ID does not exist
 *   
 *   *** SEE ACCESSORIES.CPP FOR COMPLETE INFO ON THE DIFFERENT VARIATIONS OF THE "T" COMMAND
 *   USED TO CREATE/EDIT/REMOVE/SHOW TURNOUT DEFINITIONS
 */
      
Turnout::parse(com+1);
      break;

/***** CREATE/EDIT/REMOVE/SHOW & OPERATE AN OUTPUT PIN  ****/    

    
case 'Z':       // <Z ID ACTIVATE>
/*
 *   <Z ID ACTIVATE>:          sets output ID to either the "active" or "inactive" state
 *   
 *   ID: the numeric ID (0-32767) of the output to control
 *   ACTIVATE: 0 (active) or 1 (inactive)
 *   
 *   returns: <Y ID ACTIVATE> or <X> if output ID does not exist
 *   
 *   *** SEE OUTPUTS.CPP FOR COMPLETE INFO ON THE DIFFERENT VARIATIONS OF THE "O" COMMAND
 *   USED TO CREATE/EDIT/REMOVE/SHOW TURNOUT DEFINITIONS
 */
      
Output::parse(com+1);
      break;
      
/***** CREATE/EDIT/REMOVE/SHOW A SENSOR  ****/    

    
case 'S'
/*   
 *   *** SEE SENSOR.CPP FOR COMPLETE INFO ON THE DIFFERENT VARIATIONS OF THE "S" COMMAND
 *   USED TO CREATE/EDIT/REMOVE/SHOW SENSOR DEFINITIONS
 */
      
Sensor::parse(com+1);
      break;

/***** SHOW STATUS OF ALL SENSORS ****/

    
case 'Q':         // <Q>
/*
 *    returns: the status of each sensor ID in the form <Q ID> (active) or <q ID> (not active)
 */
      
Sensor::status();
      break;

/***** WRITE CONFIGURATION VARIABLE BYTE TO ENGINE DECODER ON MAIN OPERATIONS TRACK  ****/    

    
case 'w':      // <w CAB CV VALUE>
/*
 *    writes, without any verification, a Configuration Variable to the decoder of an engine on the main operations track
 *    
 *    CAB:  the short (1-127) or long (128-10293) address of the engine decoder 
 *    CV: the number of the Configuration Variable memory location in the decoder to write to (1-1024)
 *    VALUE: the value to be written to the Configuration Variable memory location (0-255)
 *    
 *    returns: NONE
*/    
      
mRegs->writeCVByteMain(com+1);
      break;      

/***** WRITE CONFIGURATION VARIABLE BIT TO ENGINE DECODER ON MAIN OPERATIONS TRACK  ****/    

    
case 'b':      // <b CAB CV BIT VALUE>
/*
 *    writes, without any verification, a single bit within a Configuration Variable to the decoder of an engine on the main operations track
 *    
 *    CAB:  the short (1-127) or long (128-10293) address of the engine decoder 
 *    CV: the number of the Configuration Variable memory location in the decoder to write to (1-1024)
 *    BIT: the bit number of the Configurarion Variable regsiter to write (0-7)
 *    VALUE: the value of the bit to be written (0-1)
 *    
 *    returns: NONE
*/        
      
mRegs->writeCVBitMain(com+1);
      break;      

/***** WRITE CONFIGURATION VARIABLE BYTE TO ENGINE DECODER ON PROGRAMMING TRACK  ****/    

    
case 'W':      // <W CV VALUE CALLBACKNUM CALLBACKSUB>
/*
 *    writes, and then verifies, a Configuration Variable to the decoder of an engine on the programming track
 *    
 *    CV: the number of the Configuration Variable memory location in the decoder to write to (1-1024)
 *    VALUE: the value to be written to the Configuration Variable memory location (0-255) 
 *    CALLBACKNUM: an arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function
 *    CALLBACKSUB: a second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function
 *    
 *    returns: <r CALLBACKNUM|CALLBACKSUB|CV Value)
 *    where VALUE is a number from 0-255 as read from the requested CV, or -1 if verificaiton read fails
*/    
      
pRegs->writeCVByte(com+1);
      break;      

/***** WRITE CONFIGURATION VARIABLE BIT TO ENGINE DECODER ON PROGRAMMING TRACK  ****/    

    
case 'B':      // <B CV BIT VALUE CALLBACKNUM CALLBACKSUB>
/*
 *    writes, and then verifies, a single bit within a Configuration Variable to the decoder of an engine on the programming track
 *    
 *    CV: the number of the Configuration Variable memory location in the decoder to write to (1-1024)
 *    BIT: the bit number of the Configurarion Variable memory location to write (0-7)
 *    VALUE: the value of the bit to be written (0-1)
 *    CALLBACKNUM: an arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function
 *    CALLBACKSUB: a second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function
 *    
 *    returns: <r CALLBACKNUM|CALLBACKSUB|CV BIT VALUE)
 *    where VALUE is a number from 0-1 as read from the requested CV bit, or -1 if verificaiton read fails
*/    
      
pRegs->writeCVBit(com+1);
      break;      

/***** READ CONFIGURATION VARIABLE BYTE FROM ENGINE DECODER ON PROGRAMMING TRACK  ****/    

    
case 'R':     // <R CV CALLBACKNUM CALLBACKSUB>
/*    
 *    reads a Configuration Variable from the decoder of an engine on the programming track
 *    
 *    CV: the number of the Configuration Variable memory location in the decoder to read from (1-1024)
 *    CALLBACKNUM: an arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function
 *    CALLBACKSUB: a second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function
 *    
 *    returns: <r CALLBACKNUM|CALLBACKSUB|CV VALUE)
 *    where VALUE is a number from 0-255 as read from the requested CV, or -1 if read could not be verified
*/    
      
pRegs->readCV(com+1);
      break;

/***** TURN ON POWER FROM MOTOR SHIELD TO TRACKS  ****/    

    
case '1':      // <1>
/*   
 *    enables power from the motor shield to the main operations and programming tracks
 *    
 *    returns: <p1>
 */    
     
digitalWrite(SIGNAL_ENABLE_PIN_PROG,HIGH);
     
digitalWrite(SIGNAL_ENABLE_PIN_MAIN,HIGH);
     INTERFACE.print(
"<p1>");
     break;
          
/***** TURN OFF POWER FROM MOTOR SHIELD TO TRACKS  ****/    

    
case '0':     // <0>
/*   
 *    disables power from the motor shield to the main operations and programming tracks
 *    
 *    returns: <p0>
 */
     
digitalWrite(SIGNAL_ENABLE_PIN_PROG,LOW);
     
digitalWrite(SIGNAL_ENABLE_PIN_MAIN,LOW);
     INTERFACE.print(
"<p0>");
     break;

/***** READ MAIN OPERATIONS TRACK CURRENT  ****/    

    
case 'c':     // <c>
/*
 *    reads current being drawn on main operations track
 *    
 *    returns: <a CURRENT> 
 *    where CURRENT = 0-1024, based on exponentially-smoothed weighting scheme
 */
      
INTERFACE.print("<a");
      INTERFACE.print(
int(mMonitor->current));
      INTERFACE.print(
">");
      break;

/***** READ STATUS OF DCC++ BASE STATION  ****/    

    
case 's':      // <s>
/*
 *    returns status messages containing track power status, throttle status, turn-out status, and a version number
 *    NOTE: this is very useful as a first command for an interface to send to this sketch in order to verify connectivity and update any GUI to reflect actual throttle and turn-out settings
 *    
 *    returns: series of status messages that can be read by an interface to determine status of DCC++ Base Station and important settings
 */
      
if(digitalRead(SIGNAL_ENABLE_PIN_PROG)==LOW)      // could check either PROG or MAIN
        
INTERFACE.print("<p0>");
      else
        INTERFACE.print(
"<p1>");

      for(
int i=1;i<=MAX_MAIN_REGISTERS;i++){
        if(
mRegs->speedTable[i]==0)
          continue;
        INTERFACE.print(
"<T");
        INTERFACE.print(
i); INTERFACE.print(" ");
        if(
mRegs->speedTable[i]>0){
          INTERFACE.print(
mRegs->speedTable[i]);
          INTERFACE.print(
" 1>");
        } else{
          INTERFACE.print(-
mRegs->speedTable[i]);
          INTERFACE.print(
" 0>");
        }          
      }
      INTERFACE.print(
"<iDCC++ BASE STATION FOR ARDUINO ");
      INTERFACE.print(
ARDUINO_TYPE);
      INTERFACE.print(
" / ");
      INTERFACE.print(
MOTOR_SHIELD_NAME);
      INTERFACE.print(
": V-");
      INTERFACE.print(
VERSION);
      INTERFACE.print(
" / ");
      INTERFACE.print(
__DATE__);
      INTERFACE.print(
" ");
      INTERFACE.print(
__TIME__);
      INTERFACE.print(
">");

      INTERFACE.print(
"<N");
      INTERFACE.print(
COMM_TYPE);
      INTERFACE.print(
": ");

      
#if COMM_TYPE == 0
        
INTERFACE.print("SERIAL>");
      
#elif COMM_TYPE == 1
        
INTERFACE.print(Ethernet.localIP());
        INTERFACE.print(
">");
      
#endif
      
      
Turnout::show();
      
Output::show();
                        
      break;

/***** STORE SETTINGS IN EEPROM  ****/    

    
case 'E':     // <E>
/*
 *    stores settings for turnouts and sensors EEPROM
 *    
 *    returns: <e nTurnouts nSensors>
*/
     
    
EEStore::store();
    INTERFACE.print(
"<e ");
    INTERFACE.print(
EEStore::eeStore->data.nTurnouts);
    INTERFACE.print(
" ");
    INTERFACE.print(
EEStore::eeStore->data.nSensors);
    INTERFACE.print(
" ");
    INTERFACE.print(
EEStore::eeStore->data.nOutputs);
    INTERFACE.print(
">");
    break;
    
/***** CLEAR SETTINGS IN EEPROM  ****/    

    
case 'e':     // <e>
/*
 *    clears settings for Turnouts in EEPROM
 *    
 *    returns: <O>
*/
     
    
EEStore::clear();
    INTERFACE.print(
"<O>");
    break;

/***** PRINT CARRIAGE RETURN IN SERIAL MONITOR WINDOW  ****/    
                
    
case ' ':     // < >                
/*
 *    simply prints a carriage return - useful when interacting with Ardiuno through serial monitor window
 *    
 *    returns: a carriage return
*/
      
INTERFACE.println("");
      break;  

///          
/// THE FOLLOWING COMMANDS ARE NOT NEEDED FOR NORMAL OPERATIONS AND ARE ONLY USED FOR TESTING AND DEBUGGING PURPOSES
/// PLEASE SEE SPECIFIC WARNINGS IN EACH COMMAND BELOW
///

/***** ENTER DIAGNOSTIC MODE  ****/    

    
case 'D':       // <D>  
/*
 *    changes the clock speed of the chip and the pre-scaler for the timers so that you can visually see the DCC signals flickering with an LED
 *    SERIAL COMMUNICAITON WILL BE INTERUPTED ONCE THIS COMMAND IS ISSUED - MUST RESET BOARD OR RE-OPEN SERIAL WINDOW TO RE-ESTABLISH COMMS
 */

    
Serial.println("\nEntering Diagnostic Mode...");
    
delay(1000);
    
    
bitClear(TCCR1B,CS12);    // set Timer 1 prescale=8 - SLOWS NORMAL SPEED BY FACTOR OF 8
    
bitSet(TCCR1B,CS11);
    
bitClear(TCCR1B,CS10);

    
#ifdef ARDUINO_AVR_UNO      // Configuration for UNO

      
bitSet(TCCR0B,CS02);    // set Timer 0 prescale=256 - SLOWS NORMAL SPEED BY A FACTOR OF 4
      
bitClear(TCCR0B,CS01);
      
bitClear(TCCR0B,CS00);
      
    
#else                     // Configuration for MEGA

      
bitClear(TCCR3B,CS32);    // set Timer 3 prescale=8 - SLOWS NORMAL SPEED BY A FACTOR OF 8
      
bitSet(TCCR3B,CS31);
      
bitClear(TCCR3B,CS30);

    
#endif

    
CLKPR=0x80;           // THIS SLOWS DOWN SYSYEM CLOCK BY FACTOR OF 256
    
CLKPR=0x08;           // BOARD MUST BE RESET TO RESUME NORMAL OPERATIONS

    
break;

/***** WRITE A DCC PACKET TO ONE OF THE REGSITERS DRIVING THE MAIN OPERATIONS TRACK  ****/    
      
    
case 'M':       // <M REGISTER BYTE1 BYTE2 [BYTE3] [BYTE4] [BYTE5]>
/*
 *   writes a DCC packet of two, three, four, or five hexidecimal bytes to a register driving the main operations track
 *   FOR DEBUGGING AND TESTING PURPOSES ONLY.  DO NOT USE UNLESS YOU KNOW HOW TO CONSTRUCT NMRA DCC PACKETS - YOU CAN INADVERTENTLY RE-PROGRAM YOUR ENGINE DECODER
 *   
 *    REGISTER: an internal register number, from 0 through MAX_MAIN_REGISTERS (inclusive), to write (if REGISTER=0) or write and store (if REGISTER>0) the packet 
 *    BYTE1:  first hexidecimal byte in the packet
 *    BYTE2:  second hexidecimal byte in the packet
 *    BYTE3:  optional third hexidecimal byte in the packet
 *    BYTE4:  optional fourth hexidecimal byte in the packet
 *    BYTE5:  optional fifth hexidecimal byte in the packet
 *   
 *    returns: NONE   
 */
      
mRegs->writeTextPacket(com+1);
      break;

/***** WRITE A DCC PACKET TO ONE OF THE REGSITERS DRIVING THE MAIN OPERATIONS TRACK  ****/    

    
case 'P':       // <P REGISTER BYTE1 BYTE2 [BYTE3] [BYTE4] [BYTE5]>
/*
 *   writes a DCC packet of two, three, four, or five hexidecimal bytes to a register driving the programming track
 *   FOR DEBUGGING AND TESTING PURPOSES ONLY.  DO NOT USE UNLESS YOU KNOW HOW TO CONSTRUCT NMRA DCC PACKETS - YOU CAN INADVERTENTLY RE-PROGRAM YOUR ENGINE DECODER
 *   
 *    REGISTER: an internal register number, from 0 through MAX_MAIN_REGISTERS (inclusive), to write (if REGISTER=0) or write and store (if REGISTER>0) the packet 
 *    BYTE1:  first hexidecimal byte in the packet
 *    BYTE2:  second hexidecimal byte in the packet
 *    BYTE3:  optional third hexidecimal byte in the packet
 *    BYTE4:  optional fourth hexidecimal byte in the packet
 *    BYTE5:  optional fifth hexidecimal byte in the packet
 *   
 *    returns: NONE   
 */
      
pRegs->writeTextPacket(com+1);
      break;
            
/***** ATTEMPTS TO DETERMINE HOW MUCH FREE SRAM IS AVAILABLE IN ARDUINO  ****/        
      
    
case 'F':     // <F>
/*
 *     measure amount of free SRAM memory left on the Arduino based on trick found on the internet.
 *     Useful when setting dynamic array sizes, considering the Uno only has 2048 bytes of dynamic SRAM.
 *     Unfortunately not very reliable --- would be great to find a better method
 *     
 *     returns: <f MEM>
 *     where MEM is the number of free bytes remaining in the Arduino's SRAM
 */
      
int v
      INTERFACE.print(
"<f");
      INTERFACE.print((int) &
- (__brkval == ? (int) &__heap_start : (int) __brkval));
      INTERFACE.print(
">");
      break;

/***** LISTS BIT CONTENTS OF ALL INTERNAL DCC PACKET REGISTERS  ****/        

    
case 'L':     // <L>
/*
 *    lists the packet contents of the main operations track registers and the programming track registers
 *    FOR DIAGNOSTIC AND TESTING USE ONLY
 */
      
INTERFACE.println("");
      for(
Register *p=mRegs->reg;p<=mRegs->maxLoadedReg;p++){
        INTERFACE.print(
"M"); INTERFACE.print((int)(p-mRegs->reg)); INTERFACE.print(":\t");
        INTERFACE.print((int)
p); INTERFACE.print("\t");
        INTERFACE.print((int)
p->activePacket); INTERFACE.print("\t");
        INTERFACE.print(
p->activePacket->nBits); INTERFACE.print("\t");
        for(
int i=0;i<10;i++){
          INTERFACE.print(
p->activePacket->buf[i],HEX); INTERFACE.print("\t");
        }
        INTERFACE.
println("");
      }
      for(
Register *p=pRegs->reg;p<=pRegs->maxLoadedReg;p++){
        INTERFACE.print(
"P"); INTERFACE.print((int)(p-pRegs->reg)); INTERFACE.print(":\t");
        INTERFACE.print((int)
p); INTERFACE.print("\t");
        INTERFACE.print((int)
p->activePacket); INTERFACE.print("\t");
        INTERFACE.print(
p->activePacket->nBits); INTERFACE.print("\t");
        for(
int i=0;i<10;i++){
          INTERFACE.print(
p->activePacket->buf[i],HEX); INTERFACE.print("\t");
        }
        INTERFACE.
println("");
      }
      INTERFACE.
println("");
      break;

  } 
// switch
}; // SerialCommand::parse 



t - движение
f - функции
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 08.08.2016, 16:48   #44
YMOR2012
Заглянувший
 
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 62 раз(а) в 16 сообщениях
Репутация: скоро придёт к известности (62)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
У меня работает, если перезапустить командами <0>, <1> из окна терминала серийного порта.
У меня сначала было тоже самое, затем вообще перестал включаться

Цитата:
Сообщение от BR95009 Посмотреть сообщение
В файле SerialCommand.cpp в папке скетча есть детальное описание команд:
Мне бы пример этой команды -хочу написать типа этого:
void loop(){
digitalWrite(SIGNAL_ENABLE_PIN_MAIN,HIGH); // включаем станцию;
движение лок1; - какая команда?
delay(5000); // пауза
стоп лок1; - какая команда?
}
YMOR2012 вне форума   Вверх
Старый 08.08.2016, 17:52   #45
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

Я бы нашел переменную (массив char) куда считывается текст из буфера Serial и прямо в нее бы писал команды текстом.

Я бегло посмотрел, там без пол-литра не разберешься. Нужно время, а его нету. Попробуйте сами.
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 08.08.2016, 18:29   #46
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 75
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 147
Поблагодарили 95 раз(а) в 45 сообщениях
Репутация: скоро придёт к известности (95)
По умолчанию

Цитата:
Сообщение от YMOR2012 Посмотреть сообщение
Мне бы пример этой команды -хочу написать типа этого:
void loop(){
digitalWrite(SIGNAL_ENABLE_PIN_MAIN,HIGH); // включаем станцию;
движение лок1; - какая команда?
delay(5000); // пауза
стоп лок1; - какая команда?
}
Проверить в "железе" неcмогу, но по идее можно вызывать напрямую в функцию,
которая обрабатывает serial...


SerialCommand:: parse("t1 1 50 1"); // лок id 1, adress 1, скорость 50, направление 1 (<t1 1 50 1>)
Для простой остановки пишем скорость = 1.

P.S. функция delay() может сделать ваш код нерабочим.
Qvan22 вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 08.08.2016, 18:31   #47
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,207
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 282
Поблагодарили 1,228 раз(а) в 684 сообщениях
Репутация: этим человеком можно гордиться (1228)
По умолчанию

Цитата:
Сообщение от YMOR2012 Посмотреть сообщение
Мне бы пример этой команды -хочу написать типа этого:
Цитата:
Сообщение от BR95009 Посмотреть сообщение
Я бегло посмотрел, там без пол-литра не разберешься.
В таком случае проще использовать библиотеку DCCInterfaceMaster https://github.com/Railstars/CmdrArduino
там и примеры есть. Только там подключение другое.
Alexmit вне форума   Вверх
Старый 08.08.2016, 20:55   #48
YMOR2012
Заглянувший
 
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 62 раз(а) в 16 сообщениях
Репутация: скоро придёт к известности (62)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Проверить в "железе" неcмогу, но по идее можно вызывать напрямую в функцию,
которая обрабатывает serial...
SerialCommand:: parse("t1 1 50 1"); // лок id 1, adress 1, скорость 50, направление 1 (<t1 1 50 1>)
Для простой остановки пишем скорость = 1.
Благодарю Владимир за подсказку -все заработало. Вот рабочий код "челночного" движения:

PHP код:
///////////////////////////////////////////////////////////////////////////////
// MAIN ARDUINO LOOP
///////////////////////////////////////////////////////////////////////////////

void loop(){
  
  
SerialCommand::process();              // check for, and process, and new serial commands
  
  
if(CurrentMonitor::checkTime()){      // if sufficient time has elapsed since last update, check current draw on Main and Program Tracks 
    
mainMonitor.check();
    
progMonitor.check();
  }

  
Sensor::check();    // check sensors for activate/de-activate

  //////////////////////  челночное движение  //////////////////////
  //digitalWrite(SIGNAL_ENABLE_PIN_MAIN,HIGH); // включаем основной трек или;
  
SerialCommand:: parse("1"); // включаем станцию;
  
SerialCommand:: parse("t 1 99 50 1");
  
delay(3000); // едем вперед
  
SerialCommand:: parse("t 1 99 0 1");
  
delay(6000); // тормозим
  
SerialCommand:: parse("t 1 99 50 0");
  
delay(3000); // едем назад
  
SerialCommand:: parse("t 1 99 0 1");
  
delay(3000); // тормозим
  
SerialCommand:: parse("0"); // выключаем станцию или;
  //digitalWrite(SIGNAL_ENABLE_PIN_MAIN,LOW); // выключаем основной трек;
  
delay(5000); // пауза
// loop 
Собственно если использовать ардуинку в таком варианте, то для управления макетом вообще больше ничего не нужно -можно один раз залить код с нужной логикой управления и наслаждаться действием
P.S. код вставляем в модуль DCCpp_Uno вместо существующего void loop
YMOR2012 вне форума   Вверх
Старый 08.08.2016, 21:15   #49
BR95009
Mit Volldampf durch Harz!
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 5,175
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 45 раз(а) в 37 сообщениях
Сказал(а) спасибо: 4,332
Поблагодарили 5,680 раз(а) в 1,893 сообщениях
Репутация: репутация неоспорима (5729)
По умолчанию

1) Код лучше вставлять через тэг PHP.
2) Delay () - зло. С ним работать будет через оппу, вернее вообще работать не должно. Используйте millis.
3)
Цитата:
Сообщение от YMOR2012 Посмотреть сообщение
то для управления макетом вообще больше ничего не нужно
"Алиллуя, брат"!
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Старый 08.08.2016, 21:20   #50
YMOR2012
Заглянувший
 
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 62 раз(а) в 16 сообщениях
Репутация: скоро придёт к известности (62)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
2) Delay () - зло. С ним работать будет через оппу.
Пока работает, но это для пробы, а вообще движемся пока не появится напруга на одном из пинов/датчиков
YMOR2012 вне форума   Вверх
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декодер для стрелки LGB на Ардуино BR95009 Arduino 42 25.10.2016 16:13
Самодельная Командная станция Васёк Электрика и DCC 58 16.12.2010 16:11
Командная станция ESU VRD Электрика и DCC 4 13.05.2010 17:17


Текущее время: 06:48. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -