Проблема с ZS-040

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем array33, 4 май 2018.

  1. array33

    array33 Нуб

    Доброго времени суток. Подключаю ZS-040 к Arduino Uno по след. схеме: vcc -> +5V, GND -> GND, D8 -> TX, D9 -> RX.
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial BTserial(8, 9); // RX | TX
    const long baudRate = 38400;
    char c=' ';
    boolean NL = true;
    void setup()
    {
        Serial.begin(9600);
        Serial.print("Sketch:   ");   Serial.println(__FILE__);
        Serial.print("Uploaded: ");   Serial.println(__DATE__);
        Serial.println(" ");
        BTserial.begin(baudRate);
        Serial.print("BTserial started at "); Serial.println(baudRate);
        Serial.println(" ");
    }
    void loop()
    {
        if (BTserial.available())
        {
            c = BTserial.read();
            Serial.write(c);
        }

        if (Serial.available())
        {
            c = Serial.read();
            BTserial.write(c);  

            if (NL) { Serial.print(">");  NL = false; }
            Serial.write(c);
            if (c==10) { NL = true; }
        }
    }
    После открываю "Монитор порта", ввожу, к примеру, команды "AT", "AT+VERSION", но в ответ ничего не получаю. В чем может быть проблема?
     
  2. Daniil

    Daniil Гуру

  3. ostrov

    ostrov Гуру

    Реально софтовый сериал на 38400 запускаете? И потом удивляетесь чему то?
     
  4. Daniil

    Daniil Гуру

    Тут и тут пишут, что можно.
    Но в целом, весь код это ктрл+ц и ктрл+в. Почему нельзя гуглить, вот чему можно удивляться.
    Ещё и схемотехника сомнительна
     
  5. ostrov

    ostrov Гуру

    Те, кто реально использует, пишут, что 38400 это предел, при том без гарантии стабильности. Где то и 9600 называют пределом. Я стараюсь выше 19200 софтовый сериал не юзать.
     
  6. SergeiL

    SergeiL Оракул Модератор

    Тут все очень зависит от того, чем вообще занимается процессор помимо софтериала.
    Есть ли запрещения прерываний и т.п.

    Я, кода делал диммер на AtTiny85 заметил, что на 38400 диммер работает стабильно, а на 9600 иногда замечал подрагивания света лампы накаливания в момент передачи от AtTiny85 по софтериал.
    А связано это с запрещением прерываний в библиотеке софтериала, в момент передачи байта, и чем скорость выше, тем короче время запрета прерываний.
     
  7. ostrov

    ostrov Гуру

    Может подрагивание происходило потому что команда принималась дольше? При скорости 38400 глаз просто не успевал заметить этот момент, особенно с инертной лампой накаливания.

    В случае сабжа я бы подключил блютуз к хардовому сериалу и параллельно смотрел что происходит через терминал. И скорость можно менять прямо на мониторе, удобно. Но для этого надо переписать программу (подсказка: залить пустую).
     
  8. SergeiL

    SergeiL Оракул Модератор

    Я проверял, что влияет на мерцание, снижая скорость до 1200, и поднимая до 38400, и убирая ответ с AtTiny85, и добавляя промежуточный вывод (передачу от AtTiny85)
    Если оставлять только прием - мерцаний не было.
    Соответственно стал смотреть на передачу в библиотеке - нашел запрет прерываний.
    Хотел убрать запрет прерываний в библиотеке, но понял, что не нужно, так как вывод с тиньки, у меня был только для отладки.
     
  9. ostrov

    ostrov Гуру

    Я делал софт сериал для тинек "вручную", особо актуально для 2313 и прочих где памяти мало. Работает без прерываний, крутить надо в случае когда ожидается передача или прием, но зато очень миниатюрно. По приезду могу поделиться.
     
  10. SergeiL

    SergeiL Оракул Модератор

    Спасибо! Интересно, посмотреть.
    Это вечная дилемма, или кроссплатформенность или оптимальность…
    По хорошему, нужно написать софтсериал в виде автомата, с привязкой к таймеру, под конкретный случай.
    Тогда все будет работать прекрасно, и не будут тормозить другие задачи...
    Потом использовать, если нужно, но это будет не библиотека.:)
     
  11. ostrov

    ostrov Гуру

    Коптпаста наше все! Я еще с магнитофона подключал саои функции. )