การแก้ปัญหาบอร์ด "เออเร่อ" (Error) บนโปรแกรม Arduino IDE ที่มือใหม่ต้องปวดหัว หรือ มือเก่าต้องสับสนบ้างสามารถเกิดขึ้นได้เป็นเรื่องปกติครับ ไม่ต้องตกใจไป ทุกปัญหามีทางแก้ครับ แล้วเราจะแก้ปัญหาได้ยังไง ?? นั่นน่ะสิครับ.....
ก่อนอื่นเลยเราต้องเข้าใจระบบการทำงานของมันก่อนว่ามันทำงานยังไง จากรูปภาพจะแยกระบบเป็น 3 ส่วนนะครับ
ใน 3 ส่วนนั้นก็คือ
1. เกิดจากคอมพิวเตอร์ เช่น ไม่มี Driver COMPORT , ยังไม่ได้ติดตั้งรุ่นบอร์ด , เลือกรุ่นบอร์ดผิด , เลือก COMPORT ผิด ,จนกะทั่ง Code ผิด!!
2. ปัญหาจาก สายอัพโหลด เช่น ช่องเสียบหลวม (เด้งเข้าๆ ออกๆ หรือ ไม่เจอเลย) , สายอัพโหลดไม่ดี เช่น สายขาดใน หัว USB หลุด บลาๆ... และที่สำคัญ ตายกันมาเยอะ สายอัพโหลดโปรแกรม ไม่มีสายเส้น data ??? แล้ว data คืออะไรละ.... (เดี๋ยวเล่าให้ฟังครับ)
3. ก็คือตัวบร์อด คอนโทรลนั่นเอง น้อยนักที่จะเจอปัญหาแต่ก็ใช่ว่าจะไม่เกิดขึ้นเลย 100 ตัวต้องมีบ้าง เอาละเข้าเรื่องกันเลย ดังรูปด้านล่าง เราจะยกตัวอย่างคร่าวๆ ตามรูปจะแบ่งออกเป็น 4 ส่วนบนตัวบอร์ด
ส่วนที่ 1 หน้าสุด.. ขอเรียกว่า USB to TTL นะครับมีหน้าที่ เป็นตัวแปลงสัญญาณการเชื่อมต่อแบบ Serial จากอุปกรณ์หรือโมดูลที่ แรงดันระดับ TTL (3.3 V. หรือ 5 V.) ไปเป็นแรงดัน USB มาตรฐานเพื่อเชื่อมต่อเข้าเครื่องคอมพิวเตอร์ และสามารถสื่อสารได้ได้ คอมพิวเตอร์ผ่าน COMPORT โดยใช้สาย 4 เส้น สื่อสารกัน ระหว่างบอร์ดคอนโทรล กับ คอมพิวเตอร์ โดยมีตัวกลาง เป็น TLL แปลงสัยญาณ (ช่วยแปลภาษา) ให้สื่อสารกันเข้าใจ
พอจะเข้าใจแล้วนะครับ ว่ามันทำงานยังไง แล้วมัน Error มันจะเป็นยังไง ถ้าแอดมินเองจะสันนิษฐานว่า
- Driver มีหรือไม่ ไดร์เวอร์ที่ว่าก็คือ Chips ในวงจร TLL นั้นเอง ดังรูปด่านล่าง
แต่เดี๋ยวก๊อนนนน บอร์ดแต่ละรุ่นมันไม่ได้ทำมาเหมือนกันน่ะสิ เนื่องจากผู้ผลิตและออกแบบมีหลายที่ช่ะเหลือเกิ๊นนนก็เลยมีรุ่นนิยมเห็นได้บ่อย ๆ 2 เบอร์ นั่นก็คือ CH340 และ CP2102 ดังรูปด้านล่าง
เข้าเรื่องกันดีกว่า พูดเยอะยิ่งยาว มาดูวิธีแก้กันเล๊ยย...
ขั้นแรกเราสามารถเช็คว่ามีคอมพอร์ต (COMPORT) เชื่อมต่อกับคอมเรามั้ยได้ที่ > คลิ๊กขวาที่ My computer > จัดการ (Manage)


เปิดจอมาหน้านี้แล้ว ก็มีเรื่องวิเคาะห์อีกแล้ว แห๊ะๆ...
> อาการแรก คอมพิวเตอร์ไม่รู้จักอุปกรณ์

อันนี้สบายใจได้ แสดงว่า Diver ไม่มี ให้มองดูว่าบอร์ดเราใช้ Chips TTL รุ่นไหน และไปดูวิธีติดตั้งได้ที่ (ค้นใน google ก่อนนะครับ ยังไม่อัพเดต :D)
> อาการที่ 2 คือ ไม่เจออะไรเลย NO!!!! อันนี้เริ่มคิดหนัก...
เราลองมาวิเคาะห์ก่อนแล้วกันเพราะอะไรหว่าาา...
- สาย USB อัพโหลดโปรแกรม ก่อนเลย เอ๊ะ.. เสียบสายหหรือยัง ไม่ใช่ละไม่น่าลืมนะครับแห๊ะๆ สายเราไม่หลวมใช่มั้ย ไฟออนบอร์ด ไฟบอร์ดติดมั้ย ถ้าเป็นพวก ESP8266 หรืออื่น ๆ ลองกด Reset (RST) ดูมีไฟกระพริบบ้างมั้ย ไม่มีแสดงว่าไฟไม่เข้า นี่ก็เป็นอีกสาเหตุของการอัพโหลดไม่ได้ เปลี่ยนสายช่ะ
หรือสั่งซื้อได้ที่นี่....
นอกจากไฟไม่ติดแล้ว ยังมีอีก ข้างในสาย อัพโหลดโปรแกรมไม่มีสาย data !!! โดยปกติแล้ว USB จะต้องสายไฟ 4 เส้นถึงจะสามารถส่งข้อมูลได้ โดยแบ่งออกได้ดังนี้ 2 เส้น จะเป็นสายไฟ + (vcc) และ - (gnd) และอีก 2 เส้นเรียกง่ายๆว่า สัญญาณ ( Data+ , Data- ) ซึ่งเราซื้อ สายชาร์จมือถือราคาถูกๆ มาจงระวังไว้เลยว่า ข้างในมีแค่สาย +(vcc) และ -(gnd)
(หนักสุด สายปกติมีครบทุกเส้นไม่ขาดไม่หลวม แสดงว่า วงจร TTL ไปสวรรค์แล้ว (พัง!!) )

> ต่อไปคือขึ้นปกติทุกอย่างเลยย

แต่ทำไม่มันอัพโหลดไม่ลงสักที Error มันก็จะบอกประมาณว่า

กด Copy ออกมา ---- >
Arduino: 1.8.19 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
Sketch uses 444 bytes (1%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
An error occurred while uploading the sketch
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x78
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x78
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.เอ๊ะมันเป็นภาษาอังกฤษ !!! แล้วคนที่อ่านไม่เข้าใจทำไงดี... ก็ไปที่ google แปล สิครับลุงข้างบ้านสอนมา

จากที่ Google แปล แปลภาษามาให้ มันบอกว่าพยายามติดต่อ 10 ครั้งแล้วติดต่อไม่ได้เลย เอ๊ะหรือว่าไม่มีใครรับสายกลัวทวงหนี้หรือเปล่าน้าา.. ไม่ใช่ล่ะ !!!
แอดคิดว่ามี 3 กรณีที่จะเกิดขึ้น
1. Chips firmware (Arduino Bootloader) พังเฮ้อ..ยังพอแก้ได้ วิธีแก้คือ ไปที่ลิงค์นี้ (รออัพเดต วิธีลง Arduino Bootloader SPI ถ้าใครรีบค้นหาใน google ก่อนเลยนะครับ) 2. ขา chips บัดกรีไม่ติดตก QC จากโรงงานผลิตมีโอกาสเกิดขึ้นได้ ลองเช็คตำแหน่งอุปกรณ์ ขาอุปกรณ์แต่ละตัวด้วยนะ 3. Chips พัง นั่นเหละครับฟังไม่ผิด พังจริงๆ ไม่จิงโจ้...... วิธีแก้ทำใจครับ Chips แพงเท่าซื้อบอร์ดใหม่ สาเหตุการพังเกิดได้หลาย ๆ อย่างครับ ช็อตจากเศษสิ่งสกปรกตกใส่ หรือ ต่อไฟสลับขั่ว และ ต่อไฟเกิน หรือ ไฟเลี้ยงไม่พอจนไม่สามารถทำงานได้ Chips Arduino ใช้ไฟเลี้ยงที่ 5V ส่วนพวก nodeMCU และ STM8,32 ใช้ 3.3V มากกว่าหรือน้อยกว่า แสดงมีโอกาสใช้งานไม่ได้ครับ แต่น้อยกว่า ก็ยังดีกว่า มากกว่าจนพัง :<ปล1. Arduino Nano V3 จะมี 1 จุดที่ต้องตั้งค่าลองทำตามนี้ ไปที่ Tools > Board: "Arduino Nano" > Processor: ATmega328P (Old Bootloader) แล้วลองอัพโหลดดูอีกที มือใหม่เจอปัญหานี้บ่อยมากครับ
ปล2. การทดสอบ Error นี้ แอดมินเอาตัวที่แอดมินขโมย Chips ไปใช้งานที่อื่นแต่ตัวบอร์ดยังมีวงจร TTL ทำงานอยู่...

ความรู้เพิ่มเติม : Arduino Bootloader คือโปรแกรมเล็ก ๆ ตัวหนึ่งหรือเรียกอีกชื่อว่า firmware เป็นส่วนที่ทำหน้าที่ช่วยในการ upload โปรแกรม หรือ sketch ที่เราเขียน เข้าไปใน flash rom ผ่านทางสาย serial หรือ usb โดยจะใช้สายไฟแค่ 2 เส้นคือสัญญาณ RX , TX โดยไม่จำเป็นต้องมีเครื่องโปรแกรมไอชี
เบื้องต้นเรื่องฮาร์ดแวร์ ก็จะมี Error ประมาณนี้ ต่อไปอุปกรณ์บอร์ดไม่มีปัญหา แต่ โปรแกรมมีปัญหา (ปัญหาเยอะจริง ๆ เริ่มเหนื่อยละ แห๊ะๆ..)
แอดมินจะยกปัญหาที่เกิดขึ้นบ่อยมาก่อนนะครับ

เอ๊ะ.... จากตัวอย่าง pinMode(A1,INPUT); มันก็ถูกนิทำไมมัน Error ว่า ( 'A1' was not declared in this scope ) เลยแว่ะไปถามอาจารย์ "Google แปล" มาได้ความว่า ( 'A1' ไม่ได้ประกาศในขอบเขตนี้ ) อ้าว.... ทำไมละขา A1 มันก็มีใน Arduino นิทำไมผิดว่ะ.. ผิดสิครับเพราะคุณเลือกรุ่นบอร์ดที่ไม่มีขา A1 อยู่ ไหนลองเช็คดูสิเลือกบอร์ดรุ่นไหน ไปที่ Tools

เออว่ะจริง ๆ ด้วยเลือกบอร์ดเป็น NodeMCU 1.0(ESP-12E Module) เฉยเลยมันมีแต่ขา A0 ไม่มีหรอก A1 -..-'' แก้สิรอไร..
แล้วเราต้องเลือกบอร์ดไหนละไม่รู้เลยว่าต้องเลือกตัวไหน ??...
เอ่อ..... คืองี้ครับ Arduino เป็นแค่ชื่อซอฟแวร์ หัวใจหลักมันคือชื่อรุ่น เรียงตามรูป Nano , Uno , Mega2560 มีอีกเยอะ...

แต่ละตัวก็มีความสามารถแตกต่างกันออกไป เช่นความจุโปรแกรม , ความเยอะของขา INPUT,OUTPUT , ขนาดของบอร์ด , ความเร็วในการประมาณผล อื่น ๆ... ลองเอาชื่อไปค้นหาใน google ดู " ชื่อของบอร์ดตามด้วย datasheet " เช่น Arduino nano datasheet แล้วลองเลือกอ่านดูครับ
เอาละทีนี้เราพอรู้จักรุ่นบอร์ดแล้ว ปัญหาต่อไปได้เล๊ยยย.... (เยอะจัด..!!)
ปัญหาของ Library
ปัญหาใหญ่มากสำหรับสายศึกษาหา code ตามอินทรอเน็ต ยืม(คัดลอก)โปรแกรมมาแท้ๆ ทำไมมัน Error
เพราะอะไรหว่าา นั่งงมไป 3ชม....

มัน Error ตรงนี้เลยไม่รู้จะทำยังไงดีแล้วแจ้ง error ว่า (ec-bot.h: No such file or directory) (แปล: ec-bot.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ) พอแปลปั๊บพอจะนึกได้แล้วว่ามันขาดอะไรไปสักอย่างจริง ๆ
เฉลยเลยละกัน Library ที่เราเรียกใช้ที่ไฟล์ชื่อว่า ec-bot.h (สมมุติ) มันไม่มีอ้าวไม่มีทำไงอ่ะ?? ก็ไปโหลด มาติดตั้งช่ะ..
วิธีติดตั้งไลบรารี่ > https://www.ec-bot.com/b/33
#include (แปล:ประกอบเข้าด้วยกัน) หมายถึงการดึงไฟล์โปรแกรมอื่นเข้ามารวมในโปรแกรมที่เราเขียนด้วย ไว้ว่างๆ แอดมินจะมาสอนวิธีสร้างไลบรารี่ และ ทำสีตัวหนังสือให้ชมครับ ถ้ารีบก็ไปหาข้อมูลก่อนได้เลยครับ ><ปัญหาของการเขียนโปรแกรมผิด เขียนตก เรื่องนี้แก้ง่ายครับ มี Error แจ้งทุกบรรทัด เช่น , ประกาศตัวแปลผิด , ลืมใส่สัญลักษณ์ , ปิดท้ายบรรทัด (;) , ปีกกาเกินและขาด {} เป็นต้น
ประกาศตัวแปรผิด พิมพ์ตก ตัวเล็กตัวใหญ่ เป็นต้น เช่น int TEST; แต่เอาไปใช้เป็น Test = 10;
Error มันก็จะบอกว่ามันไม่รู้จักคำว่า Test เป็นต้น

ลืมปิดท้าย เซมิโคลอน ( ; ) แบบที่ถูกต้องคือ pinMode(2,INPUT); <-- ดูเครื่องหมายจบบรรทัดด้วย

ปีกกาเกินหรือขาดเอาแบบที่ เกินก่อนละกัน เราสามารถเช็ค ได้โดยการ ฟอร์แมต (Auto Format) หรือกด
Ctrl + T เพื่อจัดบรรทัดให้เรียบร้อยดูง่ายสบายตาขึ้น
ก่อนกด ( Ctrl + T )

หลังกด ( Ctrl + T )

เอ๊ะะะ.....!! ทำไมมันเป็นแบบนี้ เอาเมาส์ไปคลิ๊กที่ปีกกา viod Loop()
ลบทิ้งช่ะะ แล้วอัพโหลดใหม่
กรณีขาดละ เมื่อกด ( Ctrl + T ) พอเอาเมาส์ไปคลิ๊กปีกกาปิดตัวสุดท้าย อ้าว... ไม่ใช่ปีกกาปิดของ
viod Loop() นิมันคือของ else !!!!!!!!! แล้วก็จะเห็นดังรูปด้านล่าง...

อธิบายรูป

ไปเพิ่มมาเล๊ยย แล้วลองอัพโหลดดูใหม่สิ
(พอแค่นี้ก่อนแอดมินนึกไม่ออกแล้ว คิดได้เดี๋ยวมาอัพเดตเพิ่มครับ ;) ) ปล. เหลืออีกเยอะเดี๋ยวก็ชิน..