RS-232C + Arduino

Тема в разделе "Arduino & Shields", создана пользователем Mestniy, 7 июл 2016.

  1. Mestniy

    Mestniy Гуру

    А не прощще было сделать так:
    Код (C++):
    unsigned char ScalesData [20];
    Serial.readBytesUntil(char(13), ScalesData , 20 );
    Или я чегото не догоняю?
    И да: можете пожалуйста описать функцию Serial.readBytesUntil ? Я чета немного в затуплении:oops::oops::oops:
     
    Последнее редактирование: 9 июл 2016
  2. ZAZ-965

    ZAZ-965 Гуру

    Mestniy нравится это.
  3. Mestniy

    Mestniy Гуру

    Получается все данные находяться в массиве ScalesData?
    И теперь мне нужно значения этого массива из аски расшифровать - верно? Или т.к. мы использовали char - то у нас и так символ? Переводить ничего не нужно?
     
    Последнее редактирование: 11 июл 2016
  4. GigaRex

    GigaRex Нуб

    Всем привет! Недавно стал разбираться с ардуино нано (сн340). Не знаю где спросить, решил, для начала тут, т.к. название темы похоже...
    Через USB получается всё. А вот через 232 на материнке - нет (подключаю выходы rx tx прямо к материнке). Как мог читал всякие форумы темы и т.д.. Ничего не нашёл.
    Через USB заливаю скетч с выводом данных в 232, через тот же USB в мониторе порта всё есть. А через 232 какая то краказябра идёт( Что не так делаю?
     
  5. DIYMan

    DIYMan Guest

    А ничего, что у 232 и UART ардуины разные логические уровни? Как ещё жива-то, бедняжка...
     
  6. Mestniy

    Mestniy Гуру

    Помогите пожалуйста догнать!
     
  7. ZAZ-965

    ZAZ-965 Гуру

    Если с данными (байты 7-14) не будет никакой арифметики, то переводить не надо.
     
    Mestniy нравится это.
  8. GigaRex

    GigaRex Нуб

    Конечно чего! Но т.к. я не суперпро в этом вопросе, потому сюда и пишу.. Она то жива, пока что.. Вы уж помогите ей, а заодно и мне, если не сложно) Как правильно подключаться к COM порту компа? Или это не предусмотрено? А ещё что значит "разный логический уровень"? Я то думал RS232 он и в африке, а оказалось у них ещё и некие разные логические уровни... Думал 232 отличается от 485... (предполагаю, что RX-TX-GND это всего лишь одинаковые названия в 232 и УАРТе). Понимаю, что в ваших глазах это всё выглядит примерно как "ну и дибил", но хотелось бы услышать минимальные пояснения - всё легко понимаю)
    И сразу же дополнительный вопрос: если я возьму некий конвертор УАРТ-485 (уже понял, что не 232-485), то смогу видеть, что происходит в шине 485 охранно-пожарной сигнализации?
    Заранее спасибо)
     
  9. DIYMan

    DIYMan Guest

    А вот цитатка из вики:

    Видите, какие уровни? При том что у ардуиновского UART логический 0 - это всё, что ниже 2В примерно (надо в даташите точнее смотреть), логическая единица - всё что выше 2,5В (опять же, примерно, но суть понятна).

    Для сопряжения устройств с разными логическими уровнями есть специальные микросхемы-преобразователи уровней, например, MAX232 - https://ru.wikipedia.org/wiki/MAX232
     
    GigaRex нравится это.
  10. Radius

    Radius Гик

    Сможете.
     
    GigaRex нравится это.
  11. Mestniy

    Mestniy Гуру

    Тока я чето недогнал немного... От куда будут приходить байты?
    Вот что написал...
    Код (C++):

    #define MaxScalesPacket 20
    unsigned char ScalesData [MaxScalesPacket ];
    #include <LiquidCrystal.h>  // Лобавляем необходимую библиотеку
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

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

    void loop() {
    Serial.readBytesUntil(char(13), ScalesData , MaxScalesPacket );
    for (int i=0; i<8; i++)
    {
    Serial.print(ScalesData[i]);
    lcd.begin(16, 2);                  // Задаем размерность экрана
    lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
    lcd.print(ScalesData[i]);       // Выводим текст
    }
    }

     
     
  12. ZAZ-965

    ZAZ-965 Гуру

    По-моему, отправлять информацию обратно в весы бессмысленно (- строка Serial.print(ScalesData);).
    Если надо передавать информацию дальше или SoftwareSerial или микроконтроллер с несколькими UART.
    Код (C++):
    #define MaxScalesPacket 20
    #include <LiquidCrystal.h>  // Лобавляем необходимую библиотеку
    unsigned char ScalesData [MaxScalesPacket ];
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

    void setup() {
      Serial.begin(4800);              //Задаем скорость обмена данными с весами
      lcd.begin(16, 2);                  // Задаем размерность экрана
    }

    void loop() {
    if (Serial.available()) {
            Serial.readBytesUntil(char(13), ScalesData , MaxScalesPacket );
                    for (int i=7; i<19; i++)
                    {
                        lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
                        lcd.print(ScalesData[i]);       // Выводим вес и единицу измерения
                     }
                             }
    else
                    {
                        lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
                        lcd.print("Waiting...");           // Выводим текст
                     }
    }
     
    Mestniy нравится это.
  13. Mestniy

    Mestniy Гуру

    Оооо. Спасибо большое.
     
  14. Mestniy

    Mestniy Гуру

    В принцыпе у меня есть мега. На нее зацеплю и все. И можно будет передавать=D.
     
  15. Mestniy

    Mestniy Гуру

    Какието непонятные цифры выводяться на дисплей, когда на весах 0,00. В чем может быть проблема?
     
  16. Mestniy

    Mestniy Гуру

    Может всетаки нужно из аски перевести? Кто подскажет - как это можно сделать?
     
  17. ZAZ-965

    ZAZ-965 Гуру

    В инициализации UART добавить настройку
    Код (C++):
    Serial.begin(4800, SERIAL_7E1);              //Задаем скорость обмена данными с весами
    На ПК в терминальной программе смотрели, что отдают весы?