Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Videoporadnik wyświetlacze NEXTION

ekrzychoooo 14 Nov 2018 13:13 20247 237
  • #61
    sq9cyg
    Level 11  
    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...

    Code: c
    Log in, to see the code
    [/code]
  • LegrandLegrand
  • #62
    ekrzychoooo
    Level 17  
    Code: objc
    Log in, to see the code


    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
    Code: c
    Log in, to see the code

    tu pokazuję że nie funkcją itoa
  • #63
    sq9cyg
    Level 11  
    Przeniosłem wszystko na jedną stronę ale ten sam efekt...
    Dokładnie program w tym miejscu utyka :(
  • #65
    Jarzabek666
    Level 34  
    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
    Level 17  
    Quote:
    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ć.

    Quote:
    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?

    Quote:
    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
    Level 11  
    ekrzychoooo wrote:
    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?
    Code: c
    Log in, to see the code



    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.
  • LegrandLegrand
  • #68
    ekrzychoooo
    Level 17  
    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 wrote:
    Jeszcze konwersja float to ascii

    Kod: c [rozwiń] [zaznacz wszystko]

    itoa(tempC1, buffer0, 10);

    tu pokazuję że nie funkcją itoa
  • #69
    sq9cyg
    Level 11  
    ekrzychoooo wrote:
    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 wrote:
    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...

    Code: c
    Log in, to see the code


    Natomiast niestety samo wstawienie temp8E.setText("1234"); już blokuje sterowanie przekaźnikami....
  • #70
    ekrzychoooo
    Level 17  
    Może to Ci pomoże
    funkcja setText:
    Code: c
    Log in, to see the code

    dalej
    Code: c
    Log in, to see the code

    i
    Code: c
    Log in, to see the code

    i
    Code: c
    Log in, to see the code


    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
    Level 17  
    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
    Level 11  
    Arduino mega2560.
    Samo wyświetlenie na monitorze portu szeregowego jest OK...
    Niestety na samym wyświetlaczu nextion sie psuje ;(
  • #74
    ekrzychoooo
    Level 17  
    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ą:
    Code: c
    Log in, to see the code

    Należy przyglądnąć się funkcji setText
    Code: c
    Log in, to see the code

    i jest tam funkcja sendCommand która wygląda tak:
    Code: c
    Log in, to see the code

    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
    Level 34  
    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
    Level 11  
    To napisz dlaczego?
    Ja jestem super początkujący więc każda uwaga mile widziana.
  • #78
    Jarzabek666
    Level 34  
    Po pierwsze jest bład w tem1 blednę ID.

    Po drugie brak zdefiniowanych temp8E,temp56.
  • #80
    Jarzabek666
    Level 34  
    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
    Level 12  
    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
    Level 34  
    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
    Level 12  
    Jarzabek666 wrote:
    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
    Level 12  
    Jarzabek666 wrote:
    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.
    Level 34  
  • #87
    kaino
    Level 12  
    rs6000 wrote:
    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.
    Level 34  
    Musi dzialac, moze masz blad w instrukcji warunkowej, wywolaj to np. w setup i sprawdz.

    Pozsr

    Dodano po 59 [minuty]:

    Spróbuj jeszcze tak :

    Code: c
    Log in, to see the code

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

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