Ардуино и внешнее устройство

Привожу код скетча:
Здесь mySerial(rxPin, txPin); // RX, TX подключено к устройству. т.е. к плате подключен адаптер с переходником rs-232
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 13

SoftwareSerial mySerial(rxPin, txPin); // RX, TX
byte mFun = 0;
void setup()
{
Serial.begin( 9600 );
Serial.println(“USB Serial is up and running”);
// set the data rate for the SoftwareSerial port
mySerial.begin( 57600 );
}

void loop()
{
if ( mySerial.available() )
{
byte bR = mySerial.read();
switch(mFun){
case 0:Serial.print("0x2f-> ");
mySerial.write(0x2b);
delayMicroseconds(1000);
mFun = 1;
break;
case 1:Serial.print("0x2b-> ");
mySerial.write(0x2c);
delayMicroseconds(1000);
mFun = 2;
break;
case 2:Serial.print("0x2с-> ");
mySerial.write(0x2c);
mFun =3;
break;

}
// Write the serial from the S.L.M. to the USB (debug) serial port
 Serial.println(bR);

}

if ( Serial.available() )
{
byte xB = Serial.read();
// Write the serial from the USB (debug) serial port to the S.L.M.
mySerial.write( 0x2F);
delayMicroseconds(1000);
}
}
Стоит задача сбора данных от промышленных rs-232 устройств.
Устройство выдает данные при работе с компьютером (последовательный обмен с++, python)
При написании кода для платы ардуино не получается.
Исходя из приведенного скетча
case 0:Serial.print("0x2f-> "); отрабатывается с ожидаемым результатом.
Следующая команда для прибора <> mySerial.write(0x2b);<> отрабатывается не верно.
Повторяюсь с использованием языков программирования и компьютера устройство выдает, что от него ждут. Порты проверены, данные передают и принимают

мы приняли к сведенью.
и код вставьте как положено.

1 лайк
  1. Отформатировать и вставить код по человечески.

АСУТПшником пахнет от кода…

К чему ваше замечание ?

Видимо к этому:

Вы по сути не понимаете ?
Только общие замечания?

“По сути” или как-то еще - это не в программировании. Вот, к примеру, у тебя в 25 строке ошибка. Если код вставлен правильно, то все строки пронумерованы и ты сразу видишь 25 строку. А сейчас ты предлагаешь тратить время на подсчитывание строк? А самому это время не жалко?

Вы по сути не можете ?

А ты читать умеешь?

К тому же не форматированный код не читаем.

Вот так должно быть (как пример):

// include the library code:
#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);
}

Ты бл…ть такой Д’Артаньян не можешь одну кнопку нажать на форуме, а мы должны усраться и по сути что то придумать ?

8 лайков

Дэбил?
P.S. Можно расходиться, не тратьте время на поцыэнта с отрицательным IQ.

Можно и “по сути”.

Вот это вот работать не будет

Потому что Софтсериал не поддерживает скорости более 38400. А лучше и еще ниже - 9600 или 19200, не более.

Если ваше устройство на рс232 поддерживает настройку скорости - снизьте ее. Если не поддерживает, вам нужно сменить плату ардуино на ту что с более чем одним железным сериалом - Про микро, Мега или Нано Эвери

и еще вот это интересно :slight_smile:

в диагностику пишем, что послали 0x2f , а сами отсылаем 0x2b , Это зачем так? Кого обманываем?

1 лайк

справедливости ради, поддерживает 57600 на прием, но не на всех ногах. Но это “Absolute maximum”

Я, кста, софтсериал юзаю не более чем на 19200, и то не всегда, зачастую 9600 за глаза хватает

значит за дело.
Это не повод засирать все соседние темы