Перейти до змісту

Rail Driver - тренажер машиниста


Рекомендовані повідомлення

Точно, забыл поставить ";" в той строке :)

Я отредактировал код в предыдущем посте, скопируй еще раз.

Ближе к вечеру или завтра утром выложу саму ZDSReceiver.exe

Посилання на коментар
Поділитись на інші сайти

Качаем обновленный ZDReceiver.exe - ссылка

1) Вводим в текстовое поле номер COM-порта, к которому подключен Arduino в формате СOMX, где Х - номер порта;

2) Нажимаем "Подключиться" (должен кратковременно загореться светодиод лампы бдительности);

3) Если ввели неправильный номер, нажимаем "Отключиться" и повторяем процедуру.

 

Обновил исходник для Arduino - теперь есть возможность выключать лок светофор (показание 0).

// устанавливаем выходы
const int lampPin = 8;  // лампа
const int wPin = 9;     // белый
const int rPin = 10;    // красный
const int ryPin = 11;   // КЖ
const int yPin = 12;    // желтый
const int gPin = 13;    // зеленый

// переменная с предыдущим показанием локомотивного светофора
// (чтобы знать, какой светодиод тушить после переключения сигнала)
int previous = 1;

void setup()
{
// устанавливаем 8 - 13 на вывод
// (вообще лучше сделать циклом, но я оставил для наглядности)
  pinMode(lampPin, OUTPUT);
  pinMode(gPin, OUTPUT);
  pinMode(yPin, OUTPUT);
  pinMode(ryPin, OUTPUT);
  pinMode(rPin, OUTPUT);
  pinMode(wPin, OUTPUT);

  Serial.begin(9600); // устанавливаем скорость передачи 9600 бод
  Serial.flush();     // очищаем буфер последовательного соединения
}

void loop()
{
  int light;
  int lamp;
  int i;

  // если доступно 3 или больше байта на входе
  if(Serial.available() >= 3)
  {
    light = Serial.read();  // читаем показание светофора
    Serial.read();          // пропускаем симваол;
    lamp = Serial.read();   // состаояние лампы

    // если показание светофора поменялось
    if(light != previous)
    {
      // если показание светофора - 0 (ни одна лампа не горит)
      if(light == 0)
      {
        // отключаем питание на выходы 9 - 13
        for(i = 9; i <= 13; i++)
          analogWrite(i, LOW);
      }
      else
      {
        analogWrite(previous + 8, LOW); // тушим светодиод предыдущего показания
        analogWrite(light + 8, 255);   // зажигаем новый
      }

      previous = light; // запоминаем показание
    }

    //если состояние лампы 1, зажигаем светодиод; если - 0, то тушим
    if(lamp == 1)
      analogWrite(lampPin, 255);
    else
      analogWrite(lampPin, LOW);
  }
}

Посилання на коментар
Поділитись на інші сайти

К сожалению, лампочки не светятся, пробовал подключать с разных COM, но безрезультатно!

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

http://i.piccy.info/i7/16ef395f30552e46ff49be88d192f3d7/1-5-4400/47450877/P1210013_240.jpg

 

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

Посилання на коментар
Поділитись на інші сайти

Вот думаю купить джойстик типа руля с педалями. Возможно ли вывести хотя бы РБ или свисток/тифон на педали?
Посилання на коментар
Поділитись на інші сайти

Бодя, это он не тебе, а у меня самого рб, тифон и песок вынесены на педали с помощью МКабМаппера.
Посилання на коментар
Поділитись на інші сайти

Огромное - преогромное спасибо, все работает! Только немного тускловато светодиоды горят! А так все окей, теперь сделаю классный пульт с ЛС по подобию ДС3.

http://i.piccy.info/i7/617fcac8eb5354b4906b5e1645ca186f/1-5-4404/12768923/Ds3-008_240.jpg

Море эмоций! :yahoo:

 

Посилання на коментар
Поділитись на інші сайти

Отлично! Конечно, программировать "в слепую" очень интересно, но все-таки хотелось бы подержать эту ардуину в руках :)

Расскажи пожалуйста, где ты покупал, за сколько и в какой срок доставили?

Посилання на коментар
Поділитись на інші сайти

Покупал в Киеве за 300грн через emarket.ua Новой почтой доставка 1 день.

 

Есть здесь: http://odduino.shopium.ua/products/mega1280/ за 250 грн.

 

 

Посилання на коментар
Поділитись на інші сайти

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

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

 

Посилання на коментар
Поділитись на інші сайти

Заменил, и стала только ярче лампа бдительности, попробовал заменить еще light + 8, HIGH и стали все ярко светить. Благодарю!

Вот код исправленный:

// устанавливаем выходы
const int lampPin = 8;  // лампа
const int wPin = 9;     // белый
const int rPin = 10;    // красный
const int ryPin = 11;   // КЖ
const int yPin = 12;    // желтый
const int gPin = 13;    // зеленый

// переменная с предыдущим показанием локомотивного светофора
// (чтобы знать, какой светодиод тушить после переключения сигнала)
int previous = 1;

void setup()
{
// устанавливаем 8 - 13 на вывод
// (вообще лучше сделать циклом, но я оставил для наглядности)
  pinMode(lampPin, OUTPUT);
  pinMode(gPin, OUTPUT);
  pinMode(yPin, OUTPUT);
  pinMode(ryPin, OUTPUT);
  pinMode(rPin, OUTPUT);
  pinMode(wPin, OUTPUT);

  Serial.begin(9600); // устанавливаем скорость передачи 9600 бод
  Serial.flush();     // очищаем буфер последовательного соединения
}

void loop()
{
  int light;
  int lamp;
  int i;

  // если доступно 3 или больше байта на входе
  if(Serial.available() >= 3)
  {
    light = Serial.read();  // читаем показание светофора
    Serial.read();          // пропускаем симваол;
    lamp = Serial.read();   // состаояние лампы

    // если показание светофора поменялось
    if(light != previous)
    {
      // если показание светофора - 0 (ни одна лампа не горит)
      if(light == 0)
      {
        // отключаем питание на выходы 9 - 13
        for(i = 9; i <= 13; i++)
          analogWrite(i, LOW);
      }
      else
      {
        analogWrite(previous + 8, LOW); // тушим светодиод предыдущего показания
        analogWrite(light + 8, 255);   // зажигаем новый
      }

      previous = light; // запоминаем показание
    }

    //если состояние лампы 1, зажигаем светодиод; если - 0, то тушим
    if(lamp == 1)
      analogWrite(lampPin, 255);
    else
      analogWrite(lampPin, LOW);
  }
}

Посилання на коментар
Поділитись на інші сайти

Да-да, правильно! Заменять нужно везде.

 

light + 8 - это номер вывода текущей лампы ЛС (переменная от 9 до 13).

lampPin - это номер вывода лампы проверки бдительности (константа 8).

Посилання на коментар
Поділитись на інші сайти

А Вы можете написать код, чтобы с ардуино вывести хотя бы 34 кнопки, ну наподобие моей первой темы от 4.1.2012, 15:34. Пользуюсь джойстиками, а это неудобно по 3 штуки сразу подключать. А тут сразу к примеру взять DIGITAL 34 выхода можно назначить кнопками, включая каждое положение 395 и 254, ну например: меню1,2,3,4,8,9 …
Посилання на коментар
Поділитись на інші сайти

Да! Но на остальные потом можно подключить, например LCD дисплей как скорости мер. А вообще там 70 выходов, мне так говорил продавец, но их надо специально назначать. Просто цифровые входы и шли бы себе кнопками примерно, а на остальные дополнительно можно было б что-то подключать. Мне кажется, что так было б проще. :pardon:
Посилання на коментар
Поділитись на інші сайти

Думал над подключением крана.

Уже известно 2 способа со своими недостатками:

1) Потенциометр (нестойкий в работе);

2) Галетный переключатель/кнопки (требуют много входов на плате).

 

Поэтому решил сделать такую схему:

http://i31.fastpic.ru/thumb/2012/0206/eb/e69de7267ee19d88e1d9480152dfb2eb.jpeg

 

Номиналы резисторов нужно подбирать опытным путем.

Принцип действия предельно прост: перемещаем кран в какое-либо положение, замыкается ключ/геркон/кнопка, в цепь входит резистор определенного номинала, софт определяет напряжение на входе и преобразует его в номер позиции. Такая схема требует всего 1 вход на Arduino.

Посилання на коментар
Поділитись на інші сайти

То есть, я так понял, будет только 1 пин?

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

Я правильно понял схему?

Земля, пин №, а 5 вольт не будет?

Если точно будете делать по такой схеме, то скажите, я завтра постараюсь достать данные номиналы! Возможно сниму со старых плат.

Посилання на коментар
Поділитись на інші сайти

Я - за!

Если б еще на контролер машиниста так придумать! Тогда можно было б оживить весь пульт!

Да и проблема пока одна остается: мне с ZDReceiverом удавалось проехать наиболее 6 км. Дальше выключается сим. Наверно симулятор что-то не поддерживает?

 

Посилання на коментар
Поділитись на інші сайти

То есть, я так понял, будет только 1 пин?
Да, только 1 пин.

 

Я правильно понял схему?

Земля, пин №, а 5 вольт не будет?

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

В VI положении напряжение будет минимальным, а в I - максимальным.

 

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

Если точно будете делать по такой схеме, то скажите, я завтра постараюсь достать данные номиналы! Возможно сниму со старых плат.

Не стоит торопиться :)

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

 

Я - за!

Если б еще на контролер машиниста так придумать! Тогда можно было б оживить весь пульт!

Если схема покажет себя с хорошей стороны, то контроллер ЧС4,8, ВЛ80 будет работать по такому же принципу.

 

мне с ZDReceiverом удавалось проехать наиболее 6 км. Дальше выключается сим. Наверно симулятор что-то не поддерживает?
Скоро такого не будет :)
Посилання на коментар
Поділитись на інші сайти

Сегодня решил усовершенствовать схему.

http://i30.fastpic.ru/thumb/2012/0207/4d/b3c0dfa146eaca6a9b6e494cdaef524d.jpeg

 

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

На ручке крана закреплен + провод (вход Arduino). При перемещении ручки замыкаются определенные контакты и в цепь последовательно включается разное количество резисторов.

Покажу на примере.

 

I положение крана

http://i28.fastpic.ru/thumb/2012/0207/95/4b41c9f0f598827cfb9effa44b462995.jpeg

Как видим, в цепь включен 1 резистор (сопротивление 1 кОм).

 

Va положение крана

http://i28.fastpic.ru/thumb/2012/0207/fb/2b7713044b83624add94c5292a5a2ffb.jpeg

В цепи - резисторы R5a-R1 (сопротивление 5 кОм).

 

IV положение крана

http://i27.fastpic.ru/thumb/2012/0207/a2/48724cf79be0bdaf90cd6f7bede010a2.jpeg

В цепи - резисторы R4-R1 (сопротивление 4 кОм).

 

Такая схема, сравнительно с предыдущей, имеет 2 больших плюса:

1) Она на много легче в сборке, т.к. имеет в 2 раза меньше проводников.

2) Не требует резисторов разных номиналов, и соответственно мы не теряем время на подбор и поиски по рынку :) . Подойдут резисторы на 1 кОм.

Посилання на коментар
Поділитись на інші сайти

Приєднуйтесь до обговорення

Ви можете написати зараз та зареєструватися пізніше. Якщо у вас є обліковий запис, авторизуйтесь, щоб опублікувати від імені свого облікового запису.
Примітка: Ваш пост буде перевірено модератором, перш ніж стане видимим.

Гість
Відповісти на цю тему...

×   Вставлено із форматуванням.   Відновити форматування

  Дозволено використовувати не більше 75 емодзі.

×   Ваше посилання було автоматично вбудована.   Відображати як звичайне посилання

×   Ваш попередній контент було відновлено.   Очистити редактор

×   Ви не можете вставляти зображення безпосередньо. Завантажуйте або вставляйте зображення за посиланням.

×
×
  • Створити...

Важлива інформація

Ми розмістили cookie-файлы на ваш пристрій, щоб допомогти зробити цей сайт кращим. Ви можете змінити налаштування cookie-файлів, або продовжити без зміни налаштувань.