Nextion + arduino mega2560

Тема в разделе "Arduino & Shields", создана пользователем Aleks666, 6 окт 2018.

  1. Aleks666

    Aleks666 Нуб

    HEEEEEELP!!!!
    Пытаюсь наладить работу Arduino совместно с Nextion, пробовал всё!!!!!
    * библиотеки
    * Функию SendData :
    void SendData(String div, String data)
    {
    Serial3.print(div);
    Serial3.print(=);
    Seial3.print(data);
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
    }
    и д.р способы, но не заводится.
    хочу банально hello World в текстовое поле t0 с ID 1
     
  2. Mitrandir

    Mitrandir Гуру

    Код (C++):
    void SendData(String div, String data)
    {
    Serial3.print("t0.txt=\"haha\"");
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);}
    Работает?
    скрость правильная у порта?
     
  3. Aleks666

    Aleks666 Нуб

    Сейчас попробовал, не прокатило. Скорость 9600
     
  4. Aleks666

    Aleks666 Нуб

    Пардон, ваш код заработал, после смены контактов
     
  5. Aleks666

    Aleks666 Нуб

    Вопрос:
    зачем в строк

    Serial3.print("t0.txt=\"haha\"");
    слеши?
     
  6. Mitrandir

    Mitrandir Гуру

    Слеши чтобы компилятор понял что кавычка это кавычка а не конец строкового литерала

    если так сделать:

    Serial3.print("t0.txt="haha"");

    то компилятор увидит что передаем фунцкции строку t0.txt= после которой какой-то мусор и даст ошибку
     
  7. Aleks666

    Aleks666 Нуб

    Теперь понял
     
  8. Aleks666

    Aleks666 Нуб

    тогда почему не сработал?
    Код (C++):
    void setup(){
    Serial3.begin(9600);
    }
    void loop(){
    SendData(t0, hello);
    }
    void SendData(String div, String data)
    {
    Serial3.print(div);
    Serial3.print(=);
    Seial3.print(data);
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
    }
     
  9. Mitrandir

    Mitrandir Гуру

    Сейчас загрузил такой скетч, у меня все работает:
    Код (C++):
    void setup() {
      // put your setup code here, to run once:
       Serial1.begin(9600);
       Serial1.print("t0.txt=\"hello world\"");
       Serial1.write(0xFF);
       Serial1.write(0xFF);
       Serial1.write(0xFF);
       delay(5000);
    }

    void loop() {
      // put your main code here, to run repeatedly:
       Serial1.print("t0.txt=\"secs=");
       Serial1.print(millis()/1000);
       Serial1.print("\"");
       Serial1.write(0xFF);
       Serial1.write(0xFF);
       Serial1.write(0xFF);
       delay(1000);
    }
    подключено надеюсь правильно?
     
  10. Mitrandir

    Mitrandir Гуру

    что в переменных t0 и hello?
     
  11. Aleks666

    Aleks666 Нуб

    Ваш код работает, буду его курить чтоб функцию написать
     
  12. Mitrandir

    Mitrandir Гуру

    у вас кавычек нехватает в сеетче.
    почему знак равно сам по себе без кавычек?
     
  13. Aleks666

    Aleks666 Нуб

    дописал ваш код
    Код (C++):
    void setup(){
    Serial3.begin(9600);
    }
    void loop(){
    SendData("t0.txt", "hello");
    }
    void SendData(String div, String data)
    {
    Serial3.print(div);
    Serial3.print("=\"");
    Serial3.print(data);
    Serial3.print("\"");
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
    }
    заработало
     
  14. DIYMan

    DIYMan Гуру

    Чтобы не насиловать оперативку, предлагаю объявление
    Код (C++):
    void SendData(String div, String data)
    сменить на
    Код (C++):
    void SendData(const String& div, const String& data)
    Это сильно правильнее.
     
    Aleks666, ИгорьК и Mitrandir нравится это.
  15. Svorog

    Svorog Нерд

    Всем доброго дня! не стал заводить новую тему, пытаюсь подключить nextion к меге, необходимо вывести количество импульсов с энкодера, с помощью вашей ветки заменил софтсериал на аппаратный сериал и пытаюсь вывести в текстовое поле t0 значение переменной счетчик/1000, но что то экран не отзывается, можете подсказать в чем дело?

    Код (C++):
    #include <Wire.h>
    volatile char ABprev = 0;
    const int increment[16] = {0,-1,1,0, 1,0,0,-1, -1,0,0,1, 0,1,-1,0};
    float chetchic = 0.000;

    ISR (PCINT0_vect) { //
      char AB = PINB & 3;
      chetchic += increment[AB+ABprev*4];
      ABprev = AB;
    }

    void setup() {
      pinMode(8, INPUT);  // A
      pinMode(9, INPUT);  // B
      PCICR |= (1 << PCIE0);  //
      PCMSK0 |= 3;
      ABprev = PINB & 3;
       Serial.begin(115200);
    }

    void loop() {
                                                        // Следующее действие выполням каждые 50мс
        SendData("t3.txt", "chetchic/1000");
    }
    void SendData(const String& div, const String& data)
    {
    Serial3.print(div);
    Serial3.print("=\"");
    Serial3.print(data);
    Serial3.print("\"");
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
        }
     
     
  16. DIYMan

    DIYMan Гуру

    Ответьте на вопрос: что, по вашему мнению, должно отправляться в указанной строке?
     
  17. Svorog

    Svorog Нерд

    ну предполагаю значение переменной делёное на 1000, через монитор порта выдает уже готвый
     
  18. Svorog

    Svorog Нерд

    ...результат, думал на экран значит тоже можно так сразу выводить. нужно оставить только переменную?
     
  19. DIYMan

    DIYMan Гуру

    Т.е. строка "chetchic/1000" - это значение переменной, делённое на 1000? Однако. Вы правда не понимаете, да?
     
  20. timon

    timon Нерд

    Вы определитесь ) Вы либо переменную заранее посчитайте на МК либо передайте на экран в виде числа и уже там посчитайте и выводите.

    Но передвать t3.txt=“chetchik/1000” не очень )))