ต่ออุปกรณ์ PZEM004T กับจอ 4 digit 7 segment 74hc595 ไม่ได้

อยากให้จอมันอ่านค่ากระแสกับแรงดันที่เครื่องวัดได้ แต่พอใส่คำสั่ง
my7SEGMENT.init(); //คำสั่งเปิดใช้งานจอ 7 segment
มันทำให้ PZEM004T ไม่อ่านค่าเลย พอลบโค้ดนี้ออกก็จะอ่านค่าได้ปกติ
แต่ตัวจอก็จะไม่ทำงาน ควรทำอย่างไรดีครับ

#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>

PZEM004Tv30 pzem(D8,D9);  // (RX,TX) connect to TX,RX of PZEM

#include <TridentTD_7Segs74HC595.h>

#define SCLK        D5
#define RCLK        D6
#define DIO         D7
#define NUM_MODULES 2   
 
TridentTD_7Segs74HC595  my7SEGMENT( SCLK, RCLK, DIO, NUM_MODULES);

void setup() {
  Serial.begin(115200);

  my7SEGMENT.addModule("Current"); 
  my7SEGMENT.addModule("Voltage");

  my7SEGMENT.init();

  pinMode(D8, INPUT);
  pinMode(D9, OUTPUT);
}

void loop() {
  float voltage = pzem.voltage();
    if(voltage != NAN){ 
        Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
    } else {
        Serial.println("Error reading voltage");
    }

  float current = pzem.current();
    if(current != NAN){ 
        Serial.print("Current: "); Serial.print(current); Serial.println("A");
    } else {
        Serial.println("Error reading current");
   }

  float power = pzem.power();
    if(current != NAN){ 
        Serial.print("Power: "); Serial.print(power); Serial.println("W");
    } else {
        Serial.println("Error reading power");
    }

  float energy = pzem.energy();
    if(current != NAN){ 
        Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
    } else {
        Serial.println("Error reading energy");
    }
    Serial.println();
    
  my7SEGMENT.setNumber("Current", current, 2); // (module,value,decimal)
  my7SEGMENT.setNumber("Voltage", voltage, 1);
    
  delay(1000);
}

=================================================================
ตรง my7SEGMENT.init(); ถ้าเอาบรรทัดนี้ออก PZEM004T มันจะทำงาน อ่านค่าได้ปกติ แต่พอใส่เข้าไป มันไม่อ่านค่าเลยน่ะครับ

ต่อแบบไหนขอดูหน่อยครับ

D5 ต่อกับ SCLK ของ display
D6 ต่อกับ RCLK ของ display
D7 ต่อกับ DIO ของ display

D8 ต่อกับ TX ของ pzem004t
D9 ต่อกับ RX ของ pzem004t

display ต่อไฟ 3.3Vcc
pzem004t ต่อไฟ 5Vcc
อุปกรณ์ทั้ง2ตัว ทำงานแยกกันได้ปกติครับ

หมายถึงยังไงครับ ถ้าใส่โค้ต คนละชุดเพื่อทดสอบ มันทำงานปกติช้ะ แต่พอนำโค้ตมาร่วมกัน PZEM ไม่ทำงาน

ใช่ครับ คือถ้าเอาโค้ดมารวมกัน มันจะทำงานแค่จอแสดงผล ส่วนตัววัดมันไม่วัดเลย
แต่ถ้าปิดโค้ดบรรทัดนั้น ตัววัดก็ทำงานปกติ แต่จอจะติดแทนครับ

ไฟเลี้ยงมันพอรึป่าวครับ ลองแยกแหล่งจ่ายดูหรือยัง บอร์ดใช้ไฟเลี้ยงจากไหน

อยากดู serail ตอน PZEM ไม่ทำงานด้วยครับว่า มันขึ้นว่าอะไรบ้าง

บอร์ดใช้ไฟเลี้ยงจาก usb ต่อคอมครับ จริงๆถ้าถอดไฟเลี้ยงของจอออก
มันก็ยังทำงานได้ปกติ ไฟเลี้ยงของจอช่วยให้จอสว่างขึ้น
ส่วนตัววัดปกติถ้าไม่ต่อไฟ AC มันจะขึ้น Voltage = Nan V , Current = Nan A
แต่พอต่อไฟ AC แล้วก็จะวัดได้ตามปกติครับ พอรวมโค้ดแล้วมันจะขึ้น Nan ตลอด
ที่ตัววัด ต่อไฟ AC แล้วรอซักพักมันก็ยังขึ้น Nan เหมือนเดิม

ขึ้น Voltage = Nan V , Current = Nan A ป่ะครับ

ใช่ครับ ขึ้นเหมือนตอนไม่ได้ต่อไฟเลยครับ แต่ไฟเข้านะตรับ LED ที่เครื่องวัดมันติด

ลองใช้ port ตามตัวอย่างกระทู้นี้ดูครับ พี่เขาใช้ 7-segment เหมือนกันไม่มีปัญหา เหมือนว่า เซนเซฮร์ทั้ง 2 ตัวต้องใช้ port Tx Rx เหมือนกัน

ยากเลยครับ ลองแกะๆดู เหมือนเขาใช้อุปกรณ์ตัวอื่นมาเก็บค่าไว้ก่อน แล้วค่อยไปแสดงผลทีเดียว

ลองตัดสองบรรทัดนี้ออกดูครับ

เอาออกแล้วผลเหมือนเดิมครับ ดูเหมือนว่าถ้ามีคำสั่ง my7SEGMENT.init();
อยู่ตรงไหน ตัววัดมันก็จะไม่ทำงานเลย

ถ้างั้นใส่เข้าไปใหม่แต่แก้ให้เป็น input ให้หมด

อีกอันคือลองใส่ใน setup แบบนี้

void setup() {
  Serial.begin(115200);
  Serial.println(my7SEGMENT.getVersion());
  my7SEGMENT.addModule("Current"); 
  my7SEGMENT.addModule("Voltage");
  my7SEGMENT.init();
  
}

ผมอยากเห็นตอน pzem มันทำงานมันอ่านอะไรได้บ้าง แคปมาดูหน่อยครับ


อันนี้ตอนไม่ทำงานครับ


อันนี้ตอนทำงานปกติ ต้องปิดบรรทัด init ไว้ถึงจะออก ก็คือเสียบปลั๊กแล้วมันจะขึ้นแบบนี้เลย

ส่วน pinMode(D9, OUTPUT); ต้องใส่แบบนี้ถึงจะทำงานครับ ใส่ input มันจะไม่ทำงาน
Serial.println(…); นี้จะมีหรือไม่มี อุปกรณ์มันก็ทำงานได้ตามปกติครับ

งั้นเอางี้ ลอง ใส่โค้ตเดิมที่ว่าไม่ทำงานเข้าไป จากนั้น ลองดึงสายไฟเลี้ยงของ 7-segment ออกดูว่า pzem มันกลับมาอ่านได้ไหม

ภาพ

อันนี้คือไม่ต่อสาย 3.3Vcc ครับ ถ้าต่อไฟมันจะสว่างขึ้นอีกนิดหน่อย ส่วนตัวเลขเป็นตัวเลขสุ่มที่ใช้ทดสอบ ถ้าดึงสาย gnd ออกด้วยเลขมันจะรวนๆ แต่มีไฟขึ้นครับ ส่วนที่ monitor จะขึ้น Nan เหมือนเดิม