RS 232

SNOOPY
Offline
Зарегистрирован: 24.07.2011

Бодрый дент всем, у меня плата Uno, есть несоклько вопросов новичка:

  1. Сколько COM портов можно подключить?
  2. Как их можно подключить, к каким пинам?
  3. Как к ним можно обратиться? Правильно ли я делаю что юзаю библиотеку NewSoftSerial? Или лучше юзать стандартную SoftSerial?
  4. Сделал ли я все правильно в коде написав:
NewSoftSerial mySerial(sms.rx, sms.tx);  //rx, tx
   mySerial.begin(sms.baud);
   mySerial.print(sms.command);
   if(sms.afterCommandDelay>0) { // ==0 => is a void command
   delay(mysms.afterCommandDelay);
   if(mySerial.available()>0) {
   while(mySerial.available()>0) {
   responce+=mySerial.read();
   }
   mySerial.flush();
   }
На чем можно проверить работу кода, когда обращение идет к определенным пинам? А то под рукой нет ни какого раритетного девайса, придется покупать, а что лучше купить, не ясно. Где можно купить экран, что бы отражать работу? какой нужен? Подойдет ли любой? Что говорить в магазине радиодеталей, что бы меня поняли, какой экран нужен?

Спасибо всем :)

 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Советую для начала пробежаться тут в описании уно -1 последовательный порт на 0 и 1 пинах

экран любой двух строчный (типа винстар - держит кирилицу) 

Девайсы по идее сименсы 35-55 серии должны дружить именно с ком портом, но для согласования желательно max232 а то там уровни могут быть всякие выше 0-5в(хотя глубоко сомневаюсь)

 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

 не забудьте земли соеденить

SNOOPY
Offline
Зарегистрирован: 24.07.2011

Adessit, спасибо, я это уже прочитал :)

Zveruga
Offline
Зарегистрирован: 29.09.2011

Просветите новичка, у меня старенькая моторола L7, с миниюсб разьемом, нашел его распиновку

http://www.smart-clip.com/micro-usb-pinout.png  

как я понимаю, мне надо пустить 0 вывод Уно на 2ой миниюсб (согласно рисунка выше), а 1ый на 3ий? Ну и землю само-собой.

И все? Я что-то не могу понять про эти ком-порты, чтоб работало в телефоне должен быть выход компорта, а не юсб? Например, когда я подключаю эту моторолу к компу, то у меня в устройствах появляется не виртуальный ком-порт, а Запоминающее устройство USB, это значит что в телефоне не ком-портовый интерфейс и по схеме описанной мною выше подключения не получится?

 

SNOOPY
Offline
Зарегистрирован: 24.07.2011

Zveruga пишет:

Просветите новичка, у меня старенькая моторола L7, с миниюсб разьемом, нашел его распиновку

http://www.smart-clip.com/micro-usb-pinout.png  

как я понимаю, мне надо пустить 0 вывод Уно на 2ой миниюсб (согласно рисунка выше), а 1ый на 3ий? Ну и землю само-собой.

И все? Я что-то не могу понять про эти ком-порты, чтоб работало в телефоне должен быть выход компорта, а не юсб? Например, когда я подключаю эту моторолу к компу, то у меня в устройствах появляется не виртуальный ком-порт, а Запоминающее устройство USB, это значит что в телефоне не ком-портовый интерфейс и по схеме описанной мною выше подключения не получится?

Думаю вы правильно все понимаете - в телефоне не RS-232, а даже если бы и был, подл * не получиться, т.к. сигналы разные: в * TTL, а в сотке стандартный RS-232

А что бы уровнять сигналы, есть классная схема

http://www.hardware.zp.ua/mobile/data-cable-max232.html

собирал два раза, работает отлично.

Zveruga
Offline
Зарегистрирован: 29.09.2011

Спасибо за ответ.

По этой ссылке написано:  "К компьютеру кабель подключается через порт COM (он же RS232 или DB9)", правильно ли я понимаю, что в моем случае он подключается не к компьютеру, а к ардуино? И еще, на схеме, кроме Rx и Tx есть еще DCD, этот контакт куда подключать?

SNOOPY
Offline
Зарегистрирован: 24.07.2011

Zveruga пишет:

Спасибо за ответ.

По этой ссылке написано:  "К компьютеру кабель подключается через порт COM (он же RS232 или DB9)", правильно ли я понимаю, что в моем случае он подключается не к компьютеру, а к ардуино?

Правильно

Zveruga пишет:

И еще, на схеме, кроме Rx и Tx есть еще DCD, этот контакт куда подключать?


забей, не обращай внимания, в спецификации от RS-232 сказано, что не изменными остаются и должны быть пины 2,3 и 5, остальные могут менять свои назначения на усмотрения юзера. В обчем, юзаются тока 2, 3 и 5.

Zveruga
Offline
Зарегистрирован: 29.09.2011

Все понял, спасибо. Еще не решил что лучше - купить GSM шилд или повозиться с телефонами, шилд вроде как проще, но с телефонами перспективней. 

SNOOPY
Offline
Зарегистрирован: 24.07.2011

Zveruga пишет:

Все понял, спасибо. Еще не решил что лучше - купить GSM шилд или повозиться с телефонами, шилд вроде как проще, но с телефонами перспективней. 

если тебе нужна надежная система? бери шилд, а лишние провода и девайсы, лишь еще большая вероятность для глюков

svizist1
Offline
Зарегистрирован: 28.01.2012

Подскажите пожалуйста как можно решить задачу. Минумум так сказать, что нужно. Есть терминал с RS 232 портом, на него нужно отсылать данные. Схема работы примерно следующая. Нажали кнопку 1, ушли готовые данные( рецепт для весов 1 ). Захотели изменить данные нажали кнопку 2 и готовые данные ушли на терминал по сом порту. Используется для дозировки краски. Есть платформа и терминал. Терминал получает от тензодатчик показания веса и управляет электроклапаном закрытия при достижении определенного веса. Вот эти параметры и хочу попробовать отправить.( разные банки по 10,25,36 кг) Вот только пока незнаю как. Спасибо.

svizist1
Offline
Зарегистрирован: 28.01.2012

 Подскажите пожалуйста с кодом, как можно оптимизировать и главное где подсмотреть решение задачи. При нажатии кнопки( на данный момент без фиксации) послать только один раз команду в сом порт и оставить светодиод включеным. Если я сменю на кнопку с фиксацией, то данные будут идти постоянно, как этого можно избежать ? сейчас три кнопки и два светика. А, вообще нужно три и три. Но это не главное.

int ledPin = 13;  // светодиод
int ledPin2 = 12; // светодиод
int btnPin = 2;// кнопка
int btnPin2 = 4;// кнопка
int btnPin7 = 7;// кнопка
int val = 0;
int val2 = 0;
int val7 = 0;
void setup()                     
{
  pinMode(ledPin, OUTPUT);      // это выход - светодиод
  pinMode(ledPin2, OUTPUT);
  pinMode(btnPin, INPUT); // вход - кнопка
  pinMode(btnPin2, INPUT);  //вход - кнопка
  Serial.begin(9600);           // будем записывать в COM-порт
}

void loop()                      
{
  val = digitalRead(btnPin);    // узнаём состояние кнопки
  if(val==HIGH)                 // кнопка нажата
  {
    digitalWrite(ledPin, HIGH); // зажигаем светодиод
    Serial.println("D01KS"); // команда пуск
  }
  val2 = digitalRead(btnPin2);    // узнаём состояние кнопки
  if(val2==HIGH)                 // кнопка нажата
  {
    digitalWrite(ledPin, HIGH); // зажигаем светодиод
    Serial.println("D01KP"); // команда стоп
  }
   val7 = digitalRead(btnPin7);    // узнаём состояние кнопки
  if(val7==HIGH)                 // кнопка нажата
  {
    digitalWrite(ledPin2, HIGH); // зажигаем светодиод
    Serial.println("D01KW"); // команда вес
  }

  delay(100);
  {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);  // гасим светодиод

  }
}

 

rembo
Offline
Зарегистрирован: 14.11.2012

дабы неплодить кучу одинаковых тем спрошу тут. скетч 

int i;
byte buffer[6];

void setup(){
Serial.begin(57600);  
}

void loop(){
if(Serial.available()){
     while( Serial.available() > 0) {
     buffer[i++] = Serial.read();
delay (2);
     if (i>=6) break;
     }
     }
     Serial.write(buffer[0]);
i = 0;
}

результат:

Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  28    OUT    d7 28 00 00  81 7e                                  .(....               10120.1.0        
  28    IN     d7 d7 d7 d7  d7                                     .....                10121.1.0        
  28    IN     d7 d7 d7 d7                                         ....                 10122.1.0(87)    
  28    IN     d7 d7 d7 d7                                         ....                 10209.1.0        
 
вопрос -- почему так много данных на выходе?
SNOOPY
Offline
Зарегистрирован: 24.07.2011

rembo пишет:

Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  28    OUT    d7 28 00 00  81 7e                                  .(....               10120.1.0        
  28    IN     d7 d7 d7 d7  d7                                     .....                10121.1.0        
  28    IN     d7 d7 d7 d7                                         ....                 10122.1.0(87)    
  28    IN     d7 d7 d7 d7                                         ....                 10209.1.0        
 
вопрос -- почему так много данных на выходе?

 

Может проблема в битности и длинне ожидаемых данных твоего монитора...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012
int i;
byte buffer[6];

void setup(){
Serial.begin(57600);  
}

void loop()
{
  if(Serial.available())
  {
    i = 0;
     while( Serial.available() > 0)
     {
       buffer[i++] = Serial.read();
       delay (2);
       if (i>=5) break;
     }
    buffer[i] = 0;
    Serial.write(buffer);
  }
}

Может так хотелось?

 

aljoshka
Offline
Зарегистрирован: 03.03.2014

можно ли закидывать скетч в ардуино мини без программатора а через ЛПТ- MOSI, MISO подключая к TX, RX ? ;)