ข้ามไปที่เนื้อหาหลัก

คำสั่งพื้นฐานที่ควรเรียนรู้ เขียนโปรแกรม Arduino

โครงสร้างพื้นฐานของโปรแกรม Arduino

คลิกภาพเพื่อขยาย

โค้ด Arduino ทุกโค้ด (หรือที่เรียกว่า Sketch) จะมีโครงสร้างหลัก 2 ส่วนเสมอ:

  1. void setup():

    • เป็นฟังก์ชันที่ ทำงานเพียงครั้งเดียว เมื่อบอร์ด Arduino เริ่มทำงาน (เปิดไฟ หรือกดปุ่ม Reset)

    • ใช้สำหรับตั้งค่าเริ่มต้นต่างๆ เช่น กำหนดโหมดของขาพอร์ต (Input/Output), เริ่มต้นการสื่อสารแบบอนุกรม (Serial Communication) หรือตั้งค่าโมดูลต่างๆ

  2. void loop():

    • เป็นฟังก์ชันที่ ทำงานซ้ำไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด หลังจากฟังก์ชัน setup() ทำงานเสร็จ

    • เป็นส่วนที่เราจะเขียนโค้ดหลักสำหรับให้ Arduino ทำงานตามที่เราต้องการ เช่น อ่านค่าจากเซ็นเซอร์, ควบคุมหลอดไฟ, มอเตอร์



void setup() {
  // เขียนโค้ดสำหรับตั้งค่าเริ่มต้นที่นี่
  // โค้ดในส่วนนี้จะทำงานเพียงครั้งเดียว
}

void loop() {
  // เขียนโค้ดหลักที่ต้องการให้ทำงานซ้ำๆ ที่นี่
  // โค้ดในส่วนนี้จะทำงานวนลูปไปเรื่อยๆ
}

คำสั่งพื้นฐานที่ควรรู้

1. คำสั่งสำหรับควบคุมขาพอร์ต (Digital I/O)

  • pinMode(pin, mode);

    • ใช้: กำหนดโหมดการทำงานของขาพอร์ต (Pin) ว่าจะเป็นขา Input (รับค่าเข้ามา) หรือ Output (ส่งค่าออกไป)

    • pin: หมายเลขขาพอร์ตของ Arduino (เช่น 2, 3, 13)

    • mode: INPUT, OUTPUT, หรือ INPUT_PULLUP (สำหรับใช้ตัวต้านทาน Pull-up ภายใน)

    • ตัวอย่าง: pinMode(13, OUTPUT); (กำหนดขา 13 ให้เป็นขาเอาต์พุต)

  • digitalWrite(pin, value);

    • ใช้: ส่งค่าสถานะแบบดิจิทัล (เปิด/ปิด, สูง/ต่ำ) ออกไปที่ขาพอร์ตที่กำหนดไว้เป็น OUTPUT

    • pin: หมายเลขขาพอร์ต

    • value: HIGH (เปิด, แรงดันสูง 5V) หรือ LOW (ปิด, แรงดันต่ำ 0V)

    • ตัวอย่าง:  digitalWrite(13, HIGH); (ทำให้ขา 13 มีไฟออก)

  • digitalRead(pin);

    • ใช้: อ่านค่าสถานะแบบดิจิทัลจากขาพอร์ตที่กำหนดไว้เป็น INPUT

    • pin: หมายเลขขาพอร์ต

    • ค่าที่ส่งกลับ: HIGH (ถ้ามีแรงดันสูง) หรือ LOW (ถ้ามีแรงดันต่ำ)

    • ตัวอย่าง: int buttonState = digitalRead(2); (อ่านค่าจากขา 2 แล้วเก็บไว้ในตัวแปร buttonState)

2. คำสั่งสำหรับควบคุมขาพอร์ตแบบ Analog (Analog I/O)

  • analogRead(pin);

    • ใช้: อ่านค่าแรงดันไฟฟ้าแบบอะนาล็อกจากขาพอร์ตอะนาล็อก (ขา A0-A5 บน Arduino Uno) โดยจะแปลงค่าแรงดัน (0-5V) เป็นตัวเลข (0-1023)

    • pin: หมายเลขขาพอร์ตอะนาล็อก (เช่น A0, A1)

    • ค่าที่ส่งกลับ: ตัวเลขจำนวนเต็มระหว่าง 0 ถึง 1023

    • ตัวอย่าง: int sensorValue = analogRead(A0); (อ่านค่าจากขา A0)

  • analogWrite(pin, value);

    • ใช้: ส่งค่าสัญญาณ PWM (Pulse Width Modulation) ออกไปที่ขาพอร์ตดิจิทัลที่รองรับ PWM (มักจะมีสัญลักษณ์ ~ หน้าหมายเลขขา เช่น 3, 5, 6, 9, 10, 11) เพื่อควบคุมความสว่างของ LED หรือความเร็วของมอเตอร์

    • pin: หมายเลขขาพอร์ตดิจิทัลที่รองรับ PWM

    • value: ตัวเลขจำนวนเต็มระหว่าง 0 (ปิดสนิท) ถึง 255 (เปิดเต็มที่)

    • ตัวอย่าง: analogWrite(9, 128); (ทำให้ LED ที่ขา 9 สว่างครึ่งหนึ่ง)

3. คำสั่งสำหรับหน่วงเวลา

  • delay(ms);

    • ใช้: หน่วงเวลาการทำงานของโปรแกรมเป็นมิลลิวินาที (milliseconds)

    • ms: จำนวนมิลลิวินาทีที่ต้องการหน่วง (1000 ms = 1 วินาที)

    • ตัวอย่าง: delay(1000); (หยุดการทำงาน 1 วินาที)

4. คำสั่งสำหรับการสื่อสารแบบอนุกรม (Serial Communication)

  • Serial.begin(baud_rate);

    • ใช้: เริ่มต้นการสื่อสารแบบอนุกรมผ่านพอร์ต USB เพื่อให้ Arduino สามารถส่งข้อมูลไปยังคอมพิวเตอร์ (Serial Monitor) หรือรับข้อมูลจากคอมพิวเตอร์ได้

    • baud_rate: ความเร็วในการสื่อสาร (มักใช้ 9600 หรือ 115200)

    • ตัวอย่าง: Serial.begin(9600); (เริ่มต้นการสื่อสารที่ความเร็ว 9600 บิตต่อวินาที)

  • Serial.print(data); และ Serial.println(data);

    • ใช้: ส่งข้อมูลออกทาง Serial Monitor

    • Serial.print(): ส่งข้อมูลแล้วเคอร์เซอร์จะอยู่บรรทัดเดิม

    • Serial.println(): ส่งข้อมูลแล้วขึ้นบรรทัดใหม่

    • data: ข้อมูลที่ต้องการส่ง (ตัวเลข, ข้อความ, ตัวแปร)

    • ตัวอย่าง: 

      Serial.print("Hello, Arduino!");
      Serial.println(sensorValue);
  • Serial.read();

    • ใช้: อ่านข้อมูลที่ส่งเข้ามาทางพอร์ต Serial

    • ค่าที่ส่งกลับ: ตัวอักษรที่อ่านได้ (เป็นค่า ASCII) หรือ -1 ถ้าไม่มีข้อมูล

    • ตัวอย่าง: char receivedChar = Serial.read();

5. คำสั่งและสัญลักษณ์อื่นๆ ที่สำคัญ

  • //: ใช้สำหรับเขียน Comment หรือข้อความอธิบายในโค้ด ส่วนนี้คอมไพเลอร์จะข้ามไป ไม่ถูกประมวลผล ใช้เพื่อช่วยให้เราและคนอื่นเข้าใจโค้ดได้ง่ายขึ้น

  • /* ... */: ใช้สำหรับเขียน Comment หลายบรรทัด

  • ; (Semicolon): ต้อง ปิดท้ายทุกๆ คำสั่งเสมอ (ยกเว้นพวกวงเล็บปีกกา {} หรือคำสั่งควบคุม if, for, while)

  • {} (Curly Braces): ใช้กำหนดขอบเขตของบล็อกคำสั่ง เช่น ฟังก์ชัน setup() ฟังก์ชัน loop() หรือบล็อก if-else

  • int, float, char, String: เป็นชนิดของ ตัวแปร (Variable) ที่ใช้สำหรับเก็บข้อมูลประเภทต่างๆ

    • int: จำนวนเต็ม (integer)

    • float: จำนวนทศนิยม (floating-point number)

    • char: ตัวอักขระ (character)

    • String: ข้อความ (ชุดของตัวอักขระ)

  • = (Assignment Operator): ใช้ในการกำหนดค่าให้กับตัวแปร เช่น int x = 10;

  • == (Comparison Operator): ใช้ในการเปรียบเทียบว่าสองค่าเท่ากันหรือไม่ เช่น if (x == 10)

  • if / else if / else: คำสั่งเงื่อนไข สำหรับการตัดสินใจ

    if (condition) {
      // ทำงานถ้า condition เป็นจริง
    } else if (anotherCondition) {
      // ทำงานถ้า anotherCondition เป็นจริง
    } else {
      // ทำงานถ้า condition และ anotherCondition เป็นเท็จ
    }
    
  • for / while: คำสั่งวนซ้ำ (Loop)






โพสต์ยอดนิยมจากบล็อกนี้

คลาสต่างๆของวงจรขยายเสียง

การขยายสัญญาณเสียงให้มีความดังมากขึ้น ถือว่าเป็นสิ่งสำคัญในวงขยายเสียง และจะต้องนำไปใช้ในการขยายสัญญาณเสียงจากแหล่งกำเนิดต่างกัน ต้องการความดังสัญญาณต่างกันทำให้การจัดวงจรขยายสัญญาณเสียง หรือจัดคลาสของการขยายต่อกัน เพื่อให้เกิดความเหมาะสมในการนำไปใช้งาน และทำให้สัญญาณเสียงที่ได้ออกมามีความชัดเจนไม่ผิดเพี้ยน หรือมีความดังตามต้องการ การจัดคลาสการขยายจัดได้ตามการกำหนดจุดทำงานของวงจรขยาย แบ่งได้เป็น 4 แบบดังนี้ 1.คลาส-เอ(CLASS A) 2.คลาส-บี(CLASS B) 3.คลาส-เอบี(CLASS AB) 4.คลาส-ซี(CLASS C) การจัดวงจรขยายแต่ละคลาสมีจุดทำงานต่างกัน มีลักษณะการทำงานต่างกัน การใช้งานจะต้องเลือกคลาสการขยายให้เหมาะสมถูกต้อง จึงจะทำให้ขยายสมบูรณ์ และมีประสิทธฺภาพสูง วงจรขยายคลาส-เอ(CLASS-A AMPLIFIER) วงจรขยายคลาส-เอ เป็นวงจรขยายที่มีจุดการทำงานอยู่ในช่วงที่เรียกว่า แอกทีฟ คือ ช่วงการทำงานของทรานซิสเตอร์ที่เป็นลิเนียร์ หรือหากเปรียบเทียบก็เหมือนเครื่องยนต์ที่ทำการเร่งเครื่องพร้อมจะรับงานหนักๆได้อยู่ตลอดเวลา วงจรของขยายคลาสเอ จะมีกระแสสงบไหลตลอดเวลาเพื่อให้จุดของการทำงานมีช่วงสวิงของสัญญาณเอาท์พุตไม่ต่ำ...

ตัวต้านทานปรับค่าได้(Variable Resistor)

ตัวต้านทานปรับค่าได้(Variable Resistor) ตัวต้านทานปรับค่าได้มีหลายแบบด้วยกัน เช่น แบบหมุนแกน แบบปรับแท็ป แบบทริม และรีโอสตัด                                    รูปที่ 1.สัญลักษณ์ตัวต้านทานปรับค่าได้เมื่อเทียบกับของจริง แบบหมุนแกน(Potentiometer) ตัวต้านทานปรับค่าได้หรือที่เราเรียกกันทั่วไปว่าโวลลุ่ม(volume) ที่เรียกเช่นนี้ก็เพราะว่าส่วนใหญ่พบเจอในเครื่องขยายเสียงแล้วเรียกกันจนติดปาก ความจริงมีให้เห็นกันมากมาย ไม่เฉพาะในเครื่องขยายเสียง เครื่องมือวัดก็ใช้กัน โทรทัศน์รุ่นเก่าๆ เครื่องคุมแสง สี เครื่องจ่ายไฟสำหรับห้องทดลอง เป็นต้น                                                 รูปที่...

เฟต(FET)

เฟต(FET) เฟทมาจากคำว่า Field Effect Transistor เป็นอุปกรณ์สารกึ่งตัวนำชนิดหนึ่งคล้ายทรานซิสเตอร์ แต่คุณสมบัติอันพิเศษกว่าทรานซิสเตอร์จึงมีประโยชน์ในด้านการใช้งานนั้นมาก และถูกนำมาใช้งานอย่างกว้างขวาง รูปร่างภายนอกนั้นเหมือนทรานซิสเตอร์ทุกประการ แต่จะแตกต่างกันตรงเบอร์ใช้งานและคุณสมบัติอันพิเศษกว่าทรานซิสเตอร์นั่นเอง                                                                       รูปที่1 ความพิเศษของมันคือ มีค่าอิมพิแดนซ์ทางด้านอินพุตสูงมาก (ทรานซิสเตอร์มีอิมพิแดนซ์ต่ำ) อัตราการทนแรงดันและกระแส สูง และสำหรับเฟทแล้ว การทำงานจะใช้สนามไฟฟ้าควบคุม (ทรานซิสเตอร์ใช้กระแส) เป็นที่มาของคำว่า Field Effect Transistor มีสองแบบด้วยกันคือ แบบพีแชลแน...