วันพฤหัสบดีที่ 30 กันยายน พ.ศ. 2564

Read and Show LCD1602

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

    ต่อกับคอมพิวเตอร์ ใช้ port monitor ก็สามารถแก้ปัญหาได้ แต่เวลาใช้ serial monitor ใน IDE นี่ก็ไม่ค่อยดี
เหมือนกับว่ามันต้องพิมพ์ออกมาเป็นข้อความ ถ้าใช้ serial.print ก็แสดงผลได้ปกติ พอเปลี่ยนเป็นเป็น serial.write จะเป็นภาษาต่างดาว 

    นอกจากนี้ ได้ลองเอาหน้าจอ LCD1602 มารับข้อความขาเข้า จะได้รู้ว่ามันรับอะไรเข้ามา มาหรือไม่มา
รับมา 8 byte 16digit พอดีกับ LCD1602 เลย
LCD1602 แต่ก่อนก็ใช้งานได้ แต่เดี๋ยวนี้มันพิมพ์ออกมาแต่ตำแหน่ง 0,0 วนๆ ซ้ำๆ

    ถ้าเป็นอย่างนี้ต้องเอา library อื่นมาใช้แทน

เอาสัญญาณที่ส่งเข้ามาใน serial port Rx, Tx ซึ่งมันเป็น byte , char แปลงเป็นข้อความรูปแบบ Hex, ทำ zero leading พิมพ์ออกมาดู

    ก็จะทำให้เห็นสิ่งที่รับเข้ามา งานก็สะดวกขึ้น

ค่าที่เป็น HEX byte ที่เพิ่งรับเข้ามาทาง Rx ถ้าต้องการแสดงผลเป็น DEC อย่างเช่น ค่า Temperature
ก็เอามาแปลงค่าก่อนแล้วจึงแสดงผลออกมาทางหน้าจอ
    มันรับเข้ามาเป็น byte ก็แค่จัดการคูณด้วยค่าประจำหลัก
อย่างเช่น รับค่าเข้ามา 0x01 0x36 <--- จำนวน 2 HEX bytes
อย่างนี้มันหมายถึง 0x0136 ค่าของมันคือ 310DEC

1st byte  0x01 x 16 x16 = 256DEC
2nd byte 0x36 no need to multiply ไม่ต้องทำอะไร
int Val = [1st Byte ]*16*16 + [2nd Byte]; แบบนี้ในโปรแกรมจะจัดการออกมาให้เป็น 310DEC
ก็เขียนให้แสดงผลได้แล้ว อย่างนี้ lcd.print(Val);

LCD1602 incoming Rx display


At Dormitory
Sep30, 2021 18:32

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

MAPs

วันก่อนได้ลองเขียนแบบ แบบตัวนั้นมันต้องแนบแผนที่สังเขปของโครงการ ลองๆ แล้วก็ใช้ snazzymaps แล้วก็เอามาทำต่อใน inkscape มันก็ออกมาดูได้ระดับห...