Nextion + arduino mega2560

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

  1. timon

    timon Гик

    Кстати что бы софтсериал работал его надо вешать на пины которые умеют в прерывания, 8,9,10,11 и еще какие то не помню навскидку на Леонардо. У меня экран на 10,11 прекрасно работает по софтсериалу.
     
    Последнее редактирование: 23 дек 2018
  2. Svorog

    Svorog Нерд

    ну у меня конфликтовали прерывания подсчета импульсов энкодера и прерывания библиотеки софтсериал, даже компиляцию не проходил.
    Деление переменной я конечно уберу, но дисплей что то даже "хеллоу" не выводит, может у меня перепутанные сериалы? слышал на меге 1-3 бывает в обратном порядке китайцы подписывают, у меня 3-й сериал на 14, 15 пинах это нормально? Rx и Tx подключаю инверсно к Tx и Rx ардуине, это правильно?
     
  3. timon

    timon Гик

    Я про Мегу не в курсе.
    Отключите все от нее кроме экрана и заводите его «с кривого» пока не заработает. А потом уже докидывайте остальное и смотрите что чему мешает.

    Все по науке сделали?
    • Завели переменную в HMI t0 она текст и в ней newtext по умолчанию?
    • HMI скомпилили в *.tft и залили в экран?
    • Шлете на экран t0.txt=“test”
    И ничего?
     
  4. Svorog

    Svorog Нерд

    Да(. Создаю некшен эдиторе текстовое поле t0, настраиваю шрифт, прогоняю в эмуляторе, t0.txt="1234" выводит 1234, все ок заливаю на дисплей, появляется надпись ньютхт, на ардуину загружаю код из 13 поста с комментарием заработало, и у мена не работает( надпись не меняется.



    Код (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);
    }
     
  5. timon

    timon Гик

    Не очень понял смысловую конструкцию, но предположу что не работает )))

    Проверяйте подключение, если ничего не меняется. Экран может прекрасно работать и показывать то чем вы его прошили, но если он подключен не так - поменять вы там ничего не сможете даже если просто выполните Serial3.print(“t0.txt=\”test\””);
    Serial3.write(255,255,255);

    Пропробуйте все же через софт сериал на нужных пинах (инфу ниже нашел по меге)

    Вот тут пример хороший по этому экрану же.
     
    Последнее редактирование: 23 дек 2018
  6. timon

    timon Гик

    Svorog, кстати в .h файле софт сериала расписана распиновка, может даже для Меги, не помню.
     
  7. timon

    timon Гик

    • Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
    • Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
    https://www.arduino.cc/en/Reference/SoftwareSerial
     
  8. Svorog

    Svorog Нерд

    спасибо, буду пробовать
     
  9. Svorog

    Svorog Нерд

    Подскажите пожалуйста! как вывести переменную "Х" в текстовое поле t0 ?
    в настоящее время на экран выводится букву Х, а не значение переменной.


    Код (C++):
    void loop(){
    SendData("t0.txt", "X");
    }
    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);
    }
     
  10. timon

    timon Гик

    Все правильно у вас выводится, именно так как вы запрграммили )) что бы вывести значение переменной вам надо ее передать не как строку а как int например (или что там у вас по значениям). То есть int data в функции. И вызывать ее SendData(“t0.txt”,x);
     
  11. Svorog

    Svorog Нерд

    Спасибо, изменил на float data, число появилось)
    теперь проблема как получить 3 знака после запятой? в настоящее время выводитцелую часть от деления и 2 нуля после запятой Х,00
     
  12. timon

    timon Гик

    Попробуйте так
    Serial3.print("%.3f",data);
    Не уверен что сработает ))
     
  13. Svorog

    Svorog Нерд

    не компилируется: no matching function for call to print(const char...
     
  14. timon

    timon Гик

    А вот так?
    Serial3.print(String(data,3));
     
    Svorog нравится это.
  15. Svorog

    Svorog Нерд

    откомпилировалась, 3 нуля появились, но все равно выводится только целая часть... Х, 000
     
  16. timon

    timon Гик

    Может там число целое? ))
     
  17. Svorog

    Svorog Нерд

    нет, у меня там количество импульсов деленное на 1000, целым бывает в очень редких случаях)
     
  18. timon

    timon Гик

    А весь код покажите?
     
  19. Svorog

    Svorog Нерд

    Код (C++):
    #include <Nextion.h>

    #define encoder0PinA 2
    #define encoder0PinB 3
    volatile long encoder0Pos;

    #include <Wire.h>
    float X = 0.000;

    void setup () {
    Serial3.begin (9600);
    pinMode(encoder0PinA, INPUT);
    pinMode(encoder0PinB, INPUT);
    attachInterrupt(0, encoder0PinChangeA, CHANGE);
    attachInterrupt(1, encoder0PinChangeB, CHANGE);
    encoder0Pos = 0;

    }
    void loop()
    {
    SendData("t0.txt",X);
    }
    void SendData(String div,float data)
    {
    X=encoder0Pos/1000;
    Serial3.print(div);
    Serial3.print("=\"");
    Serial3.print(String(data,3));
    Serial3.print("\"");
    Serial3.write(0xff);
    Serial3.write(0xff);
    Serial3.write(0xff);
    delay(100);
    }
    void encoder0PinChangeA() {
    if (digitalRead(encoder0PinA) == HIGH) {

    if (digitalRead(encoder0PinB) == LOW) {
    encoder0Pos = encoder0Pos + 1; // CW
    }
    else {
    encoder0Pos = encoder0Pos - 1; // CCW
    }
    }
    else
    {
    if (digitalRead(encoder0PinB) == HIGH) {
    encoder0Pos = encoder0Pos + 1; // CW
    }
    else {
    encoder0Pos = encoder0Pos - 1; // CCW
    }
    }
    }

    void encoder0PinChangeB() {
    if (digitalRead(encoder0PinB) == HIGH) {
    if (digitalRead(encoder0PinA) == HIGH) {
    encoder0Pos = encoder0Pos + 1; // CW
    }
    else {
    encoder0Pos = encoder0Pos - 1; // CCW
    }
    }
    else {
    if (digitalRead(encoder0PinA) == LOW) {
    encoder0Pos = encoder0Pos + 1; // CW
    }
    else {
    encoder0Pos = encoder0Pos - 1; // CCW
    }
    }
    }
     
  20. timon

    timon Гик

    Я фиг что понял, но скорее всего String(data,3) тут не подойдет. Я хз как в этом конкретном Си вывести х-знаков после запятой, кроме как затолкать Х в строку или массив char и обработать это функцией «вернуть в стринге число, точку и еще три числа после точки» )))