Nextion Ekran RX/TX Haberleşme

Başlatan berkay_91, 29 Ağustos 2018, 22:36:34

berkay_91

Nextion ekrandan data geldikten hemen sonra arduinonunda ekrana farklı bir data göndermesi gerekiyor, arduino gelen datayı doğru bir şekilde okumasına rağmen ekrana düzgün bir şekilde data gönderemiyor, fakat nextiondan data gelmediği zamanlarda arduino düzgün bir şekilde istenilen rakamları gönderebiliyor... RX-TX haberleşmeler arasına delay(1000); koydum ama yine yemedi yardımcı olur musunuz?

bsenguler


berkay_91

#2
zaman_kontrol() fonksiyonundan zaman dolduğu için çıkarsa Default_work_time_value() fonksiyonuna girip default değerleri düzgün bir şekilde gönderebiliyor, fakat program zaman_kontrol() fonksiyonunun içindeki while döngüsünde iken nextion dan bir data(pw=101) gelip çıkar ise Default_work_time_value() fonksiyonunun içine yine giriyor fakat dataları düzgün bir şekilde gönderemiyor nextion da sadece 00:00:00 lar gözükyor... while döngüsünden her iki çıkış durumunda da Buton_value() fonksiyonundaki değer düzgün bir şekilde gönderiliyor

#include <Wire.h>
#include <DS1307new.h>

byte sayac[3], pw, zm, st, dk, sn, r1, r2, dm, st2, dk2, sn2;
byte saniye, dakika, saat;
bool kontrol=false;
char v[3];

void setup(){
  Serial.begin(9600);
}

void loop(){

   if (kontrol == true) 
      zaman_kontrol();
}

void zaman_kontrol() {

  bool knt = true;
  zaman_ayarla();

  while (knt == true && pw == 100) {

    RTC.getTime(); // Saat ve Tarih verilerini al
    saniye = RTC.second;
    dakika = RTC.minute;
    saat = RTC.hour;

    if (saniye >= sn && dakika >= dk && saat >= st)
      knt = false;

    data_kontrol();
  }

  Buton_value();
  Default_work_time_value();
}


void Default_work_time_value() {

  sprintf(v, "%02d", st);

  Serial.print("t0.txt=");
  Serial.print('"');
  Serial.print(v);
  Serial.print('"');
  Serial.write(255);
  Serial.write(255);
  Serial.write(255);

  sprintf(v, "%02d", dk);

  Serial.print("t2.txt=");
  Serial.print('"');
  Serial.print(v);
  Serial.print('"');
  Serial.write(255);
  Serial.write(255);
  Serial.write(255);

  sprintf(v, "%02d", sn);

  Serial.print("t4.txt=");
  Serial.print('"');
  Serial.print(v);
  Serial.print('"');
  Serial.write(255);
  Serial.write(255);
  Serial.write(255);
}

void Buton_value() {

  Serial.print("bt4.val=1");
  Serial.write(255);
  Serial.write(255);
  Serial.write(255);
}

void data_kontrol() {

  delay(100);

  if (Serial.available() > 43) {

    pw = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    zm = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    st = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    dk = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    sn = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    r1 = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    r2 = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    dm = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    st2 = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    dk2 = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();

    sn2 = Serial.read();
    for (int i = 0; i < 3; i++)
      sayac[i] = Serial.read();
  }

  if (pw == 100)
    kontrol = true;
}


eeburakdemir

Merhaba,
Giden dataları usb/ttl dönüştürücüde kontrol etmeni tavsiye ederim.
Asla pes etme...

lostromos

Serial.begin(115200);

Olarak degistirin duzelecektir.(Eger ekrana kartla yukleme yaparken yukarda 115200 yaziyor ise olacaktir. Haberlesme hizi fsrkliysa ona gore ayarlayın.)

berkay_91

#6
malesef işe yaramadı, ekrana programı yüklerken Baud Rate 115200 ayarladım, Arduinodaki programda Serial.begin(115200); yaptım ama şimdi hiç haberleşmiyor... bir sorun daha var program bir fonksiyonun içindeki while döngsünde iken Nextion dan veri geldiğinde void serialEvent(){...} içine girmiyor, serialEvent sadece loop ta çalışıyor. bu yüzden fonksiyonların içinde if (Serial.available() > 43) ile data gelip gelmediğini kontrol etmek zorunda kalıyorum

tunayk

Zamanında PC üzerinden test yaparken şöyle bişey yapmışım;
void Gonder() 
        {
            try
            {
                if (textBox1.Text.Length > 0 && serialPort1.IsOpen)
                {
                    int len = System.Text.ASCIIEncoding.ASCII.GetByteCount(textBox1.Text);
                    byte[] txtdata = new byte[len];
                    Array.Copy(System.Text.ASCIIEncoding.ASCII.GetBytes(textBox1.Text), txtdata, len);
                    // txtdata[len] = 0xFF;
                    // txtdata[len + 1] = 0xFF;
                    // txtdata[len + 2] = 0xFF;
                    serialPort1.Write(txtdata, 0, len);
                    byte[] son = new byte[] { 0xFF, 0xFF, 0xFF };
                    System.Threading.Thread.Sleep(5);
                    serialPort1.Write(son, 0, 3);
                }
        

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString());
            }
            
        }

3 tane 0xFF göndermeden 1-2ms beklemek daha iyi sonuç veriyor. Yanlış değilsem dökümanında da aynı şeyden bahsediyordu.

Gediz1337

Mesajınıza anlayamadığım bir sebepten dolayı yanıt veremedim, ileti sayımın yetersiz olmasından kaynaklanıyor sanırım. Ayrıntılı bakmak için pek vaktim yok fakat özel değilse Nextion projenizi paylaşabilirseniz debug yaparak yardım etmeye çalışırım.

mustafa_cmbz

Haberleşmeyi değiştirmek için farklı komutları var mesela kalıcı mı geçicimi vs gibi.

Bir zamanlar wiki den bakmıştım.

berkay_91

Alıntı Yap3 tane 0xFF göndermeden 1-2ms beklemek daha iyi sonuç veriyor. Yanlış değilsem dökümanında da aynı şeyden bahsediyordu.

  sprintf(v, "%02d", kalan_st);

  Serial.print("t0.txt=");
  Serial.print('"');
  Serial.print(v);
  Serial.print('"');
  delay(2);
  Serial.write(255);
  Serial.write(255);
  Serial.write(255);

2 ms eklememe rağmen değişen bir şey olmadı...

berkay_91

#11
http://s7.dosya.tc/server9/cfihn3/Nextion_Baud_Rate_degistirme.docx.html

dosyadaki gibi ekranın Baud Rate ini 155200 olarak değiştirdim, Arduinonunda Baud Rate ini 115200 yaptım çift tarflı haberleşme olmasına rağmen sorun devam ediyor

e-zeki

#12
Alıntı yapılan: berkay_91 - 03 Eylül 2018, 21:18:14http://s7.dosya.tc/server9/cfihn3/Nextion_Baud_Rate_degistirme.docx.html

dosyadaki gibi ekranın Baud Rate ini 155200 olarak değiştirdim, Arduinonunda Baud Rate ini 115200 yaptım çift tarflı haberleşme olmasına rağmen sorun devam ediyor


Nextion TFT'lerin baud rate'i 9600'da  sabit. başka baud rate'de çalışmayacaktır.


Edit : Eski versiyonlarda baudrate fix 9600 imiş sonradan baud update eklemişler

lostromos

Alıntı yapılan: e-zeki - 04 Eylül 2018, 08:03:40Nextion TFT'lerin baud rate'i 9600'da  sabit. başka baud rate'de çalışmayacaktır.

Ben 115200de kullanıyorum.