Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore C-Manual-IPST-MicroBOX [SE]

C-Manual-IPST-MicroBOX [SE]

Published by toxic.nps, 2020-05-27 07:29:40

Description: C-Manual-IPST-MicroBOX [SE]

Search

Read the Text Version

50    Arduino IDE 2.6 การเปรยี บเทียบสตรงิ ดวยโอเปอเรเตอร == และ != ผูพฒั นาโปรแกรมสามารถเปรยี บเทียบสตริง 2 ชดุ วา เกบ็ คาตรงกนั หรอื ไมด ว ยโอเปอเรเตอร == หรอื อาจเรยี กผานเมธอด equals และเม่ือตอ งการเปรยี บเทียบวา สตริง 2 ชุดเกบ็ คาสตริงไมต รง กันหรอื ไม จะใชโอเปอเรเตอร != รูปแบบ boolean equals(param) ทาํ หนา ทเ่ี ปรียบเทยี บสตรงิ 2 ชดุ พารามเิ ตอร param คอื สตริงทนี่ าํ มาเปรียบเทยี บ การคืนคา - เปน true เมอื่ ขอความของสตริงทเ่ี ปรียบเทยี บตรงกนั - เปน false เมอื่ ขอความของสตริงทเี่ ปรียบเทยี บไมต รงกนั ตัวอยา งที่ 2-24 Serial.begin(9600); // กาํ หนดคา อตั ราเร็วของการสือ่ สารขอ มูล 9600 บิตตอวนิ าที String s1 = \"Hello\"; // กาํ หนดใหต ัวแปร s1 เปน ออบเจก็ ตส ตรงิ เกบ็ ขอความ \"Hello\" String s2 = \"Hello\"; // กาํ หนดใหต ัวแปร s2 เปน ออบเจก็ ตส ตรงิ เกบ็ ขอความ \"Hello\" if(s1==s2) // เปรียบเทยี บ สตรงิ s1 และ s2 วา มีขอ ความตรงกนั หรอื ไม { Serial.println(\"s1 and s2 is equals.\"); // พมิ พขอ ความออกไปยังหนา ตาง Serial Monitor ในกรณีทส่ี ตรงิ s1 และ s2 มีขอ ความตรงกนั } else { Serial.println(\"s1 and s2 is not equals.\"); // พมิ พขอ ความออกไปยงั หนา ตาง Serial Monitor ในกรณีทส่ี ตรงิ s1 และ s2 มีขอ ความไมต รงกนั } ผลลพั ธค อื เงอื่ นไขการเปรยี บเทยี บสตรงิ s1 และ s2 จะเปนจริงเนอ่ื งจากท้ังคมู ีขอ ความตรงกันทําใหม ี การพมิ พขอ ความแสดงผลลพั ธอ อกที่ Serial Monitor เปน \"s1 and s2 is equals.\"

   Arduino IDE51 ตัวอยางที่ 2-25 Serial.begin(9600); // กาํ หนดคา อตั ราเรว็ ในการสอื่ สารขอ มลู อนกุ รม 9600 บติ ตอ วนิ าที String s1 = \"Hello\"; // กาํ หนดใหต วั แปร s1 เปน ออบเจก็ ตส ตจรงิ เกบ็ ขอ ความ \"Hello\" String s2 = \"Hello\"; // กาํ หนดใหต ัวแปร s2 เปน ออบเจก็ ตส ตรงิ เก็บขอความ \"Hello\" if(s1!=s2) // เปรยี บเทยี บ สตรงิ s1 และ s2 วา มีขอ ความไมต รงกนั หรอื ไม { Serial.println(\"YES!\"); // พมิ พข อ ความ YES! ไปยงั หนา ตา ง Serial Monitor ในกรณที สี่ ตรงิ s1 และ s2 มขี อ ความไมต รงกนั } else { Serial.println(\"NO!\"); // พมิ พข อ ความ NO! ออกไปยงั หนา ตา ง Serial Monitor ในกรณที สี่ ตรงิ s1 และ s2 มขี อ ความตรงกนั } ผลลพั ธค อื เงอ่ื นไขการเปรยี บเทยี บสตรงิ s1 และ s2 จะเปนเทจ็ เน่ืองจากท้ังคมู ีขอ ความตรงกนั ทาํ ให มีการพมิ พขอ ความแสดงผลลพั ธอ อกที่ Serial Monitor เปน \"NO!\" 2.7 ตรวจสอบจาํ นวนอกั ขระที่เกบ็ ภายในตวั แปรสตรงิ ดวยเมธอด length เมอื่ ตอ งการตรวจสอบจาํ นวนอกั ขระทเ่ีกบ็ ภายในสตรงิ วา มกี ต่ี วั ทาํ ไดโ ดยเรยี กผา นเมธอดlength รปู แบบ int length() เมธอดตรวจสอบจาํ นวนอกั ขระทเี่ กบ็ ภายในตวั แปรสตรงิ ตัวอยา งท่ี 2-26 String s1= \"Hello\"; // กาํ หนดใหต ัวแปร s1 เปน ออบเจก็ ตส ตรงิ เก็บขอความ “Hello” int result = s1.length(); //อา นคา จาํ นวนสตรงิ ทถี่ กู เกบ็ ไวใ นตวั แปรสตรงิ s1เกบ็ ไวท ต่ี วั แปรresult ผลลพั ธค อื ตัวแปร result จะมีผลลพั ธเ ทา กับ 5 ตัวอยางที่ 2-27 String s1= \"Hello World!\"; // กาํ หนดใหต วั แปร s1 เปน ออบเจก็ ตส ตรงิ เกบ็ ขอ ความ \"Hello World!\"(อกั ขระทงั้ หมด 12 ตวั ) int result = s1.length(); // อานคาจาํ นวนของสตรงิ ทถี่ ูกเกบ็ ไวใ นตวั แปรสตรงิ s1 มาเก็บไวท ตี่ ัวแปร result ผลลพั ธค อื ตัวแปร result จะมผี ลลพั ธเ ทา กับ 12 (รวมอกั ขระชอ งวา งดว ย)

52    Arduino IDE 2.8 การแปลงสตรงิ ดว ยเมธอดตา งๆ 2.8.1 แปลงสตรงิ ใหเ ปน ขอ มลู เลขจาํ นวนเตม็ ดว ยเมธอด toInt เมอ่ื ตอ งการแปลงอกั ขระทเี่ กบ็ ภายในออบเจก็ ตส ตรงิ เปน เลขจาํ นวนเตม็ ชนดิ long ทาํ ไดโ ดย ใชเมธอด toInt รูปแบบ long toInt() คืนคาเปน เลขจํานวนเตม็ ทีไ่ ดจ ากการแปลงอกั ขระทเี่ กบ็ ภายในสตริง ตัวอยา งที่ 2-28 String s1= \"200\"; // กาํ หนดใหต วั แปร s1 เปน ออบเจก็ ตส ตรงิ เกบ็ ขอ ความ \"200\" long result = s1.toInt();// แปลงสตรงิ s1 เปน ตัวเลขจํานวนเต็ม เกบ็ ไวท ต่ี ัวแปร result ผลลพั ธค อื ตัวแปร result จะมผี ลลพั ธเ ทา กับ 200 2.8.2 แปลงสตริงใหเ ปน ขอ มลู เลขทศนยิ มดว ยเมธอด toFloat กระทําไดโดยใชเมธอด toFloat รูปแบบ long toFloat() คืนคาเปนเลขทศนยิ มท่ีไดจากการแปลงอักขระท่ีเก็บภายในสตริง ตัวอยางท่ี 2-29 String s1= \"46.587\"; // กาํ หนดใหต ัวแปร s1 เปน ออบเจก็ ตส ตรงิ เก็บขอความ \"46.587\" float result = s1.toFloat(); // แปลงสตรงิ s1 ออกมาเปน ตัวเลขทศนยิ มเกบ็ ไวท ต่ี ัวแปร result ผลลพั ธค อื ตัวแปร result จะมผี ลลพั ธเ ทา กับ 46.59

   Arduino IDE53 2.9 คดั ลอกซบั สตรงิ ดว ยเมธอด substring เมอื่ ตอ งการคดั ลอกอกั ขระยอ ยทเ่ี กบ็ ภายในออบเจก็ ตส ตรงิ เพอื่ นาํ ไปใชป ระมวลผลบางอยา ง ทําไดโดยใชเมธอด substring ซึ่งมีใหเลือกใชงาน 2 รปู แบบ 14.1 String substring(from) พารามเิ ตอร from คอื ตาํ แหนงดัชนชี ล้ี าํ ดบั ของอักขระภายในสตรงิ วา ตอ งการใหเ ร่ิมตน การคัดลอก ตง้ั แตด ชั นตี วั ทีก่ าํ หนดไปจนถงึ ลาํ ดบั สดุ ทา ย (ดชั นตี วั ชลี้ าํ ดบั ของอกั ขระตวั แรกเรมิ่ ที่ 0) การคืนคา คนื คา เปนสตริง ผลลพั ธอ อกมาในรูปแบบของออบเจ็กตส ตริงตามทต่ี อ งการ 14.2 String substring(from,to) พารามเิ ตอร from คอื ตาํ แหนง ดชั นตี วั ชลี้ าํ ดบั ของอกั ขระภายในสตรงิ วา ตอ งการใหเ รม่ิ ตน การคดั ลอก ตงั้ แตด ชั นีตวั ท่ีกาํ หนดไปจนถงึ ลาํ ดบั สุดทา ย (ดชั นตี วั ชลี้ ําดบั ของอักขระตวั แรกจะเร่ิมท่ี 0) to คอื ตาํ แหนงดชั นีตวั ชล้ี ําดบั ของอกั ขระตัวสดุ ทา ยบวกหนง่ึ ลําดบั การคืนคา คนื คา เปนสตริง ผลลพั ธอ อกมาในรูปแบบของออบเจ็กสตริง ตัวอยางท่ี 2-30 String s1= \"abcdefghijklmnopqrstuvwxyz\"; // กาํ หนดใหต ัวแปร s1 เปน ออบเจก็ ตส ตรงิ เกบ็ ขอความ a ถึง z String result = s1.substring(2);// คดั ลอกอกั ขระตาํ แหนง ดชั นที ่ี 2 จนถงึ ตวั สดุ ทา ย ผลลพั ธค อื ตวั แปร result จะมผี ลลพั ธเ ปน \"cdefghijklmnopqrstuvwxyz\" ตัวอยางที่ 2-31 String s1= \"abcdefghijklmnopqrstuvwxyz\"; // กาํ หนดใหต ัวแปร s1 เปน ออบเจก็ ตส ตรงิ เก็บขอความ a ถึง z String result = s1.substring(2,5); // คดั ลอกอกั ขระท่ีตําแหนง ดัชนีที่ 2 จนถึง 4 (กอนถึงดชั นลี าํ ดบั ท่ี 5) ผลลพั ธค อื ตัวแปร result จะมีผลลพั ธเ ปน \"cde\"

54    Arduino IDE 2.10 คนหาตําแหนงของอักขระภายในสตรงิ ดวยเมธอด indexOf เม่ือตองการคัดลอกอักขระยอยที่เก็บอยูภายในออบเจ็กตสตริง เพ่ือนําไปใชประมวลผล บางอยางได ทําไดโดยใชเมธอด indexOf ซึ่งมีใหเลือกใชงาน 2 รปู แบบ รูปแบบท่ี 1 int indexOf(ch) พารามเิ ตอร ch คอื อกั ขระเปาหมายทตี่ อ งการคน หาตาํ แหนงภายในสตริง การคืนคา คนื คา เปน ตาํ แหนง ตวั ชอ้ี กั ขระ ch ภายในสตรงิ ตวั แรกสดุ ทพี่ บ กรณไี มพ บ คนื คา เปน -1 รูปแบบที่ 2 int indexOf(ch,start) พารามเิ ตอร ch คอื อกั ขระเปาหมายทตี่ อ งการคน หาตาํ แหนง ภายในสตริง start คอื ตาํ แหนง ดชั นตี วั ชล้ี าํ ดบั เรมิ่ ตน สาํ หรบั การคน หาอกั ขระ การคืนคา คนื คา เปน ตาํ แหนง ตวั ชอ้ี กั ขระ ch ภายในสตรงิ ตวั แรกสดุ ทพี่ บ กรณไี มพ บ คนื คา เปน -1 ตัวอยางที่ 2-32 String s1= \"Hello World\"; // ตัวแปร s1 เกบ็ ขอความ \"Hello World\" int result = s1.indexOf('W'); // คน หาตาํ แหนง อกั ขระ 'W' ผลลพั ธเ กบ็ ทตี่ วั แปร result ผลลพั ธค อื ตัวแปร result จะมีคา เปน 6(ตาํ แหนง ของอักขระ ‘W’) ตัวอยางท่ี 2-33 String s1= \"Hello World\"; // ตัวแปร s1 เกบ็ ขอความ \"Hello World\" int first = s1.indexOf('o'); // คน หาตําแหนง อักขระ 'o' ตัวแรก เกบ็ ผลลพั ธไ วท ต่ี ัวแปร first int second = s1.indexOf('o',first+1); // คน หาตําแหนง อักขระ 'o' ตัวทส่ี องถดั ไป เกบ็ ผลลพั ธไ วทต่ี ัวแปร second ผลลพั ธค อื ตัวแปร first จะมคี า เปน 4 (ตําแหนง ของอกั ขระ 'o' ตัวแรก) ตัวแปร second จะมีคา เปน 7(ตําแหนง ของอกั ขระ 'o' ตัวทส่ี อง)

   Arduino IDE55        Arduino   ทางผจู ดั ทาํ ซอฟตแ วร Arduino IDE ไดจ ดั เตรยี มฟง กช นั่ พนื้ ฐาน เชน ฟง กช น่ั เกยี่ วกบั ขาพอรต อนิ พตุ เอาตพ ตุ ดจิ ติ อล, อนิ พตุ เอาตพ ตุ อะนาลอก เปน ตน ดงั นนั้ ในการเขยี นโปรแกรมจงึ เรยี กใชฟ ง กช นั่ เหลา นไ้ี ดท นั ที นอกจากฟง กช น่ั พนื้ ฐานเหลา นแ้ี ลว นกั พฒั นาทา นอนื่ ๆ ทรี่ ว มในโครงการ Arduino นกี้ ็ ไดเ พม่ิ ไลบรารอี นื่ ๆ เชน ไลบรารคี วบคมุ มอเตอร, การตดิ ตอ กบั อปุ กรณบ สั I2C ฯลฯ ในการเรยี กใชง าน ตอ งเพม่ิ บรรทดั #include เพอื่ ผนวกไฟลท เ่ี หมาะสมกอ น จงึ จะเรยี กใชฟ ง กช น่ั ได ในบทนี้จะอธบิ ายถึงการเรียกใชฟง กชน่ั และตัวอยางโปรแกรมสําหรบั ทาํ การทดลอง โดยใช แผงวงจร IPST-SE เปนอปุ กรณห ลักในการทดลอง โดยมขี ั้นตอนในการทดสอบดงั น้ี (3.1) เปดโปรแกรม Arduino IDE 1.7.10 แลวเชื่อมตอแผงวงจร IPST-SE เขากับ คอมพิวเตอรผ านพอรต USB (3.2) เลือกฮารด แวรห รอื บอรด เปน IPST-SE (3.3) เลือกพอรต เชื่อมตอใหถ ูกตอ ง (3.4) พมิ พโ ปรแกรมลงในหนา ตางเอดเิ ตอรข อง Arduino IDE (3.5) บันทึกไฟล นามสกุล .ino แลวทําการคอมไพล โดยคลิกที่ปุม หรือเลือกเมนู Sketch > Verfy/Compile (3.6) หากการคอมไพลถ ูกตอง ทําการทดสอบการทํางานบนแผงวงจร IPST-SE ดว ยการ อัปโหลดโปรแกรม โดยคลิกที่ปุม หรือเลือกท่ีเมนู File > Upload (3.7) เมอื่ การอปั โหลดเสรจ็ สน้ิ แผงวงจร IPST-SE จะทาํ งานตามโปรแกรมทกี่ าํ หนดทนั ที

56     Arduino IDE 3.1 ฟง กช น่ั ใชง านพอรต เอาตพ ตุ ดิจติ อลของแผงวงจร IPST-SE 3.1.1 คณุ สมบัตขิ องขาพอรตเอาตพ ตุ สําหรับขาพอรตท่ีกําหนดใหเปนเอาตพุตจะมีสถานะเปนอิมพีแดนซต่ํา ทําใหสามารถ จา ยกระแสไฟฟา ใหก บั วงจรภายนอกไดส งู ถงึ 20mA ซง่ึ เพยี งพอสาํ หรบั ขบั กระแสให LED สวา ง (ตอ ง ตอ ตวั ตา นทานอนกุ รมดว ย) หรอื ใชก บั ตวั ตรวจจบั ตา งๆ ได แตไ มเ พยี งพอสาํ หรบั ขบั รเี ลย โซลนี อยด หรือมอเตอร กอนที่จะใชงานขาดิจิตอลของแผงวงจร IPST-SE จะตองส่ังกอนวาใหขาพอรตนี้ทํา หนา ทเี่ ปน อนิ พตุ หรอื เอาตพ ตุ 3.1.2 การกาํ หนดโหมดของขาพอรต กอนใชงานตองกําหนดโหมดการทํางานของขาพอรตดิจิตอลใหเปนอินพุตหรือเอาตพุต กําหนดไดจากฟงกชั่น pinMode()มีรูปแบบดังนี้ pinmode(pin,mode); เมอ่ื pin คอื หมายเลขขาที่ตองการ Mode คอื โหมดการทาํ งาน (INPUT หรือ OUTPUT) หลังจากที่กําหนดใหเปนเอาตพุตแลวเมื่อตองการเขียนคาไปยังขาน้ันๆ ใหเรียกใชฟงกช่ัน digitalWrite() โดยมีรูปแบบดังนี้ digitalWrite(pin,value); เมอื่ pin คอื หมายเลขขาที่ตองการ value สถานะลอจกิ ทต่ี องการ (HIGH หรือ LOW)   analogWrite(pin, value)       pinMode(pin,INPUT)  HIGH        digitalWrite(pin, value)  LOW pinMode(pin,OUTPUT)          รปู ท่ี 3-1 ไดอะแกรมแสดงกลไกการกาํ หนดใหข าพอรตของ Arduino และแผงวงจร IPST-SE เปน พอรต เอาตพ ตุ ดจิ ติ อล (บลอ็ กสเี ทาแทนการทาํ งานหรอื เงอื่ นไขทตี่ อ งการ)

  Arduino IDE57 3.1.3 คาํ อธิบายและการเรียกใชฟ ง กชนั่ 3.1.3.1 pinMode(pin,mode) ใชกําหนดขาพอรต ใดๆ ใหเปนพอรต ดิจติ อล พารามเิ ตอร pin - หมายเลขขาพอรต ของแผงวงจร IPST-SE (คา เปน int) mode - โหมดการทาํ งานเปน INPUT (อนิ พตุ ) หรอื OUTPUT (เอาตพ ตุ ) (คา เปน int) ตอ งใชต วั พมิ พใ หญ ตัวอยา งที่ 3-1 int ledPin = 17; // ตอ ZX-LED ทพ่ี อรต หมายเลข 17 {vv}{ oopiiddinlsMoeotoupdp(e)(()ledPin, OUTPUT); // กาํ หนดเปนเอาตพตุ digitalWrite(ledPin, HIGH); // LED ติดสวา ง delay(1000); // หนวงเวลา 1 วนิ าที digitalWrite(ledPin, LOW); // LED ดบั delay(1000); // หนวงเวลา 1 วนิ าที } 3.1.3.2 digitalWrite(pin,value) ส่ังงานใหขาพอรต มีคาสถานะเปนลอจกิ สูง (HIGH หรอื “1”) หรอื ลอจกิ ต่ํา (LOW หรอื “0”) พารามเิ ตอร pin - หมายเลขขาพอรต ของแผงวงจร IPST-SE (คา เปน int) value - มีคา HIGH หรอื LOW ตัวอยางที่ 3-2 int ledPin = 17; // ตอ ZX-LED ทพี่ อรต หมายเลข 17 {v}v{ oopiiddinlsMoeotoupdp(e)(()ledPin, OUTPUT); // กาํ หนดเปน เอาตพตุ digitalWrite(ledPin, HIGH); // LED ติดสวา ง delay(500); // หนวงเวลา 0.5 วนิ าที digitalWrite(ledPin, LOW); // LED ดบั delay(500); // หนวงเวลา 0.5 วนิ าที } กาํ หนดใหพ อรต หมายเลข 17 เปน HIGH (มีลอจกิ เปน “1”) หนวงเวลา 0.5 วนิ าที แลว จึงส่งั ใหก ลบั เปน LOW (มีลอจิกเปน “0”) อกี ครั้ง วนเชนน้ีไปตลอด

58      Arduino IDE 3.2 ฟง กช นั่ ใชง านพอรต อนิ พตุ ดิจิตอลของแผงวงจร IPST-SE 3.2.1 คณุ สมบัตขิ องขาพอรตอนิ พตุ ขาพอรต ของ Arduino และแผงวงจร IPST-SE จะถูกกําหนดเปนอนิ พตุ ตงั้ แตเร่มิ ตน จงึ ไมจ าํ เปนตองใชฟงกชั่น pinMode() ในการกําหนดใหเ ปนอนิ พตุ ขาพอรต ท่ีถกู กําหนดเปน อนิ พตุ จะมี สถานะเปน อมิ พแี ดนซส งู ทาํ ใหม ีความตอ งการกระแสไฟฟา จากอปุ กรณท ตี่ อ งการอา นคา อนิ พตุ นอ ย มาก ทาํ ใหไ มส ามารถรบั หรอื จา ยกระแสใหก บั วงจรภายนอก ทาํ ใหน าํ ขาทเ่ี ปน อนิ พตุ นไ้ี ปใชง านบาง ประเภท เชน สรา งตัวตรวจจับการสัมผัสท่ีอาศัยการวดั คาความจุไฟฟา สาํ หรบั ขาอนิ พตุ เมอื่ ไมม อี นิ พตุ ปอ นใหจ ะตอ งกาํ หนดคา แรงดนั ใหแ นน อนทาํ ไดโ ดยตอ ตวั ตา น ทานพลู อปั (pull-upresistor)โดยตอ ขาของตวั ตา นทานขาหนงึ่ ไปยงั ไฟเลย้ี งหรอื ตอ พลู ดาวน(pull-down) ซงึ่ ตอ ขาหนง่ึ ของตวั ตา นทานจากขาพอรต ลงกราวด คา ตวั ตา นทานทใี่ ชท ว่ั ไปคอื 10k ดงั รปู ท่ี 3-2 แผงวงจร POP-X2 มจี ดุ ตอ พอรต ดจิ ติ อลทกี่ าํ หนดใหเ ปน อนิ พตุ หรอื เอาตพ ตุ จาํ นวน 16 จดุ ตอ หรอื 16 ขา ถา ตอ งการกําหนดเปน อนิ พตุ ตองกาํ หนดดว ยฟง กช นั่ pinMode และอา นคา อนิ พตุ ไดจ าก ฟงกช่ัน digitalRead ซ่ึงมีรปู แบบดังนี้ digitalRead(pin); เมอ่ื pin คอื หมายเลขขาท่ีตองการอานคาสถานะ เมอื่ ฟง กช ั่นทํางาน จะคืนคาเปน สถานะของขาที่ตองการอา นคา โดยคนื คาเปน LOW (คาเปน “0”) หรอื HIGH (คาเปน “1”) +Vcc ปกตเิ ปนลอจิกต่ํา Rpull-up (LOW หรือ \"0\") Di INPUT Di INPUT ปกตเิ ปน ลอจิกสงู Rpull-down (HIGH หรอื \"1\") (ข) การตอตวั ตา นทานพลู ดาวน (ก) การตอตวั ตานทานพูลอัป รปู ท่ี 3-2 แสดงการตอ ตวั ตา นทานเพื่อกาํ หนดสภาวะของขาพอรต อินพุตของไมโครคอนโทรลเลอร ในขณะทย่ี งั ไมม อี นิ พตุ สง เขา มา

   Arduino IDE59 +Vcc ส่ังใหต อ ตวั ตา นทาน 20k Digital พูลอปั ภายในดวยคําส่ัง Di input port digitalWrite(pin, HIGH) รปู ที่ 3-3 แสดงการตอ ตวั ตา นทานพูลอปั ภายในที่พอรต อินพุตดจิ ติ อลของไมโครคอนโทรลเลอรซ ึ่ง ควบคมุ ไดด ว ยกระบวนการทางซอฟตแ วร ภายในขาพอรต ของไมโครคอนโทรลเลอร ATmega644P ซง่ึ เปน ไมโครคอนโทรลเลอรห ลกั ของแผงวงจร IPST-SE จะมกี ารตอตัวตานทานพลู อปั คา 20k เตรยี มไวใ ห สงั่ การเพอื่ ตอใชง านผาน ทางซอฟตแวร ดังรปู ท่ี 3-3 ในรปู ท่ี3-4แสดงไดอะแกรมการเขยี นคาํ สงั่ เพอื่ กาํ หนดใหใ ชง านขาพอรต ของไมโครคอนโทรล เลอรห ลกั ของแผงวงจร IPST-SE ทาํ งานเปน ขาพอรต อนิ พตุ ดจิ ติ อล               digitalWrite(pin, HIGH) pinMode(pin,INPUT)           pinMode(pin,OUTPUT) val = digitalRead(pin);                val รปู ท่ี 3-4 ไดอะแกรมแสดงกลไกการกาํ หนดใหข าพอรต ของ Arduino และแผงวงจร IPST-SE เปน พอรต อนิ พตุ ดจิ ติ อล (บลอ็ กสเี ทาแทนการทาํ งานหรอื เงอื่ นไขทตี่ อ งการ)

60     Arduino IDE 3.2.2 ตวั อยา งการเรยี กใชฟ ง กช น่ั เพอื่ ใชง านพอรต อนิ พตุ ดจิ ติ อล 3.2.2.1 int digitalRead(pin) อา นคาสถานะของขาที่ระบไุ ววา มีคาเปน HIGH หรอื LOW พารามเิ ตอร pin - ขาพอรต ทต่ี องการอา นคา ซง่ึ ตองเปน ขาพอรต ดจิ ติ อล มีคา ไดจ าก 0 ถึง 30 หรอื เปน ตัวแปรทมี่ ีคา อยใู นชวง 0 ถึง 30 กไ็ ด คาที่สงกลับ เปน HIGH หรอื LOW ตัวอยา งที่ 3-3 // ตอ ZX-LED ทพ่ี อรต หมายเลข 17 // ตอ ZX-SWITCH01 ทพี่ อรต หมายเลข 18 int ledPin = 17; // กาํ หนดเตวั แปรสําหรบั เก็บคาท่ีอานไดจ ากอนิ พุต int inPin = 18; int val = 0; // กาํ หนดใหพ อรต 29 เปน เอาตพตุ void setup() // กาํ หนดใหพ อรต 18 เปน อนิ พุต { // อา นคาจากพอรต อนิ พุต pinMode(ledPin, OUTPUT); // แสดงคา ที่อา นไดท พี่ อรต เอาตพตุ ในทนี่ ี่คอื พอรต 17 pinMode(inPin, INPUT); } void loop() { val = digitalRead(inPin); digitalWrite(ledPin, val); } เมอ่ื ไมก ดสวติ ช สถานะทพี่ อรต 18 เปน “1” ทาํ ใหพ อรต 17 มีสถานะเปน ”1” เชนกัน LED ทต่ี อกบั พอรต 17 จงึ ตดิ สวา ง เมื่อกดสวติ ช สถานะลอจกิ ทพ่ี อรต 18 จะเปน “0” พอรต 17 จึงมสี ถานะเปน “0” เชน กนั LED ทต่ี ออยจู ึงดับ หมายเหตุ : ขาพอรต ในโปรแกรมน้ีอา งถงึ จดุ ตอ พอรต ของแผงวงจร IPST-SE

   Arduino IDE61 3.3 ฟง กชน่ั เก่ียวกบั การสอ่ื สารผา นพอรต อนุกรม ใชสอ่ื สารขอมลู ระหวา งฮารดแวร Arduino (ในที่นี้คือแผงวงจร IPST-SE) กับคอมพิวเตอร โดยกระทําผานพอรต USB ในรปู ที่ 3-5 แสดงกลไกการทาํ งานของฟง กชนั่ Serial ใน Arduino IDE นอกจากนี้แผงวงจร IPST-SE ยังมีพอรต สาํ หรบั ส่ือสารขอมลู อนกุ รมหรอื UART อกี หนงึ่ ชดุ นน่ั คือ UART1 ซ่ึงใชพอรต หมายเลข 2 เปนขา RxD สําหรบั รบั ขอมลู อนกุ รม และพอรต หมายเลข 3 เปน ขา TxD สาํ หรบั สง ขอ มลู อนกุ รม โดย UART1 นใ้ี ชส าํ หรบั เชอื่ มตอ อปุ กรณส อ่ื สารขอ มลู อนกุ รม ท้งั แบบมสี ายหรอื ไรส ายอยา งบลทู ธู หรอื XBEE ดว ยระดบั สัญญาณ TTL (0 และ +3.3V หรอื +5V) รวมถึงโมดลู Serial WiFi เพอ่ื ชว ยใหแ ผงวงจร IPST-SE เชอ่ื มตอกับเครอื ขายอนิ เทอรเ น็ตได อนั จะ นําไปสกู ารพฒั นาโครงงานควบคมุ อปุ กรณผ า นโครงขา ยขอ มลู ในแบบตา งๆ รวมถงึ การควบคมุ ขา ม โลกผานเว็บบราวเซอร                    Serial.print(data) Serial.flush()         Serial.begin(speed)    Serial.println(data)              Serial.write(data)       Serial.available()          Serial.read(data)      รปู ท่ี 3-5 กลไกการสอ่ื สารขอ มลู อนกุ รมของฟง กช นั่ Serial ใน Arduino 1.0.x

62    Arduino IDE 3.3.1 คาํ อธิบายและการเรียกใชฟ ง กชน่ั 3.3.1.1 Serial.begin(int datarate) กําหนดคา อตั ราบอดของการรบั สงขอมลู อนกุ รม ในหนวยบติ ตอ วินาที (bits per second : bps หรอื baud) ในกรณที ่ีติดตอกบั คอมพวิ เตอรใ หใชคาตอไปนี้ 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 หรอื 115200 พารามเิ ตอร Int datarate ในหนว ยบิตตอวนิ าที (baud หรอื bps) ตัวอยา งท่ี 3-4 void setup() // เปด พอรต อนกุ รม กาํ หนดอัตราบอดเปน 9600 บิตตอวนิ าที { Serial.begin(9600); } 3.3.1.2 Serial.available() ใชแจง วา ไดร บั ขอมลู ตัวอักษร (characters) แลว และพรอมสาํ หรบั การอา นไปใชง าน คาท่ีสงกลับจากฟงกช่ัน จาํ นวนไบตท พี่ รอ มสาํ หรบั การอา นคา โดยเกบ็ ขอ มลู ในบฟั เฟอรต วั รบั ถาไมม ีขอ มูล จะมีคา เปน 0 ถามีขอ มูล ฟง กช ั่นจะคนื คาที่มากกวา 0 โดยบัฟเฟอรเ กบ็ ขอมูลไดส งู สดุ 128 ไบต 3.3.1.3 Serial.read() ใชอานคาขอมูลที่ไดรับจากพอรตอนุกรม คาท่ีสงกลับจากฟงกชั่น เปน เลข int ทเี่ ปน ไบตแรกของขอ มูลทไี่ ดร บั (หรอื เปน -1 ถาไมมีขอ มูล) ตัวอยา งท่ี 3-5 // เปด พอรต สอ่ื สาร กาํ หนดอตั ราบอด 9600 บิตตอวนิ าที // วนสง ขอ มูลเมอ่ื ไดรบั ขอมูลเขา มา int incomingByte = 0; // อา นขอ มูลอนุกรม void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0)

  Arduino IDE63 { incomingByte = Serial.read(); // เกบ็ ขอ มลู ทอี่ า นไดไ วใ นตวั แปร Serial.print(\"I received: \"); // พมิ พขอ ความออกไปยงั หนา ตาง Serial Monitor Serial.println(incomingByte, DEC); // พมิ พขอ มูลทร่ี บั ไดอ อกไปยงั หนา ตาง Serial Monitor } } ในตวั อยา งน้ี เลอื กใชอ ตั ราบอด 9600 บิตตอวนิ าที ถามีขอ มูลเขามาจะเก็บไวใ นตวั แปร incomingByte แลวนําไปแสดงผลทหี่ นาตาง Serial Monitor โดยตอทา ยขอความ I received :..... เมอื่ รนั โปรแกรม ใหเ ปด หนา ตาง Serial Monitor โดยคลกิ ทป่ี มุ ซ่งึ อยทู มี่ ุมขวาของหนา ตางหลกั เลอื กอัตราบอดของหนา ตาง Serial Monitor เปน 9600baud, เลอื ก No line Ending คลกิ ทาํ เครอ่ื งหมายทช่ี อง Autoscroll จากน้ันปอนอกั ษร a แลว คลกิ ปมุ Send เมอื่ แผงวงจร IPST-SE ไดรบั ขอมูล จะสง คา ของตวั อักษรในรูปของเลขฐานสบิ กลับมา อักษร a มีรหสั แอสกเี้ ทา กับ 61 เมอื่ แปลงเปน เลขฐานสิบ จะไดค า เปน 97 3.3.1.4 Serial.flush() ใชลางบัฟเฟอรตัวรับขอมูลของพอรตอนุกรมใหวาง

64     Arduino IDE 3.3.1.5 Serial.print(data) ใชสงขอมลู ออกทางพอรต อนุกรม พารามเิ ตอร Data - เปน ขอ มูลเลขจํานวนเต็ม ไดแ ก char, int หรอื เลขทศนิยมทต่ี ัดเศษออกเปน เลขจาํ นวนเต็ม รูปแบบฟงกช่ัน คําส่ังนี้สามารถเขียนไดหลายรูปแบบ Serial.print(b) เปน การเขยี นคาํ สง่ั แบบไมไ ดร ะบรุ ปู แบบ จะพมิ พค า ตวั แปร b เปน เลขฐานสบิ โดยพมิ พต วั อกั ษรรหสั ASCII ดงั ตวั อยา ง int b = 79; Serial.print(b); พมิ พข อ ความ 79 Serial.print(b, DEC) เปน คําส่ังพมิ พคา ตัวแปร b เปน ตัวเลขฐานสบิ โดยพมิ พตัวอกั ษรตามรหสั ASCII ดงั ตวั อยา ง int b = 79; Serial.print(b); พมิ พข อ ความ 79 Serial.print(b, HEX) เปน คําสงั่ พมิ พคา ตัวแปร b เปน ตัวเลขฐานสบิ หก โดยพมิ พตัวอักษรตามรหสั ASCII ดงั ตวั อยา ง int b = 79; Serial.print(b, HEX); พมิ พข อ ความ 4F Serial.print(b, OCT) เปน คําสง่ั พมิ พคา ตัวแปร b เปน ตัวเลขฐานแปด โดยพมิ พตัวอกั ษรตามรหสั ASCII ดงั ตวั อยา ง int b = 79; Serial.print(b, OCT); พมิ พข อ ความ 117 Serial.print(b, BIN) เปน คําสงั่ พมิ พคา ตัวแปร b เปน ตัวเลขฐานสอง โดยพมิ พตัวอกั ษรตามรหสั ASCII ดงั ตวั อยา ง int b = 79; Serial.print(b, BIN); พมิ พขอ ความ 1001111

  Arduino IDE65 Serial.write(b) เปน คาํ สง่ั พมิ พค า ตัวแปร b ขนาด 1 ไบต เดมิ ทคี าํ สง่ั นี้ จะเปน Serial.print(b,BYTE) ตงั้ แต Arduino 1.0 ขน้ึ มา ไดย กเลกิ คาํ สง่ั Serial.print(b,BYTE) และใหใ ชคาํ สงั่ Serial.write(b) แทน ดงั ตวั อยา ง int b = 79; Serial.write(b); พมิ พตัวอกั ษร O ซึง่ มคี า ตามตาราง ASCII เทา กับ 79 ใหด ขู อ มูลจากตารางรหสั แอสกเ้ี พม่ิ เติม Serial.print(str) เปน คาํ สง่ั พมิ พค า ขอ ความในวงเลบ็ หรอื ขอ ความทเี่ กบ็ ในตวั แปร str ดงั ตวั อยา ง Serial.print(“Hello World!”); พมิ พข อ ความ Hello World พารามเิ ตอร b - ไบตขอ มลู ทต่ี อ งการพมิ พอ อกทางพอรต อนุกรม str - ตวั แปรสตรงิ ทเ่ี กบ็ ขอ ความสาํ หรบั สง ออกพอรต อนุกรม ตัวอยางท่ี 3-6 int analogValue = 0; // กาํ หนดตวั แปรเกบ็ คาสญั ญาณอะนาลอก void setup() { Serial.begin(9600); // เปด พอรต อนกุ รม กาํ หนดอัตราบอดเปน 9600 บิตตอวนิ าที } void loop() { analogValue = analogRead(0); // อานคาสญั ญาณอะนาลอกชอง 0 // โดยตอแผงวงจร ZX-POT เขา ทจี่ ุดตอ A0 // แสดงผลทห่ี นาตาง Serial Monitor ในหลายรูปแบบ Serial.print(analogValue); // แสดงเปน รหสั แอสกข้ี องเลขฐานสบิ Serial.print(\"\\t\"); // คน่ั ดว ยแทบ็ (tab) Serial.print(analogValue, DEC); // แสดงเปน รหสั แอสกขี้ องเลขฐานสบิ Serial.print(\"\\t\"); // คนั่ ดว ยแทบ็ (tab) Serial.print(analogValue, HEX); // แสดงเปน รหสั แอสกข้ี องเลขฐานสบิ หก Serial.print(\"\\t\"); // คน่ั ดว ยแทบ็ (tab) Serial.print(analogValue, OCT); // แสดงเปน รหสั แอสกขี้ องเลขฐานแปด Serial.print(\"\\t\"); // คน่ั ดว ยแทบ็ (tab) Serial.print(analogValue, BIN); // แสดงเปน รหสั แอสกข้ี องเลขฐานสอง Serial.print(\"\\t\"); // คน่ั ดว ยแทบ็ (tab)

66   Arduino IDE Serial.write(analogValue/4); // แสดงขอ มูลดบิ ซงึ่ ตอ งผา นการหารดว ย 4 เนื่องจากฟง กช ั่น analogRead() คนื คา 0 ถึง 1023 // แตต ัวแปรแบบไบตรบั คาไดเ พยี ง 255 Serial.print(\"\\t\"); // คนั่ ดว ยแทบ็ (tab) Serial.println(); // ขนึ้ บรรทดั ใหม delay(10); // หนวงเวลา 10 มิลลิวนิ าที } ตวั อยา งนแ้ี สดงการพมิ พข อ มลู จากฟง กช น่ั Serial.Print() ในรปู แบบตา งๆ แสดงผา นหนา ตา ง Serial Monitor ตองเลอื กอตั ราบอดของหนา ตาง Serial Monitor เปน 9600baud, เลอื ก No line Ending และคลิกทาํ เครอ่ื งหมายทชี่ อง Autoscroll ดว ย จึงจะไดผ ลการทาํ งานทถ่ี ูกตอ ง เทคนิคสําหรับการเขียนโปรแกรม Serial.print() จะตดั เศษเลขทศนยิ มเหลอื เปน เลขจาํ นวนเตม็ ทาํ ใหส ว นทศนยิ มหายไป ทางแกไ ขทางหนงึ่ คอื คณู เลขทศนยิ มดว ย 10, 100, 1000 ฯลฯ ขน้ึ อยกู บั จาํ นวนหลกั ของเลขทศนยิ ม เพือ่ แปลงเลขทศนยิ มเปนจาํ นวนเตม็ กอ นแลวจงึ สงออกพอรตอนกุ รม จากนัน้ ทฝ่ี ง ภาครับใหท าํ การ หารคาทร่ี บั ไดเพื่อแปลงกลับเปน เลขทศนิยม

  Arduino IDE67 3.3.1.6 Serial.println(data) เปนฟง กชนั่ พมิ พ (หรอื สง ) ขอมลู ออกทางพอรต อนุกรมตามดวยรหสั carriage return (รหสั ASCII หมายเลข 13 หรือ \\r) และ linefeed (รหัส ASCII หมายเลข 10 หรอื \\n) เพอื่ ใหเ กิดการเล่ือน บรรทัดและข้ึนบรรทัดใหมหลังจากพิมพขอความ มีรูปแบบเหมือนคําส่ัง Serial.print() รูปแบบฟงกชั่น Serial.println(b) เปน คาํ สงั่ พมิ พข อ มลู แบบไมไ ดร ะบรุ ปู แบบ จะพมิ พค า ตวั แปร b เปน เลขฐานสบิ ตามดว ยรหสั อกั ษร carriage return และ linefeed ดงั ตวั อยา งตอ ไปน้ี Serial.println(b, DEC) เปน คําสั่งพมิ พคา ตัวแปร b เปน ตัวเลขฐานสบิ ตามดว ยรหสั อักษร carriage return และ linefeed Serial.println(b, HEX) เปน คําส่ังพมิ พคา ตัวแปร b เปน ตัวเลขฐานสบิ หก ตามดว ยรหสั อกั ษร carriage return และ linefeed Serial.println(b, OCT) เปน คําสงั่ พมิ พคา ตัวแปร b เปน ตัวเลขฐานแปด ตามดว ยรหสั อักษร carriage return และ linefeed Serial.println(b, BIN) เปน คําสั่งพมิ พคา ตัวแปร b เปน ตัวเลขฐานสอง ตามดว ยรหสั อกั ษร carriage return และ linefeed Serial.println(b, BYTE) เปน คําสง่ั พมิ พคา ตัวแปร b ขนาด 1 ไบต ตามดว ยรหสั อกั ษร carriage return และ linefeed Serial.println(str) เปน คาํ ส่งั พมิ พคา ขอ ความในวงเลบ็ หรอื ขอ ความ ทเี่ กบ็ ในตวั แปร str ตามดว ยรหสั อกั ษร carriage return และ linefeed Serial.println() เปน คําสง่ั พมิ พรหสั carriage return และ linefeed พารามเิ ตอร b - ไบตขอ มลู ทต่ี อ งการพมิ พอ อกทางพอรต อนุกรม str - ตวั แปรสตรงิ ทเ่ี กบ็ ขอ ความสาํ หรบั สง ออกพอรต อนุกรม

68     Arduino IDE ตัวอยา งท่ี 3-7 int analogValue = 0; // ประกาศตวั แปรสําหรบั เก็บคาอะนาลอก void setup() // เปด พอรต อนกุ รมและเลอื กอตั ราบอดเปน 9600 บติ ตอ วนิ าที { Serial.begin(9600); } void loop() { analogValue = analogRead(0); // อานคาอนิ พุตอะนาลอกชอง 0 // ตอแผงวงจร ZX-POT กบั พอรต อินพตุ อะนาลอก A0 // แสดงผลในรปู แบบตา งๆ Serial.println(analogValue); // แสดงเปน รหสั แอสกข้ี องเลขฐานสบิ Serial.println(analogValue, DEC); // แสดงเปน รหสั แอสกขี้ องเลขฐานสบิ Serial.println(analogValue, HEX); // แสดงเปน รหสั แอสกข้ี องเลขฐานสบิ หก Serial.println(analogValue, OCT); // แสดงเปน รหสั แอสกขี้ องเลขฐานแปด Serial.println(analogValue, BIN); // แสดงเปน รหสั แอสกข้ี องเลขฐานสอง Serial.write(analogValue); // แสดงคา ในรปู แบบขอ มลู ระดบั ไบต Serial.println(); Serial.flush(); delay(500); // หนวงเวลา 500 มิลลวิ นิ าที } ตองเลอื กอตั ราบอดของหนา ตาง Serial Monitor เปน 9600baud, เลอื ก No line Ending และคลิกทาํ เครอื่ งหมายทีช่ อง Autoscroll ดว ย จงึ จะไดผ ลการทาํ งานทถี่ ูกตอ ง

  Arduino IDE69 3.4 ฟง กชนั่ อนิ พตุ เอาตพ ตุ อะนาลอก 3.4.1 ฟง กช นั่ อนิ พตุ อะนาลอก analogRead(pin) อา นคาจากขาพอรตทกี่ ําหนดใหเปนอนิ พตุ อะนาลอกของแผงวงจรหลัก IPST-SE โดยแผง วงจร IPST-SE มวี งจรแปลงสญั ญาณอะนาลอกเปน ดจิ ติ อลทม่ี คี วามละเอยี ด 10 บติ อยภู ายใน จงึ แปลง คาแรงดนั อนิ พตุ 0 ถึง +5V ใหเปนขอมลู ตัวเลขจาํ นวนเต็มระหวาง 0 ถงึ 1023 พารามเิ ตอร pin - หมายเลขของขาอินพตุ อะนาลอก มีคา 0 ถึง 5 หรอื เปน ตัวแปรทใี่ ชแทนคา 0 ถึง 5 คาท่ีสงกลับ เลขจาํ นวนเต็มจาก 0 ถึง 1023 หมายเหตุ สาํ หรบั ขาทเ่ี ปน อนิ พตุ อะนาลอกไมจ าํ เปน ตอ งประกาศแจง วา เปน อนิ พตุ หรอื เอาตพ ตุ ตัวอยา งท่ี 3-8 int ledPin = 17; // ตอแผงวงจร ZX-LED เขา ทพี่ อรต 17 int analogPin = 0; // ตอแผงวงจร ZX-POT เขา ทพี่ อรต อนิ พตุ A0 int val = 0; // กาํ หนดตวั แปรรบั คาอะนาลอก int threshold = 512; // กาํ หนดคา อา งองิ void setup() { // กาํ หนดใหพ อรต 17 เปน เอาตพตุ pinMode(ledPin, OUTPUT); // อานคาอนิ พุตอะนาลอก A0 } void loop() // ขบั LED { // ดบั LED val = analogRead(analogPin); if (val >= threshold) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } ตัวอยา งน้ีจะสง่ั ใหพ อรต 17 เปน ลอจกิ “1” เมอ่ื อานคาจากพอรต อนิ พุต A0 แลว มีคา มากกวาหรอื เทา กับ คา อา งองิ ทก่ี าํ หนดไว (ในตวั อยา ง คา อา งอิงหรอื threshold = 255) แตถ านอยกวา สถานะทพ่ี อรต 17 จะกลายเปน ลอจกิ “0” ทาํ ให LED ดบั

70     Arduino IDE 3.4.2 ฟง กช นั่ เอาตพ ตุ อะนาลอก analogWrite(pin, value) ใชเ ขยี นคา อะนาลอกไปยงั พอรต ทก่ี าํ หนดไว เพอื่ สรา งสญั ญาณ PWM มกี ระบวนการทาํ งาน ตามรปู ท่ี 3-6 พารามเิ ตอร pin - หมายเลขขาพอรต ของแผงวงจรหลกั IPST-SE เลอื กได 2 ขาคอื 19 และ 20 value - เปน คา ดวิ ต้ีไซเกลิ มีคา ระหวา ง 0 ถึง 255 เมอ่ื คา เปน 0 แรงดนั ของขาพอรต ทกี่ าํ หนดจะเปน 0V เมอ่ื มีคา เปน 255 แรงดันที่ขาพอรต จะเปน +5V สําหรบั คาระหวาง 0 ถึง 255 จะทําใหข าพอรต ทกี่ าํ หนดไวม ีคา แรงดันเปลยี่ นแปลงในยาน 0 ถึง +5V คาที่สงกลับจากฟงกชั่น เลขจํานวนเต็มจาก 0 ถึง 255 หมายเหตุ ขาพอรต ทใ่ี ชสรา งสัญญาณ PWM ดว ยฟง กช ั่น analogWrite() ของแผงวงจร IPST-SE มี 6 ขาคอื ขา 4, 5, 6, 7, 19 และ 20 แตจ ะตอออกมาเปน จดุ ตอ เพอื่ ใชงานกบั อปุ กรณภายนอกเพยี ง 2 ขาคอื พอรต 19 และ 20 สาํ หรบั ขาอ่นื ๆ ถูกตอเขา กบั วงจรขบั มอเตอรบ นแผงวงจร IPST-SE จงึ ไมสามารถทาํ การทดสอบคาํ ส่ัง analogWrite ให เห็นได ผูใชงานสามารถนําสัญญาณท่ีไดจากคําส่ังน้ีไปใชในการปรับความสวางของ LED หรือตอ ขยายกระแสเพอื่ ตอ ปรบั ความเรว็ ของมอเตอรไ ด หลงั จากเรยี กใชคําส่ังน้แี ลว ทขี่ าพอรต ที่กําหนดจะ มสี ญั ญาณ PWM สง ออกมาอยางตอเนอ่ื ง จนกวา จะมีการเรียกคําส่งั analogWrite (หรอื เรยี กคําสั่ง digitalRead หรือ digitalWrite ทข่ี าเดียวกัน)    analogWrite(pin, value)         รปู ท่ี 3-6 ไดอะแกรมแสดงกลไกการทาํ งานเพอ่ื สรา งสญั ญาณ PWM ของ Arduino และแผงวงจร IPST-SE

   Arduino IDE71 ตัวอยา งท่ี 3-9 int ledPin = 19; // ตอแผงวงจร ZX-LED เขา ทพ่ี อรต 19 int analogPin = 0; // ตอแผงวงจร ZX-POT เขา ทพี่ อรต อนิ พตุ A0 int val = 0; // กาํ หนดตวั แปรรับคาอะนาลอก int threshold = 512; // กาํ หนดคา อา งองิ v{v{}ooiidd setup() // เกบ็ ขอ มลู ทอ่ี า นไดจ ากอนิ พตุ อะนาลอกลงในตวั แปร loop() val = analogRead(analogPin); analogWrite(ledPin, val / 4); // ปรบั คาที่ไดจ ากการแปลงสญั ญาณ 0 ถึง 1023 // เปน คา 0 ถึง 255 แลวสง ไปยังพอรต เอาตพตุ อะนาลอก } ตัวอยา งน้ีเปน การควบคุมความสวา งของ LED ทตี่ อกบั พอรต 19 ใหเ ปน ไปตามคา ที่อา นไดจากแผงวงจร ZX-POT (แผงวงจรตัวตานทานปรบั คา ได) ทต่ี อกบั พอรต A0 3.5 ฟง กชน่ั พอรต อนิ พตุ เอาตพ ตุ ขน้ั สงู (Enhanced I/O) 3.5.1 shiftOut(dataPin, clockPin, bitOrder, value) เปนฟง กชั่นสําหรบั เล่ือนขอ มลู ขนาด 1 ไบต (8 บิต) ออกจากขาพอรต ที่กําหนดไว สามารถ กําหนดไดวา จะใหเ ร่ิมเล่ือนบติ ขอมลู จากบิตที่มคี วามสาํ คัญสงู สดุ (MSB หรอื บติ ซายสุด) หรอื บติ ท่ีมคี วามสาํ คัญต่ําสดุ (LSB - บติ ขวาสุด) โดยบิตของขอมลู จะออกที่ขา dataPin และใชอ กี หนง่ึ ขาคือ clockPin เปนตัวกําหนดจังหวะการเลื่อนขอมูล การสง ขอ มลู วธิ ที ว่ี า นเี้ รยี กวา การสง ขอ มลู อนกุ รมแบบโปรโตคอลซงิ โครนสั ซงึ่ เปน วธิ ที วั่ ไป ทไ่ี มโครคอนโทรเลอรใ ชต ดิ ตอ กบั ตวั ตรวจจบั หรอื ไมโครคอนโทรลเลอรต วั อนื่ อปุ กรณท ง้ั สองตวั ตอ ง ทาํ งานประสานกนั (ซงิ โครไนซก นั ) และตดิ ตอ กนั ทคี่ วามเรว็ สงู สดุ เนอื่ งจากอปุ กรณท งั้ สองตวั จะใช สญั ญาณนาฬกิ าเดยี วกนั จะเรยี กชอ่ื อกี อยา งวา เปน การสอื่ สารแบบSPI(synchronousperipheralinterface) พารามเิ ตอร dataPin - พอรต ทกี่ าํ หนดใหเ ปน เอาตพตุ เพอ่ื สงขอ มูลออก (ตัวแปรชนิด int) clockPin - พอรต ทกี่ าํ หนดใหท าํ หนา ทส่ี ง สญั ญาณนาฬกิ าเพอื่ กาํ หนดจงั หวะการเลอ่ื นขอ มลู ของ dataPin bitOrder - กาํ หนดลาํ ดบั การเลอ่ื นบิตขอ มูล เลอื กไดว า เปน MSBFIRST หรอื LSBFIRST value - ไบตขอ มูลทต่ี องการสง แบบอนุกรม พอรต ทเ่ี ปน dataPin และ clockPin จะตอ งกาํ หนดใหเ ปน เอาตพ ตุ กอ น ดว ยการเรยี กใชฟ ง กช น่ั pinMode

72    Arduino IDE การเขียนโปรแกรมทผ่ี ิดพลาดที่พบบอ ยของฟงกช น่ั shiftOut เน่ืองจากฟง กชน่ั น้สี ามารถสง ขอมลู ไดค รัง้ ละ 1 ไบต (8 บติ ) เทาน้ัน ถา เปนตัวแปร int หนง่ึ ตัวเก็บขอมลู ขนาด 2 ไบต (16 บติ ) ทาํ ใหไมส ามารถสง คาไดโ ดยใชคําสัง่ นี้เพยี งคร้ังเดียว ถาสง่ั เพยี ง คร้ังเดียว คาที่ไดจะผิดพลาด ดังตัวอยางโปรแกรมที่ผิดพลาดตอไปน้ี ตัวอยา งที่ 3-10 int data; int clock; int cs; ... digitalWrite(cs, LOW); data = 500; shiftOut(data, clock, MSBFIRST, data) digitalWrite(cs, HIGH); ขอ มูลทต่ี องการเลอ่ื นเทา กับ 500 ดงั นน้ั จงึ มขี นาด 2 ไบต (เพราะ 1 ไบตเกบ็ คาไดส ูงสดุ 256 คา ) แต เนื่องจากในโปรแกรมเลอ่ื นเพยี ง 1 ไบต คา ท่ีไดจ งึ เทา กับ 244 เนื่องจากขอ มูล 8 บิตบนของตวั แปร data มี คา เทา กับ 244 ในตัวอยางท่ี 3-11 เปน การแกไขโปรแกรมเพอ่ื ใหส ามารถเลือ่ นขอมูลไดอยางถกู ตอง ตัวอยางที่ 3-11 ในกรณีทต่ี องการเลอื่ นบิต MSB กอ น เขยี นโปรแกรมไดด งั น้ี data = 500; shiftOut(data, clock, MSBFIRST, (data >> 8)); // เลอ่ื นขอ มูลไบตสงู shiftOut(data, clock, MSBFIRST, data); // เลอ่ื นขอ มลู ไบตต าํ่ ในกรณีทตี่ องการเลอื่ นบติ LSB กอ น เขยี นโปรแกรมไดดงั นี้ data = 500; shiftOut(data, clock, MSBFIRST, data); // เลอ่ื นขอ มลู ไบตต า่ํ shiftOut(data, clock, MSBFIRST, (data >> 8)); // เลอื่ นขอ มูลไบตสงู 3.5.2 unsigned long pulseIn(pin, value) ใชอานคาบเวลาของพัลส (ไมวาเปน HIGH หรือ LOW) ที่เกิดขึ้นท่ี pin (ขาพอรตอินพุต ดิจิตอล) ทก่ี ําหนด เชน ถากาํ หนด value เปน HIGH คําสั่ง pulseIN() จะรอใหข าทกี่ ําหนดไวม ีสถานะ เปน HIGH เพอ่ื เรมิ่ จบั เวลา และจบั เวลาตอไปจนกวาสถานะของขานั้นจะเปน LOW จงึ หยุดจับเวลา คาที่ฟงกช่ันคืนกลับมาเปนคาบเวลาของพัลสในหนวยไมโครวินาที แสดงการทํางานในรูปที่ 4 - 4

  Arduino IDE73 value = HIGH value = LOW เร่มิ การนับเวลา เร่มิ การนับเวลา หยดุ การนบั เวลา หยุดการนับเวลา รปู ท่ี 3-7 การทาํ งานของฟง กช น่ั pulseIn คาฐานเวลาของฟงกช่ันประมาณคาไดจากการทดลอง และอาจผิดพลาดไดในกรณีท่ีพัลสมี ความกวางมาก ฟง กชัน่ นี้ทาํ งานไดดีกับสญั ญาณพลั สท่ีมคี าบเวลา 10 ไมโครวินาทถี งึ 3 นาที พารามเิ ตอร pin - ขาพอรต ทต่ี องการอานคา คาบเวลาพลั ส (ตัวแปรชนิด int) value - ระดบั สญั ญาณทตี่ องการตรวจจบั กาํ หนดเปน HIGH หรอื LOW (ตัวแปรชนิด int) โดย HIGH คอื ลอจกิ สงู และ LOW คอื ลอจกิ ตา่ํ คาที่สงกลับจากฟงกช่ัน คาบเวลาของพลั สใ นหนว ยไมโครวนิ าที ตัวอยา งที่ 3-12 int pin = 18; unsigned long duration; void setup() { pinMode(pin, INPUT); } void loop() { duration = pulseIn(pin, HIGH); } ฟง กช ั่นน้ีไมม ีกลไกการหมดเวลา ถาไมม ีพลั สเ กดิ ขึน้ จะวนรอไปตลอดเวลา ทาํ ใหโ ปรแกรมคางได

74      Arduino IDE 3.6 ฟง กชนั่ เกี่ยวกบั เวลา (Time) 3.6.1 unsigned long millis() คนื คา เปน คา เวลาในหนว ยมลิ ลวิ นิ าที นบั ตง้ั แตไ มโครคอนโทรลเลอรเ รมิ่ รนั โปรแกรมปจ จบุ นั คา ทสี่ ง กลบั จากฟง กช น่ั คา เวลาในหนวยเปน มิลลิวนิ าทีต้ังแตเรม่ิ รนั โปรแกรมปจ จบุ ัน คนื คาเปน unsigned long คา ตัวเลขจะเกิด การโอเวอรโ ฟลว (คาเกนิ แลว กลบั เปนศูนย) เมอ่ื เวลาผา นไปประมาณ 9 ชั่วโมง ตัวอยา งที่ 3-13 // อา นคาเวลา // แสดงคา เวลา long time; }v{v{ ooSSiideedrrlsiioaaelolt..uppbpr(e)i(gn)itn(“(T9i6m0e0:);“); time = millis(); Serial.println(time); Serial.flush(); delay(1000); } 3.6.2 delay(ms) เปน ฟง กช นั่ ชะลอการทาํ งาน หรอื หนว งเวลาของโปรแกรมตามเวลาทก่ี าํ หนดในหนว ยมลิ ลวิ นิ าที พารามเิ ตอร ms - ระยะเวลาทต่ี องการหนวงเวลา หนวยเปน มิลลวิ นิ าที (1000 ms เทา กบั 1 วนิ าท)ี ตัวอยา งที่ 3-14 // ตอแผงวงจร ZX-LED กบั พอรต 29 int ledPin = 29; // กาํ หนดเปนพอรต เอาตพตุ void setup() { // ขบั LED // หนวงเวลา 1 วนิ าที pinMode(ledPin, OUTPUT); // ดบั LED } // หนวงเวลา 1 วนิ าที void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }

 Arduino IDE75 3.6.3 delayMicroseconds(us) เปน ฟง กช นั่ ชะลอการทาํ งาน หรอื หนว งเวลาของโปรแกรมตามเวลาทก่ี าํ หนดในหนว ยไมโคร วินาที เพ่ือใหหนวงเวลาไดอยางแมนยํา ฟงกช่ันนี้จะหยุดการทํางานของอินเตอรรัปต ทําให การทาํ งานบางอยา ง เชน การรบั ขอ มลู จากพอรต อนกุ รม หรอื การเพมิ่ คา ทจี่ ะสง กลบั คนื โดยฟง กช นั่ milis()จะไมเ กดิ ขน้ึ ดงั นน้ั ควรจะใชฟ ง กช น่ั นสี้ าํ หรบั การหนว งเวลาสนั้ ๆถา ตอ งการหนว งเวลานานๆ แนะนาํ ใหใ ชฟ ง กช นั่ delay() แทน พารามเิ ตอร us - คา หนว งเวลาในหนว ยไมโครวนิ าที (1000 ไมโครวนิ าที = 1 มลิ ลวิ นิ าที และหนงึ่ ลา นไมโครวนิ าที = 1 วนิ าท)ี ตัวอยา งท่ี 3-15 int outPin = 29; // ตอแผงวงจร ZX-LED กบั พอรต 29 void setup() // กาํ หนดเปน พอรตเอาตพตุ { // ขบั LED pinMode(outPin, OUTPUT); } void loop() { digitalWrite(outPin, HIGH); delayMicroseconds(50); // หนวงเวลา 50 ไมโครวนิ าที digitalWrite(outPin, LOW); // ดบั LED delayMicroseconds(50); // หนวงเวลา 50 ไมโครวนิ าที } จากตัวอยางนี้ กาํ หนดใหพอรต 29 ทาํ งานเปนเอาตพตุ เพอ่ื สง สญั ญาณพลั สสี่เหล่ียมท่ีมีคาบเวลา 100 ไมโครวนิ าที คําเตือน ฟงกชั่นนี้ทํางานอยางแมนยําในชวงตั้งแต 3 ไมโครวินาทีข้ึนไป ไมอาจประกันไดวา ฟงกชั่น delayMicroseconds นจี้ ะทาํ งานไดอ ยา งเทย่ี งตรงสาํ หรบั คา หนว งเวลาทตี่ ่ํากวา น้ี

76     Arduino IDE 3.7 ฟง กช น่ั ทางคณติ ศาสตร 3.7.1 min(x, y) หาคาตัวเลขท่ีนอยท่ีสุดของตัวเลขสองตัว พารามเิ ตอร x - ตัวเลขตัวแรก เปน ขอ มูลประเภทใดกไ็ ด y - ตัวเลขตัวทสี่ อง เปน ขอ มูลประเภทใดกไ็ ด คาที่สงกลับจากฟงกชั่น คา ทนี่ อยทส่ี ดุ ของตวั เลขสองตวั ทใี่ ห ตัวอยา งที่ 3-16 sensVal = min(sensVal, 100); ตัวอยา งน้ีจะไดค า ของ sensVal ท่ีไมเ กนิ 100 กลบั จากฟง กช ั่น 3.7.2 max(x, y) หาคาตัวเลขที่มากที่สุดของตัวเลขสองตัว พารามเิ ตอร x - ตัวเลขตัวแรก เปน ขอ มูลประเภทใดกไ็ ด y - ตัวเลขตัวทสี่ อง เปน ขอ มูลประเภทใดกไ็ ด คาที่สงกลับจากฟงกช่ัน คา ทมี่ ากทส่ี ดุ ของตวั เลขสองตวั ทใ่ี ห ตัวอยา งที่ 3-17 sensVal = max(senVal, 20); จากตัวอยางนี้ คา ของ sensVal จะมคี า อยางนอย 20 3.7.3 abs(x) หาคาสมั บรู ณ (absolute) ของตัวเลข พารามเิ ตอร x - ตัวเลข คาที่สงกลับจากฟงกชั่น x เมื่อ x มีคา มากกวาหรอื เทา กับศูนย (x มีคา เปน บวกหรือศนู ย) -x เมื่อ x มีคา นอยกวา ศูนย (x มีคา ติดลบ)

  Arduino IDE77 3.7.4 constrain(x, a, b) ปดคาตัวเลขที่นอยกวาหรือมากกวาใหอยูในชวงท่ีกําหนด พารามเิ ตอร x - ตัวเลขทตี่ องการปด คา ใหอ ยใู นชวงทก่ี าํ หนด สามารถเปน ขอ มูลชนิดใดกไ็ ด a - คา ต่ําสดุ ของชวงทก่ี าํ หนด b - คา สูงสุดของชวงทก่ี าํ หนด คาท่ีสงกลับจากฟงกช่ัน x เม่ือ x มีคาอยูระหวา ง a และ b a เม่ือ x มีคานอยกวา a b เมอื่ x มีคา มากกวา b ตัวอยา งท่ี 3-18 sensVal = constrain(sensVal, 10, 150); จากตัวอยา งน้ี คา ของ sensVal จะอยูในชวง 10 ถึง 150

78     Arduino IDE 3.8 ฟง กชนั่ เก่ยี วกบั ตวั เลขสุม 3.8.1 randomSeed(seed) ใชกําหนดตัวแปรสําหรบั สรางตัวเลขสุม โดยสามารถใชตัวแปรไดหลากหลายรปู แบบ โดย ท่ัวไปจะใชคาเวลาปจจุบัน (จากฟงกช่ัน )milis() แตสามารถใชคาอยางอน่ื ได เชน คาที่ไดเมอื่ ผู ใชกดสวิตช หรือคาสัญญาณรบกวนที่อานไดจากขาอินพุตอะนาลอก พารามเิ ตอร seed เปน คาตัวเลขแบบ long int ตัวอยางที่ 3-19 long randNumber; void setup() { Serial.begin(9600); } void loop() { randomSeed(analogRead(0)); randNumber = random(300); Serial.println(randNumber); } ในตวั อยา งนี้ กาํ หนดใหเ กดิ การสมุ ตัวเลขเมอ่ื อานคาจากอนิ พุตอะนาลอกชอง 0 ยา นของตวั เลขสุมคือ 0 ถึง 300 เมอื่ สุม ตัวเลขแลว ใหแ สดงคา น้ันที่หนาตาง Serial Monitor

   Arduino IDE79 3.8.2 long random(max), long random (min,max) ใชส รา งตวั เลขสมุ เสมอื น (pseudo-random numbers) เพอื่ นาํ ไปใชใ นโปรแกรม กอ นใชฟ ง กช น่ั นี้จะตองเรียกใชฟงกชั่น randomSeed() กอน พารามเิ ตอร min กาํ หนดคา ตวั เลขสมุ ไมนอ ยกวา คา นี้ (เปน ออปชน่ั เพม่ิ เตมิ ) max กาํ หนดคา สงู สดุ ของตวั เลขสุม คา ทสี่ ง กลบั จากฟง กช น่ั คนื คาเปน ตัวเลขสุม ในชวงทกี่ าํ หนด (เปน ตัวแปร long int) ตัวอยางที่ 3-20 // สุมคาจากการอานคาอนิ พุตอะนาลอก // สุมคาในชวง 50 ถึง 300 long randNumber; void setup() { Serial.begin(9600); } void loop() { randomSeed(analogRead(0)); randNumber = random(50,300); Serial.println(randNumber); Serial.flush(); delay(50); } เมอื่ รนั โปรแกรมนี้ คา ท่ีไดจ ากจะอยใู นชวง 50 ถึง 300 แมว า จะปรบั คาแรงดันอนิ พุตทพี่ อรต A0 เปน 0 หรอื +5V (ซง่ึ ปกติมีคา 0 ถึง 1023) ทง้ั นเ้ี ปน ผลมาจากฟง กช ั่น random(min,max)

80     Arduino IDE 3.9 ฟง กชนั่ เกี่ยวกบั อินเตอรร ปั ตจ ากภายนอก ใชร ะบวุ า เมอื่ เกดิ การอนิ เตอรร ปั ตจ ากภายนอกจะใหโ ปรแกรมกระโดดไปยงั ฟง กช นั่ ใด หรอื ถอดการระบุฟงกช่ัน 3.9.1 การอนิ เตอรรัปต (interrupt) หรอื การขดั จงั หวะการทาํ งานของซพี ยี ู นบั เปน คณุ สมบตั ทิ ตี่ อ งมใี นไมโครคอนโทรลเลอรส มยั ใหมและเปนคุณสมบัติท่ีมีบทบาทสําคัญอยางมาก ในขณะที่ระบบกําลังทําการลําเลียงขวดไปตาม สายพานเพอื่ ทาํ การบรรจนุ า้ํ ยา แลว เกดิ เหตกุ ารณข วดหมด จงึ ตอ งมกี ารขดั จงั หวะกระบวนการบรรจุ นาํ้ ยาชวั่ ขณะ จนกวา จะจดั หาขวดเขา มาในระบบเปน ทเี่ รยี บรอ ย กระบวนการทาํ งานกจ็ ะดาํ เนนิ ตอ ไป จากตัวอยางดังกลาว ถาเปรียบเทียบกับโปรแกรมควบคุมของไมโครคอนโทรลเลอร ระบบ ลําเลียงขวดเพ่ือบรรจุนํ้ายาเปรียบไดกับโปรแกรมหลัก เหตุการณขวดหมดคือ เง่ือนไขของการเกิด อินเตอรรัปตท่ีเปนจริง ทําใหเกิดอินเตอรรัปตขึ้น การจัดหาขวดมาเพิ่มเติมเปรียบไดกับซีพียู กระโดดออกจากโปรแกรมหลกั ไปทํางานท่ีโปรแกรมยอยบรกิ ารอนิ เตอรรปั ต เพอ่ื จดั หาขวด นั่นคือ เสร็จส้ินการบริการอินเตอรรัปต ซีพียูก็จะกระโดดกลับมาทํางานที่โปรแกรมหลักตอไป ระบบ สายพานลําเลียงก็จะทํางานตอไปตามปกติ 3.9.2 อินพตุ รบั สญั ญาณอนิ เตอรร ปั ต แผงวงจร IPST-SE มอี นิ พตุ สาํ หรับรับสญั ญาณอนิ เตอรร ัปตจากภายนอก 3 ขาคือ INT0 ถึง INT2 ซ่ึงตรงกับขาพอรต 2, 3 และ 18 ตามลําดบั ซึ่งใชงานรว มกบั ขา RxD, TxD (ขารบั สง ขอมูล อนกุ รม UART1) และขาพอรต อนิ พตุ เอาตพ ตุ ดิจติ อลปกติ 3.9.3 attachInterrupt(interrupt, function, mode) ใชระบุวา เมื่อขาอินพตุ ที่รบั สัญญาณอินเตอรร ปั ตจากภายนอกมีการเปลีย่ นแปลงจะกําหนด ใหซ พี ยี กู ระโดดไปยงั ฟง กช นั่ ใด โดยแผงวงจรหลกั IPST-SE มขี าอนิ พตุ รบั สญั ญาณอนิ เตอรร ปั ตจ าก ภายนอก 3 ขาคือ INT0 ถงึ INT2 ซง่ึ ตรงกบั พอรต 2,3, และ 18 ตามลําดับ ท้ังยังตรงกับพอรต UART1 ดวย (เฉพาะขา 2-RxD และขา 3 - TxD) ดังนัน้ หากเลอื กใชง านอนิ พตุ อนิ เตอรร ปั ต ก็จะใชงานพอรต อนกุ รม UART1 เพอ่ื ตดิ ตออปุ กรณภ ายนอกไมได (หากใช INT0 และ INT1) หมายเหตุ เมอ่ื เกดิ การอนิ เตอรรปั ตข น้ึ จะไมสามารถเรยี กใชฟง กช ่ัน milis() และ delay() ได เมอื่ เกดิ การตอบสนอง อินเตอรร ปั ตแ ลว ดงั นน้ั ขอ มูลทเ่ี ขา มาทางพอรต UART1 อาจสญู หายได

  Arduino IDE81 พารามเิ ตอร Interrupt - หมายเลขของชองอินพตุ อินเตอรร ปั ต (เปน int) function - ฟง กช ่ันทจี่ ะกระโดดไปทาํ งานเมื่อเกดิ อนิ เตอรร ปั ต ไมรบั คา พารามิเตอรแ ละไมมีการคนื คา mode - เลอื กประเภทสัญญาณทใ่ี ชกระตุนใหเ กดิ การอนิ เตอรร ปั ต LOW เกดิ อนิ เตอรรปั ตเ มอื่ ขาสัญญาณเปน ลอจิก “0” CHANGE เกดิ อนิ เตอรร ปั ตเ มอื่ มีการเปลยี่ นแปลงลอจกิ RISING เกดิ อินเตอรรปั ตเ มอ่ื มีการเปลย่ี นลอจิก “0” เปน “1” FALLING เกดิ อินเตอรร ปั ตเ มอ่ื มีการเปลย่ี นลอจิก “1” เปน “0” ตัวอยางที่ 3-21 int pin = 17; volatile int state = LOW; void setup() { pinMode(pin, OUTPUT); attachInterrupt(0, blink, CHANGE); } void loop() { digitalWrite(pin, state); } void blink() { state = !state; } ตัวอยา งน้ีเลอื กอนิ พุตอนิ เตอรร ปั ตช อง 0 กาํ หนดใหไ ปทาํ งานทฟ่ี ง กช ่ัน blink เมอื่ เกดิ อนิ เตอรรปั ตข น้ึ 3.9.4 detachInterrupt(interrupt) ยกเลิกการอินเตอรรัปต พารามเิ ตอร Interrupt - หมายเลขของชองอนิ พตุ อนิ เตอรร ปั ตทต่ี องการยกเลกิ (คา เปน 0 ถึง 3)

82     Arduino IDE

ความรเู้ ก่ยี วกับภาษา C/C++ Arduino IDEและฟงั ก์ช่ันของ สำ�หรับชดุ กล่องสมองกล หนงั สือเล่มน้ีเป็นส่วนหนงึ่ ของชุดกล่อง สมองกล IPST-MicroBOX Seconday Edition [SE] โดยใช้ประกอบในการเรยี นรู้ และฝึกฝนเกยี่ วกบั การเขยี นโปรแกรม ภาษา C/C++ เพอื่ นำ� มาพัฒนาโปรแกรม สำ� หรับกำ� หนดและควบคุมการท�ำงานของ แผงวงจรต่างๆ ในชดุ กลอ่ งสมองกล IPST-MicroBOX [SE] www.ipst-microbox.com


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook