Brocken-Meister
Регистрация: 27.04.2012
Адрес: !Msk
Сообщений: 8,627
Сказал(а) 'не согласен(а)'!: 7
Сказали 'не согласен'! 110 раз(а) в 87 сообщениях
Сказал(а) спасибо: 7,030
Поблагодарили 9,327 раз(а) в 3,314 сообщениях
: 0 за это сообщение 0 Всего
Репутация: репутация неоспорима (9368)
|
Вот вам еще для затравки. :)
Залив вместо скетча z21 вот такой скетч, например, (ниже под катом оффтопик) вы сможете автоматизировать управление дорогой прямо из ардуино.
оффтопик
/*
Пример использования библиотеки XpressNet
*/
//----------------------------------------------------------------------------
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define SerialSerial 1 //Для ардуино мега 2650 - использовать Serial0 для отладки и Serial1 для комуникации с рокомышью
#endif
// подключаем библиотеку X-Bus
#include <XpressNet.h>
// создаем объект x-Bus
XpressNetClass XpressNet;
// Служебные переменные:
int MarshrutGotov = 0; // переменная, что бы переключить стрелки один раз в цикле
int LokRun = 0; // переменная для подтвержденяи, что лок уже поехал
void setup() { // Функция setup должна присутсвовать в любом скетче. Запускается один раз в начале работы программы
//ИНициализируем X-Bus
XpressNet.start(30, 3); // Первое - адрес нашего устройства с системе. Пусть будет 30. Второе - управляющий пин. По нашей схеме это пин 3.
XpressNet.setPower(csNormal); // включаем питание в норму (если, например, на мыше нажата кнопка стоп, то эта команда переводит систему в нормальный режим
}
void loop() { //Функция loop (петля") должна присутсвовать в любом скетче. Выполняетс после сетапа в бесконечном цикле.
// Обрабатываем X-Bus - пнинимаем и отправляем команды.
XpressNet.receive(); // нам нужно крутить эту функцию в бесконечном цикле, как можно чаще, что бы не пропустить команды с Рокомыши
// Создаем маршррут из стрелок, если не делали еще этого.
if (MarshrutGotov == 0) {
XpressNet.setTrntPos (0x00, 1, 1); //переключаем стрелку с адресом 1 в позицию 1
XpressNet.setTrntPos (0x00, 7, 1); //переключаем стрелку с адресом 7 в позицию 1
XpressNet.setTrntPos (0x00, 10, 0);//переключаем стрелку с адресом 10 в позицию 0
MarshrutGotov = 1; // запоминаем, что мы уже деали маршрут, что бы не сделать его снова
}
XpressNet.receive(); // еще раз, как можно чаще, помните?
// Запускаем локомотив с адресом 3, если он еще не запущен и не запускаем, если он уже запущен
if (LokRun == 0) {
XpressNet.setLocoDrive (0x00, 3, 14, 68); // запускаем лок с адресом 3, с декодером настроенным на 14 шагов, на скорости 4 шага по направлению назад
// 68 = 0100 0100, где первые 6 бит справа = скорость (1-128), в нашем случае это 4, а бит 7 - это направление движения.
LokRun = 1; // запоминаем, что мы уже запустили лок, что бы в следующем цикле не запустить его снова
}
XpressNet.receive();
// Ждем 20 секунд (20 000 миллисекунд) и останавливаем лок. "Нажимаем" СТОП.
if ( millis() > 20000) { // millis() - встроенная функция ардуино, возвращающая количество миллисекунд с начала работы скетча
XpressNet.setLocoDrive (0x00, 3, 14, 0); // останавливаем лок
XpressNet.setHalt(); // нажимаем СТОП, на всякий пожарный, для примера.
XpressNet.receive();
for (;;) {} // останавливаем выполенние скеча
}
}
__________________
H0 - DR/DB, Ep.III, G и H0m - HSB, Н0е - DR/ÖBB/Zillertalbahn Ep.V-VI. И эночка.
Московский Модуль H0-присоединяйтесь!
Последний раз редактировалось BR95009; 29.05.2015 в 12:38.
|