ээх ... да чего я решил? что накопал от того и пляшу
кстати .. помоему эта 8-ка и прилетала в ответ на Q ... я и ЛАТР-ом упску вгонял на повышенное и пониженное напряжение и перегруз давал кучей лампочек .. эфекта ноль .. возвращается 8ка и всё... реакция была только на отключение питания. Тут да, ответ менялся (помоему на "10" если и соврал то не суть)
Нужно управлять smart ups и снимать с него данные c помощью arduino. Имею smart ups 450 c com портом и такой переходник для arduino. Подключаю к RX и TX serial пинам 0 и 1 и не вижу вывода ups, к этим пинам пробовал подключать модуль sim 900 все отлично работает, могу ввести команды и получить ответ. Может быть я не понял и этот переходник не подходит?
а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины? И если нет то почему? Заранее благодарю за ответ
а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины?
Нет, нельзя.
kolko пишет:
И если нет то почему?
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
спаял преобразователь уровней на двух транзюках, работает. Собственно заморочка то моя в том чтобы выводить на lcd_16, 2 с обновлением в 1000 мкс четыре переменных:
напряжение батарей,
текущую нагрузку в ваттах,
напряжение на выходе,
заряд батарей
Есть ардуино с самопальной RS232-UART, lcd_16, 2 и UPS APC-Smart-UPS-RT-2000. Как это сделать? С чего стартануть следует?
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
а разве тот переходник, что у kolko на скрине не является тем самым конвертором уровней? .. я пользовался таким же - всё работало
Подниму тему. Хочу снимать параметры ИБП Powerman Online 1000 Plus по порту RS232 вместо штатной UPSilon2000. Подключил переходник RS232-UART, как в посте 55, к нему обычный USB-UART на чипе CP2102. Поставил снифер Serial Port Monitor и запустил UPSilon2000. Посмотрел, что приходит в порт. Протокол тут другой, чем у APS. Для запуска обмена отправляется F\r, потом Q1\r. После чего приходит строка с данными.
Подключился через Pytti, 8N1 2400, вручную отправляю F\r, потом Q1\r, получаю данные.
Не знаю что и как вы там тестировали между двумя ардуинками, но посмотрите внимательно на свой опрос(), не с того порта читаете!
Вообще мудреный код, зачем все эти таймеры. Достаточно примеров, как работать с одной переменной и константой для периодического выполнения чего-либо.
Send() выполняйте интервально, а вот чтение и обработку ответа Recv() (у вас это опрос()) надо делать оперативно -> убрать в цикл loop без всяких дополнительных проверок и ограничений, просто проверять mySerial.available(), читать и обрабатывать дальше.
0
Ну, раз вы все решили и сделали,
ээх ... да чего я решил? что накопал от того и пляшу
кстати .. помоему эта 8-ка и прилетала в ответ на Q ... я и ЛАТР-ом упску вгонял на повышенное и пониженное напряжение и перегруз давал кучей лампочек .. эфекта ноль .. возвращается 8ка и всё... реакция была только на отключение питания. Тут да, ответ менялся (помоему на "10" если и соврал то не суть)
Питание не буду дергать для проверки статуса - оборудование казенное. Алгоритм, которым пользуюсь, написал. Быть или не быть - решайте сами.
Питание не буду дергать для проверки статуса - оборудование казенное.
изначально просьба была просто показать скетч .. ;)
Так смотрите, мне не жалко - https://github.com/zbx-sadman/zabbuino/blob/master/src/uart_apcsmart.cpp
Добрый день!
Нужно управлять smart ups и снимать с него данные c помощью arduino. Имею smart ups 450 c com портом и такой переходник для arduino. Подключаю к RX и TX serial пинам 0 и 1 и не вижу вывода ups, к этим пинам пробовал подключать модуль sim 900 все отлично работает, могу ввести команды и получить ответ. Может быть я не понял и этот переходник не подходит?
а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины? И если нет то почему? Заранее благодарю за ответ
а можно ли подключиться ком порт непосредственно к RX и TX serial пинам ардуины?
Нет, нельзя.
И если нет то почему?
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
спаял преобразователь уровней на двух транзюках, работает. Собственно заморочка то моя в том чтобы выводить на lcd_16, 2 с обновлением в 1000 мкс четыре переменных:
напряжение батарей,
текущую нагрузку в ваттах,
напряжение на выходе,
заряд батарей
Есть ардуино с самопальной RS232-UART, lcd_16, 2 и UPS APC-Smart-UPS-RT-2000. Как это сделать? С чего стартануть следует?
Потому что в ардуине интерфейс не RS232(COM), а UART. У них разные логические уровни (напряжения). Требуется преобразователь RS232-UART, например MAX232.
Если же в UPS тоже UART, тогда можно напрямую. Нужно точно знать, какой там интерфейс.
а разве тот переходник, что у kolko на скрине не является тем самым конвертором уровней? .. я пользовался таким же - всё работало
а разве тот переходник, что у kolko на скрине не является тем самым конвертором уровней? .. я пользовался таким же - всё работало
да, это он самый
получилось, надо использовать SoftwareSerial
получилось, надо использовать SoftwareSerial
код будет?
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); Serial.begin(2400); mySerial.begin(2400); mySerial.write("Y"); delay(150); opros(); if (!mySerial.available())mySerial.write("Y"); } void opros(){ mySerial.write("O"); delay(5); lcd.setCursor(0, 1); float outvolt = mySerial.parseFloat(); lcd.print("Out "); lcd.print(outvolt,0); lcd.print("v"); } в этом варианте вывод на дисплей выходного напряжения дальше додумаете какие данные вытянутьПодниму тему. Хочу снимать параметры ИБП Powerman Online 1000 Plus по порту RS232 вместо штатной UPSilon2000. Подключил переходник RS232-UART, как в посте 55, к нему обычный USB-UART на чипе CP2102. Поставил снифер Serial Port Monitor и запустил UPSilon2000. Посмотрел, что приходит в порт. Протокол тут другой, чем у APS. Для запуска обмена отправляется F\r, потом Q1\r. После чего приходит строка с данными.
Подключился через Pytti, 8N1 2400, вручную отправляю F\r, потом Q1\r, получаю данные.
Написал по предыдущему примеру такой скетч
[code] #include <SimpleTimer.h> #include <SoftwareSerial.h> #define t1_interval 2000 byte n; unsigned int timer0,timer1; //------------------------------------------------------ SoftwareSerial mySerial(2, 3); // RX, TX SimpleTimer timer; //------------------------------------------------------ void setup(){ Serial.begin(9600); mySerial.begin(2400); timer1 = timer.setInterval(t1_interval, send_Q1); } //------------------------------------------------------ void loop(){ timer.run(); } //------------------------------------------------------ void send_Q1(){ n++; if(!mySerial.available()){ if(n == 5){n = 0;mySerial.write("F\r");Serial.println("F");} else {mySerial.write("Q1\r");Serial.println("Q1");} } opros(); } //------------------------------------------------------ void opros(){ if(Serial.available() > 0){ String str = Serial.readString(); Serial.println(str); } } //END--------------------------------------------------- [/code]Проверил между 2 ардуинами, работает. А ИБП ничего не отправляет. Может кто подскажет, что я делаю не так? В коде на один F отправляю 4 Q1.
Добрый день!
Не знаю что и как вы там тестировали между двумя ардуинками, но посмотрите внимательно на свой опрос(), не с того порта читаете!
Вообще мудреный код, зачем все эти таймеры. Достаточно примеров, как работать с одной переменной и константой для периодического выполнения чего-либо.
Send() выполняйте интервально, а вот чтение и обработку ответа Recv() (у вас это опрос()) надо делать оперативно -> убрать в цикл loop без всяких дополнительных проверок и ограничений, просто проверять mySerial.available(), читать и обрабатывать дальше.