Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Videoporadnik wyświetlacze NEXTION

ekrzychoooo 14 Lis 2018 13:13 9987 172
  • #61
    sq9cyg
    Poziom 10  
    Zrobiłem pomiar temperatury na dwóch ds-ach i sterowanie dwoma przekaźnikami.
    Jak za komentuje wywołanie procedury "temperatureDisplay();" w void:loop to sterowanie przekaźnikami z poziomu wyświetlacza dotykowego działa.
    Ale jak od komentuje to sterowanie wyjściami nie działa...

    Kod: c
    Zaloguj się, aby zobaczyć kod
    [/code]
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • #62
    ekrzychoooo
    Poziom 15  
    Kod: objc
    Zaloguj się, aby zobaczyć kod


    Być może utyka program w temperatureDisplay() a konkretnie w temp8E.setText(buffer0);. temp8E masz na stronie 4 a button na 6.
    Zobacz film o global vs local.

    Dodano po 36 [minuty]:


    Jeszcze konwersja float to ascii
    Kod: c
    Zaloguj się, aby zobaczyć kod

    tu pokazuję że nie funkcją itoa
  • #63
    sq9cyg
    Poziom 10  
    Przeniosłem wszystko na jedną stronę ale ten sam efekt...
    Dokładnie program w tym miejscu utyka :(
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • #64
    ekrzychoooo
    Poziom 15  
    przesuwaj linię Serial.print("return display");w górę aż się dowiesz gdzie utkną.
    Czy po zmianach w wyświetlaczu zmieniłeś poniższe linie?
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #65
    Jarzabek666
    Poziom 30  
    Powiedz mi "ekrzychoooo" bo widzę że kumasz te wyświetlacze. Czy wersje z GPIO są 3,3V czy 5v?

    0-pull up input, 1-input binding, 2-push pull output,
    3-PWM output, 4-open drain output.

    Druga sprawa dlaczego jak ustawię w trybie 4 blokuje mi już włączenie na innej stronie?
    I jeszcze takie małe pytanie początkującego czy można podłączyć do tych portów np. czujnik dth? napisas biblitekę na stronie by odczytywało bezpośrednio.
  • #66
    ekrzychoooo
    Poziom 15  
    Cytat:
    Czy wersje z GPIO są 3,3V czy 5v?

    Właśnie tego jasno nie podają. Ale można przedzwonić gdzie te piny idą. Te wyświetlacze są chyba na STM32. Jak dojdziesz gdzie te piny idą to z dokumentacji scalaka można dojść czy można tam 5V podać.

    Cytat:
    Druga sprawa dlaczego jak ustawię w trybie 4 blokuje mi już włączenie na innej stronie?

    Nie bardzo rozumiem o co chodzi. Możesz zamieścić plik hmi?

    Cytat:
    czy można podłączyć do tych portów np. czujnik dth? napisas biblitekę na stronie by odczytywało bezpośrednio.

    Pewnie by można ale to będzie program przypominający BASCOM albo gorzej. (brak funkcji w tych kodach wyświetlacza). Na którymś filmie pokazywałem jak zrobić namiastkę GOSUB ale to tak doraźnie można.
  • #67
    sq9cyg
    Poziom 10  
    ekrzychoooo napisał:
    przesuwaj linię Serial.print("return display");w górę aż się dowiesz gdzie utkną.
    Czy po zmianach w wyświetlaczu zmieniłeś poniższe linie?
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Tak tak zamieniłem oczywiście że zamieniłem.
    Przesuwanie serial.print nie daje nic w ramach procedury temperatureDisplay();.
    Przez monitor portu szeregowego cały czas pomiar jest...
    Po zakomentowaniu linijek //temp8E.setText(buffer0); program działa normalnie. Tzn przez monitor portu szeregowego temperatura jest mierzona, wiadomo na wyświetlaczu nic się nie wyświetla, ale sterowanie wyjściami działa OK.
  • #68
    ekrzychoooo
    Poziom 15  
    Spróbuj
    temp8E.setText("1234");
    Jeśli to zadziała to buffer0 zawiera złe dane (brak znaku null kończącego text).
    W poście #62 pisałem też:
    ekrzychoooo napisał:
    Jeszcze konwersja float to ascii

    Kod: c [rozwiń] [zaznacz wszystko]

    itoa(tempC1, buffer0, 10);

    tu pokazuję że nie funkcją itoa
  • #69
    sq9cyg
    Poziom 10  
    ekrzychoooo napisał:
    Spróbuj
    temp8E.setText("1234");
    Jeśli to zadziała to buffer0 zawiera złe dane (brak znaku null kończącego text).
    W poście #62 pisałem też:
    ekrzychoooo napisał:
    Jeszcze konwersja float to ascii

    Kod: c [rozwiń] [zaznacz wszystko]

    itoa(tempC1, buffer0, 10);

    tu pokazuję że nie funkcją itoa


    Tak tak zmieniłem to, przepraszam nie napisałem...

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Natomiast niestety samo wstawienie temp8E.setText("1234"); już blokuje sterowanie przekaźnikami....
  • #70
    ekrzychoooo
    Poziom 15  
    Może to Ci pomoże
    funkcja setText:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    dalej
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i
    Kod: c
    Zaloguj się, aby zobaczyć kod


    widać że nawet przy braku odpowiedzi z wyświetlacza funkcja setText może utknąć na 100ms.

    Wstaw tu załącznik z plikiem arduino i plikiem hmi. Może w weekend znajde coś czasu dla testu.
  • #72
    ekrzychoooo
    Poziom 15  
    Nie wiem jakiego arduino używasz.
    Ja to wrzuciłem na pro-mini i wszędzie gdzie jest Serial.print trafia mi do wyświetlacza i robi się jeden wielki bigos.

    Dla potomności:

    Jak podajecie kod arduino do sprawdzenia przesyłajcie plik NexConfig.h

    Od tego pliku zależy konfiguracja portów uart.
  • #73
    sq9cyg
    Poziom 10  
    Arduino mega2560.
    Samo wyświetlenie na monitorze portu szeregowego jest OK...
    Niestety na samym wyświetlaczu nextion sie psuje ;(
  • #74
    ekrzychoooo
    Poziom 15  
    Sprawa okazała się bardziej skomplikowana niż przypuszczałem.
    Jeżeli dość intensywnie używamy w programie funkcji ObjTXT.setText("text"); to sprawa się mocno komplikuje. ale po kolei.
    Po uruchomieniu arduino mamy coś takiego:
    Videoporadnik wyświetlacze NEXTIONPrzechwyty..nie.PNG Download (23.09 kB)
    w okienku MCU return widać że arduino wysyła bkcmd=1 a według dokumentacji powinno być 2.
    Videoporadnik wyświetlacze NEXTIONPrzechwyty..ie2.PNG Download (13.1 kB)
    W setup można zmusić go komendą:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Należy przyglądnąć się funkcji setText
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i jest tam funkcja sendCommand która wygląda tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Widać że "zjada" ona dane z bufora wejściowego.
    po naciśnięciu przycisku na wyświetlaczu, wyświetlacz wysyła do arduino np 65 04 03 00 FF FF FF
    Videoporadnik wyświetlacze NEXTIONPrzechwyty..ie3.PNG Download (24.91 kB)
    czyli info o naciśnięciu klawisza idzie do arduino ale zostaje "połknięte" przez funkcję setText().
    Rozwiązanie to np wyświetlanie temperatury np co 2sekundy. No ale to takie rozwiązanie pod tytułem "technologie obejściowe" :D
    Chyba należało by przerobić trochę te biblioteki bo widać idealne nie są.
    Pomyśle nad tym i się odezwę. Może nowy odcinek na Youtube.
    I jeszcze moja rada to w projekcie używamy debagera na PC i jak już wszystko działa to dopiero wysyłamy do wyświetlacza. W debagerze widać dane wchodzące i wychodzące.
  • #76
    Jarzabek666
    Poziom 30  
    Ja się dziwię że w ogóle coś tam pokazuje ten kod z arduino to jeden wielki burdel i śmietnik. I tak go spogądając jako początkujący nie widzę zdeklarowanej pentli dla wyświetlania temperatur w nextion

    Code:
    void loop() {
    
        Serial.print("Requesting temperatures...");
      sensors.requestTemperatures();
      Serial.println("DONE");

      // print the device information
      printData(insideThermometer);
      printData(outsideThermometer);

      temperatureDisplay();

        nexLoop(nex_Listen_List);
     

    }


    Code:
    NexTouch *nex_Listen_List[] = 
    
    {
      &b0,&b1,
    NULL
    };


    Code:
    void b0PopCallback(void *ptr){
    
      digitalWrite(4,!digitalRead(4));
       
    }

    void b1PopCallback(void *ptr){
      digitalWrite(3,!digitalRead(3)); 
    }



    A gdzie sie podział kod do wyświetlania temperatur??

    to nie będzie działać

    Code:
    number = ((float)tempC1/60)*180-30;
    
    memset(buffer0, 0, sizeof(buffer0));
    String temp1txt = String (tempC1,2);
    temp1txt.toCharArray(buffer0,10);
    //temp8E.setText(buffer0);
    //temp8E.setText("1234");
    number1 = ((float)tempC2/60)*180-30;
    memset(buffer1, 0, sizeof(buffer1));
    String temp2txt = String (tempC2,2);
    temp2txt.toCharArray(buffer1,10);
    //temp56.setText(buffer1);


    Code:
    NexText temp8E = NexText(4,1,"tem");
    
    NexText temp56 = NexText(4,5,"tem1");
  • #77
    sq9cyg
    Poziom 10  
    To napisz dlaczego?
    Ja jestem super początkujący więc każda uwaga mile widziana.
  • #78
    Jarzabek666
    Poziom 30  
    Po pierwsze jest bład w tem1 blednę ID.

    Po drugie brak zdefiniowanych temp8E,temp56.
  • #79
    ekrzychoooo
    Poziom 15  
    1. Wduszam ctrl-F tu na stronie i wpisuję temp8E i jest definicja w wypowiedzi #61.
    2. Nawet jak ID jest złe to funkcja setText działa po objName. Co nie znaczy że w kodzie może być bałagan.
  • #80
    Jarzabek666
    Poziom 30  
    A tu to widzę.

    Też z podobnym walczę czujnikiem ciśnienia wykrzacza mi cały program na czujnik dht i ciśnenie wyczaiłem że chodzi o liczby całkowite/zmiennoprzecinkowe.
  • #81
    kaino
    Poziom 11  
    Mam pytanie jak z arduino wywołać daną stronę w nextion ?

    czyli jak przekroczy temperature dc by wyświetlało strone pages s1
  • #82
    Jarzabek666
    Poziom 30  
    0x66 Current Page Number 0x66 0x01 0xFF 0xFF 0xFF
    Returned when the sendme command is used.
    0x01 is current page number
    data: page 1
  • #83
    kaino
    Poziom 11  
    Jarzabek666 napisał:
    0x66 Current Page Number 0x66 0x01 0xFF 0xFF 0xFF
    Returned when the sendme command is used.
    0x01 is current page number
    data: page 1


    NIe bardzo mi to cos mówi :)
  • #85
    kaino
    Poziom 11  
    Jarzabek666 napisał:
    No to nic nie poradzę że nie znasz podstawowych instrukcji wyświetlacza, ta funkcja działa w dwie strony czyli wysyła do ardunio jaka załadowana strona i ardunio może wysłać jaką ma załadować stronę.

    Zapoznaj się z tym https://nextion.itead.cc/resources/documents/instruction-set/


    sendCommand ("0X66 0X02 0XFF 0XFF 0XFF");

    strona id to 2

    i nie działa
  • #86
    Slawek K.
    Poziom 32  
  • #87
    kaino
    Poziom 11  
    rs6000 napisał:
    Wyslij za pomoca sencommand polecenie : page nr_strony czyli np. "page 1"

    Pozdr


    robiłem już tak

    myNextion.sendCommand("page 0");

    ale nie działa
  • #88
    Slawek K.
    Poziom 32  
    Musi dzialac, moze masz blad w instrukcji warunkowej, wywolaj to np. w setup i sprawdz.

    Pozsr

    Dodano po 59 [minuty]:

    Spróbuj jeszcze tak :

    Kod: c
    Zaloguj się, aby zobaczyć kod

    przyjmując, że iD strony którą chcesz wywołać to 2.

    Pozdr
  • #89
    moeneo
    Poziom 2  
    Witam. dziękuje autorowi za obszerne tutoriale.
  • #90
    sq9cyg
    Poziom 10  
    Czy komuś się udało rozwiązać mój problem?