Передача с Arduino на другое устройство через COM порт

Тема в разделе "Проводная и беспроводная связь", создана пользователем nepekyp, 17 апр 2013.

  1. nepekyp

    nepekyp Нерд

    Идея такова:
    Имеется проектор например *iewSonic, допустим модель 6211/6221
    такой проектор можно включать/выключать программно передавая ему в COM порт числовую последовательность что собственно я и сделал на C#
    manual.png
    1) переводим команды проектора в десятиричную СС и пишем такой код
    Код (Text):
    SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
     
            private void button1_Click(object sender, EventArgs e)
            {
                port.Open();
                byte[] data = { 190, 239, 16, 5, 0, 198, 255, 17, 17, 1, 0, 1, 0 };
                port.Write(data, 0, data.Length);
                port.Close();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                port.Open();
                byte[] data = { 190, 239, 3, 6, 0, 220, 219, 105, 0, 0, 0, 0, 0 };
                port.Write(data, 0, data.Length);
                port.Close();
            }
    при нажатии кнопок, проектор подключенный к ПК COM кабелем, соответственно включается и выключается

    ТЕПЕРЬ задача сделать аппаратный включатель на основе Arduino:
    1) Как и что подключить к USB-порту Arduino (какой-нибудь MAX232) а затем COM кабель идущий к проектору
    2) Как уже упомянутую числовую последовательность передать с Arduino
     
  2. Unixon

    Unixon Оракул Модератор

    Если у вас такая система (1):

    [Arduino (UART)-(USB)]---[(USB) PC1 (RS232)]---[(RS232)Projector (VGA)]---[(VGA) PC1]

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

    А если такая (2):

    [Arduino (UART)]---[(UART) MAX232 (RS232)]---[(RS232) Projector (VGA)]---[(VGA) PC1]

    тогда можно обойтись и мостом UART-RS232.
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    1) Не к USB-порту, а к ножкам TX, RX контроллера подключить MAX232/MAX3232.
    2)
    Код (Text):
    byte buffer[] = { 0x1, 0x2, 0x3 };
    int count = 3;
     
    void setup()
    {
      Serial.begin(9600);
    }
     
    void loop()
    {
      for(int i = 0; i < count; i++)
        Serial.write(buffer[i]);
    }
     
    nailxx нравится это.
  4. nepekyp

    nepekyp Нерд

    Схема следующая
    проектор подключен к ПК посредством VGA кабеля так он полчает изображение

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

    моя идея в том чтобы включение проектора сделать аппаратно (большой кнопкой встроенной в стол, без участия ПК (тк это я уже умею))
    т.о. Arduino -> UART? max232? -> COM-кабель -> проектор

    про UART почитаю, но вопрос был также в том что в Arduino USB порт так вот как его сдружить с COM кабелем?


    если впомнить старые Ardiuno были как раз с COM разъемом за неимением такой для экспириментов и задается вопрос

    ну и далее как послать последовательность чисел при помощи Serial.write
     
  5. nepekyp

    nepekyp Нерд

  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Не совсем так. Контроллер имеет встроенный UART, который подключен к преобразователю serial->USB.
    Вам нужно подключить MAX232 сразу к ножкам контроллера, минуя микросхему преобразователя.
    http://avru.cwx.ru/uchebnik/avr_and_rs232.html#more-39
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

  8. Unixon

    Unixon Оракул Модератор

    Понятно, у вас вариант (2).
    Значит один MAX232 + 4 конденсатора 0.1мкФ + разъем DB9M.
    Ну и RX/TX перекинуть...
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Можно свести задачу к припаиванию второй кнопки параллельно кнопке включения проектора на самом проекторе - тогда и контроллер не нужен :)
     
  10. nepekyp

    nepekyp Нерд

    это колхоз, особенно если проектор еще на гарантии
     
  11. nepekyp

    nepekyp Нерд

    Все таки дошли руки и собрал TTL-COM переходник и сделал включалку
    пока только на макетке, итак понадобилось:
    1) кнопка и триггер Шмитта CD40106BD (урок 10)
    2) MAX232CPE и 4 конденсатора 0,1мкф
    3) кусок витой пары + разъем COM типа мама
     
  12. nepekyp

    nepekyp Нерд

    TTL-COM собрал по такой схеме
    sxema_max232.gif
     
    KamAdm нравится это.
  13. nepekyp

    nepekyp Нерд

    Код (C):

    int buttonInt = 0; //Pin 2
    volatile boolean state = false;
    byte buffer[] = { 0xBE, 0xEF, 0x10, 0x05, 0x00, 0xC6, 0xFF, 0x11, 0x11, 0x01, 0x00, 0x01, 0x00, 10, 13 };
    byte buffer2[] = { 0xBE, 0xEF, 0x03, 0x06, 0x00, 0xDC, 0xDB, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 10, 13 };
    int count = 15;

    void setup()
    {
      pinMode(13, OUTPUT);
      attachInterrupt(buttonInt, powerOnOff, RISING);
      Serial.begin(19200);
    }

    void powerOnOff()
    {
      if (state == false)
      {
        for(int i = 0; i < count; i++)
        {
            Serial.write(buffer[i]);  
        }
        state = true;
      }
      else
      {
        for(int i = 0; i < count; i++)
        {
            Serial.write(buffer2[i]);  
        }
        state = false;
      }
    }


    void loop()
    {
      digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000);
    }
     
     
    KamAdm нравится это.
  14. nepekyp

    nepekyp Нерд

    а вот и схема
    IMGP9861.jpg
     
  15. oleg1234

    oleg1234 Нуб

    Включалка работает?
     
  16. nepekyp

    nepekyp Нерд

    Работает отлично