Nextion + arduino mega2560

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

  1. Svorog

    Svorog Нерд

    ну это из разряда
    без него он ругается на незадекларированный 'myNextion' в строке " String message = myNextion.listen(); //check for message"
     
  2. b707

    b707 Гуру

    ну вы в библиотеке-то Nextion.h разобрались? знаете, что за параметр в контруктор передается? - или это я за вас должен в библиотеку лезть?
    Откройте файл библиотеки и почитайте - там и про параметр nextion поймете, и как перестроить работу с софтового на железный сериал.
    А если вы эти примеры втемную применяете, ни черта не понимая - ничего у вас не выйдет, учитесь для начала. Получая информацию "точечно" на форумах ничего серьезного не создашь.
     
  3. Svorog

    Svorog Нерд

    я вот не понимаю есть "SendData("t0.txt",X);" команда которая спокойно обращается к экрану и выводит то что надо, должна же быть и аналогичная которая считывает с него не требую дополнительных объявлений и т.д.
     
  4. timon

    timon Гик

    Нет. Мега не лезет в экран за данными, она слушает экран. Это принципиальная разница. Поэтому вы должны поймать сообщение с экрана, которое пройдет по Serial (согласно коду в вашем HMI экрана) и обработать его.
     
  5. Svorog

    Svorog Нерд

    написал раньше чем вы ответили, нет вы мне ничего не должны, это вопрос для тех кто с этим сталкивался и может подсказать как решить.
     
  6. b707

    b707 Гуру

    вы хотите сказать, что у вас в коде SendData() работает? - не верю.
    Куда она посылает, если вы не описали, к какому сериалу экран подключен?
     
  7. b707

    b707 Гуру

    я с этим не сталкивался, но как решить знаю.
    Там нет ничего сложного, для этого достаточно в библиотеку заглянуть. и разобраться, как она работает
    Но обьяснить это вам, когда вы элементарного не знаете - у меня не выйдет, я талантом Макаренко обделен.
     
  8. timon

    timon Гик

    Да у вас это от не понимания как вообще работает Некстион ))
    Там просто СОМ-порт и все. Отправили в экран буквы, приняли буквы.

    Как то вот так:
    Код (C++):
    // переменная для хранения посылки данных
    String data;

    void setup()
    {
      // открываем последовательный порт
      Serial.begin(9600);
    }

    void loop()
    {
      // ждём данные от дисплея
      while (Serial.available() > 0) {
        data += char(Serial.read());
        delay(2);
      }
      // если пришёл символ 'g'
      if (data == "g") {
        Serial.print("va0.txt=\"aaaa\"");
        // дописываем в посылку служебные символы конца команды
        comandEnd();
      }
    }

    void comandEnd() {
      for (int i = 0; i < 3; i++) {
        Serial.write(0xff);
      }
    }
     
     
    Svorog нравится это.
  9. b707

    b707 Гуру

    если кратко - "nextion" в вашем коде - это указатель на последовательный порт, к котором подключен экран. Чтобы все примеры заработали, вам нужно сначала определить переменную для порта, правильно ее задекларировать, потом связать ее с аппаратным сериалом, к клорому присоединен дисплей - и передать это значение в конструктор класса Nextion в скетче. Причем чтобы использовать железнвй сериал вместо софтового, нужно еще в самой библиотеке закомментировать одну строчку - там в комментариях сказано.
     
  10. timon

    timon Гик

    Там вообще не понятно зачем СОМ-порту библиотека ))) Все прекрасно через Serial / SoftSerial работает..
     
    b707 нравится это.
  11. Svorog

    Svorog Нерд

    этот код для двух моих координат выводит значения на экран, то что присылал перед этим лишь добавка если если получили сообщение "FFF" то обнуляем...
    Код (C++):
    #include <Wire.h>

    #include <Nextion.h>
    #define encoder0PinA 2
    #define encoder0PinB 3
    volatile long encoder0Pos;

    #define encoder1PinA 21
    #define encoder1PinB 20

    volatile long encoder1Pos;

    float X = 0.000;
    float Y = 0.000;

    boolean button1State;
    boolean button2State;

    void setup () {
      Serial3.begin(9600);
      // then the encoder inputs
      pinMode(encoder0PinA, INPUT);
      pinMode(encoder0PinB, INPUT);

      // encoder pin on interrupt 0 (pin 2)
      attachInterrupt(0, encoder0PinChangeA, CHANGE);
      // encoder pin on interrupt 1 (pin 3)
      attachInterrupt(1, encoder0PinChangeB, CHANGE);
      encoder0Pos = 0; //reseet the encoder position to 0



      // then the encoder inputs
      pinMode(encoder1PinA, INPUT);
      pinMode(encoder1PinB, INPUT);


      // encoder pin on interrupt 0 (pin 2)
      attachInterrupt(2, encoder1PinChangeA, CHANGE);
      // encoder pin on interrupt 1 (pin 3)
      attachInterrupt(3, encoder1PinChangeB, CHANGE);
      encoder1Pos = 0; //reseet the encoder position to 0
    }
    void loop() {
    SendData("t0.txt",X);
    SendData("t1.txt",Y);
    {
      encoder0Pos = 0;
        encoder1Pos = 0;
      }
    }
    void SendData(String div,float data)
    {
      X=encoder0Pos/1000.000;
      Y=encoder1Pos/1000.000;
      Serial3.print(div);
    Serial3.print("=\"");
    Serial3.print(data,3);
    Serial3.print("\"");
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
         delay(100);
    }

    void encoder0PinChangeA() {
    // look for a low-to-high on channel A
      if (digitalRead(encoder0PinA) == HIGH) {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder0PinB) == LOW) {
          encoder0Pos = encoder0Pos + 1;        // CW
        }
        else {
          encoder0Pos = encoder0Pos - 1;        // CCW
        }
      }
      else  // must be a high-to-low edge on channel A                            
      {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder0PinB) == HIGH) {
          encoder0Pos = encoder0Pos + 1;          // CW
        }
        else {
          encoder0Pos = encoder0Pos - 1;          // CCW
        }
      }
    }

    void encoder0PinChangeB() {
      // look for a low-to-high on channel B
      if (digitalRead(encoder0PinB) == HIGH) {
      // check channel A to see which way encoder is turning
        if (digitalRead(encoder0PinA) == HIGH) {
          encoder0Pos = encoder0Pos + 1;        // CW
        }
        else {
          encoder0Pos = encoder0Pos - 1;        // CCW
        }
      }
      // Look for a high-to-low on channel B
      else {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder0PinA) == LOW) {
          encoder0Pos = encoder0Pos + 1;          // CW
        }
        else {
          encoder0Pos = encoder0Pos - 1;          // CCW
        }
      }
    }




    void encoder1PinChangeA() {
    // look for a low-to-high on channel A
      if (digitalRead(encoder1PinA) == HIGH) {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder1PinB) == LOW) {
          encoder1Pos = encoder1Pos + 1;        // CW
        }
        else {
          encoder1Pos = encoder1Pos - 1;        // CCW
        }
      }
      else  // must be a high-to-low edge on channel A                            
      {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder1PinB) == HIGH) {
          encoder1Pos = encoder1Pos + 1;          // CW
        }
        else {
          encoder1Pos = encoder1Pos - 1;          // CCW
        }
      }
    }

    void encoder1PinChangeB() {
      // look for a low-to-high on channel B
      if (digitalRead(encoder1PinB) == HIGH) {
      // check channel A to see which way encoder is turning
        if (digitalRead(encoder1PinA) == HIGH) {
          encoder1Pos = encoder1Pos + 1;        // CW
        }
        else {
          encoder1Pos = encoder1Pos - 1;        // CCW
        }
      }
      // Look for a high-to-low on channel B
      else {
        // check channel B to see which way encoder is turning
        if (digitalRead(encoder1PinA) == LOW) {
          encoder1Pos = encoder1Pos + 1;          // CW
        }
        else {
          encoder1Pos = encoder1Pos - 1;          // CCW
        }
      }
    }
     
  12. b707

    b707 Гуру

    Замечательно. этот код вообще не использует библиотеку Nextion. Сами писали или где-то стырили?
    Если сами - так нафига вам библиотека, напишите в этом же стиле не только отправку данных (SendData) - но и получение, там нет абсолютно никакого шаманства, самая обыкновенная работа с Serial
     
  13. b707

    b707 Гуру

    и я так думаю :)
     
  14. Svorog

    Svorog Нерд

    подсчёт импульсов нашел готовый, на дисплей вывел с помощью первых 3 страниц переписки
     
  15. b707

    b707 Гуру

    понимаете, функция SendData у вас самописная, в ней внутри явно указано, что дисплей подключен к Serial3. А для чтения вы пытаетесь использовать библиотеку. Чтобы библиотека работала - ей тоже надо указать, что дисплей висит на Serial3 - это понятно?
    В Вашем же коде вы не только не передаете параметр Serial3 в библиотеку - по вашим сообщениям я вижу что вы вообще не понимаете, как работать с портами.

    Вам надо либо разобраться с тем, как перевести библиотеку Nextion на аппаратный сериал, либо отказаться от библиотеки и написать еще одну самописную функцию, такую как SendData - но уже для чтения с дисплея.

    Честно говоря, я не думаю. что у вас получится что-то путное. Учиться вы не хотите, желаете получать знания "точечно"... то иными словами - ждете, что кто-то за вас напишет. Такой подход без меня.
     
  16. Svorog

    Svorog Нерд

    Вы в очередной раз для меня подтвердили позицию Гуру, я же писал что вы мне ничего не должны, а обращаюсь я к тем специалистам которые с этим вопросом сталкивались и готовы помочь. честно говоря не понял кто мне чего писал до этого, я увидел похожую ситуацию в темах попробовал применить на своем примере - не получилось, пообщался здесь же мне подсказали как вывести переменную вместо текста, никто за меня ничего не писал, по-моему так и должен работать форум!
     
  17. b707

    b707 Гуру

    ну то есть в одном месте нули после запятой вылезли - идем на форум. С грехом пополам тебе это растолковали, а точнее дали готовый код - а назавтра у тебя запятая в компиляторе ошибку дала и ты снова на форум лезешь?

    Ты считаешь, что именно так должны работать форумы? - то есть мы сюда не общаться пришли, а беспрестранно обьяснять лентяям элементарные вещи, изложенные в любом мануале для чайников?

    Знаешь, новичку простительно задавать глупые вопросы. Но когда человек задает и второй и третий раз вопросы про базовые понятия, вместо того чтоб почитать учебник - это уже не новичек называется, а ленивый халявщик
     
    DetSimen нравится это.
  18. Svorog

    Svorog Нерд

    Edf
    Ну вы же опытный человек, сразу увидели что второй и третий раз задаю вопросы про базовые понятия, не понимаю чего наглого было в моем вопросе что не позволило вам удержаться и заставило залезть в эту тему начать рассказывать мне как надо жить.

    Уточню свой вопрос: есть ли здесь люди которые уже использовали сенсорные кнопки nextiona с Мегой и кому не жалко показать эти уже написанные несколько строк или может кто то может дать ссылку на подобный пример.

    P.S. гуру видящих в моей просьбе наглую халяву прошу сэкономить своё и чужое время и воздержаться от комментариев.
     
  19. timon

    timon Гик

    Есть. Использовали. Мега или что то другое - не важно, так как работа с Nextion экранами идет через СОМ-порт. Несколько базовых строк показаны выше в моем предыдущем вам сообщении. В чем затруднения?
     
  20. Svorog

    Svorog Нерд

    Спасибо, код видел, но ещё не пробовал с ним работать, был занят - отбивался от гуру.