Идея такова: Имеется проектор например *iewSonic, допустим модель 6211/6221 такой проектор можно включать/выключать программно передавая ему в COM порт числовую последовательность что собственно я и сделал на C# 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
Если у вас такая система (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.
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]); }
Схема следующая проектор подключен к ПК посредством VGA кабеля так он полчает изображение к проектору сейчас приходит COM кабель с того же ПК для передачи команд включения/выключения из программы которую я написал, код выше моя идея в том чтобы включение проектора сделать аппаратно (большой кнопкой встроенной в стол, без участия ПК (тк это я уже умею)) т.о. Arduino -> UART? max232? -> COM-кабель -> проектор про UART почитаю, но вопрос был также в том что в Arduino USB порт так вот как его сдружить с COM кабелем? если впомнить старые Ardiuno были как раз с COM разъемом за неимением такой для экспириментов и задается вопрос ну и далее как послать последовательность чисел при помощи Serial.write
Как я понял мне нужна вот эта штука http://npl.ucoz.ru/publ/ehlektronika/preobrazovatel_rs232_uart/2-1-0-20 подключенная к RX TX
Не совсем так. Контроллер имеет встроенный UART, который подключен к преобразователю serial->USB. Вам нужно подключить MAX232 сразу к ножкам контроллера, минуя микросхему преобразователя. http://avru.cwx.ru/uchebnik/avr_and_rs232.html#more-39
Понятно, у вас вариант (2). Значит один MAX232 + 4 конденсатора 0.1мкФ + разъем DB9M. Ну и RX/TX перекинуть...
Можно свести задачу к припаиванию второй кнопки параллельно кнопке включения проектора на самом проекторе - тогда и контроллер не нужен
Все таки дошли руки и собрал TTL-COM переходник и сделал включалку пока только на макетке, итак понадобилось: 1) кнопка и триггер Шмитта CD40106BD (урок 10) 2) MAX232CPE и 4 конденсатора 0,1мкф 3) кусок витой пары + разъем COM типа мама
Код (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); }