หัวข้อ

ram transistor zener diode กราวนด์ดิจิตอล (Digital Ground) คืออะไร? การคำนวณเลขฐาน การต่อสัญญาณแบบบาลานซ์(Balanced System) การทำงานเครื่องขยายเสียงคลาสดี การนำไมโครคอนโทรลเลอร์ไปใช้งาน การประยุกต์ใช้ ESP32 และ ESP8266: ก้าวสู่โลก IoT การเข้าโหมดเซอร์วิส การเปลี่ยนฐานของระบบเลข การเลือกลำโพง การเลือกแอมป์ให้กับลำโพง การใช้งาน Arduino Uno ร่วมกับ เซอร์โวมอเตอร์ การ์ดแสดงผล กำลังวัตต์กับความดัง คลาสต่างๆ ความเปลี่ยนแปลงของเครื่องเสียงยุคดิจิตอล ค่าความเพี้ยนกับค่าS/N จอมอนิเตอร์ ซีดีทรานสปอร์ต(CD TRANSPORT) ตัวต้านทานปรับค่าได้(Variable Resistor) ตัวต้านทานและการใช้งาน ตัวเก็บประจุ(Capacitor ทรานซิสเตอร์ ทำไม?แรมบางรุ่นถึงแพงกว่าเมนบอร์ด ทิศทางการเติบโตตลาด AMD ในปัจจุบัน ทีวีสี ภาคต่างๆของเครื่องขยายเสียง รหัสไบนารี่(Binary Codes) ระบบควบคุมการชาร์จแบตเตอรี่จากโซลาร์เซลล์ ระบบเลขฐาน ระบบโซลาร์เซลล์ ระบบโซลาร์เซลล์แบบ Off-Grid และ On-Grid อินเวอร์เตอร์ที่ใช้ในระบบโซลาร์เซลล์ อิเล็กทรอนิกส์ อุปกรณ์ระบายความร้อนในคอมพิวเตอร์ อุปกรณ์อิเล็กทรอนิกส์ ฮาร์ดดิสก์ หรือ SSD เขียนโปรแกรม Arduino ด้วยภาษาซี เขียนโปรแกรม Arduino ด้วยภาษาซี 2 เขียนโปรแกรม Arduino ด้วยภาษาซี 3 เขียนโปรแกรม Arduino ด้วยภาษาซี คำสั่งพื้นฐานที่ควรเรียนรู้ เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 5 เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 6 เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 7 เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 8 เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่1 เครื่องขยายเสียงคลาสดี(Class D) เบอร์แทน เพาเวอร์ซัพพลาย เพาเวอร์แบงค์บอกค่าความจุจริงหรือเฟค เมนบอร์ด (Motherboard) แนะนำ CPU และ GPU ราคาประหยัด ใช้งานได้ถึงปี 2030 แนะนำ ซีพียู งาน AI ฝั่ง RED Team แนะนำ ซีพียูสาย AI รุ่นท็อปขายดี แอลอีดี(LED) โครงสร้างไมโครคอนโทรลเลอร์ ตระกูล PIC โปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 4 โวลลุ่มคอนโทรลแบบ AAVA ไดโอด ไมโครคอนโทรลเลอร์ ไมโครคอนโทรลเลอร์ในปี 2025 ไอซี ไอซีตั้งเวลา LM555
แสดงเพิ่มเติม

การใช้งาน Arduino Uno ร่วมกับ เซอร์โวมอเตอร์

 ในการใช้งาน arduino uno ร่วมกับ เซอร์โวมอเตอร์ ตัวอย่างนี้จะใช้เอาท์พุตดิจิตอลธรรมดา แต่สัญญาณ PWM จะสร้างขึ้นจากฟังก์ชั่นที่อ้างอิงจากไฟล์ Servo.h และรูปแบบใช้งานคำสั่งก็คือ Servo myservo;   คือ การประกาศฟังก์ชั่น myservo.attach(9); คือ การกำหนดขาเอาท์พุต myservo.write(pos); คือ เขียนข้อมูลออก ในที่นี้ใช้ตัวแปร pos ในการเก็บค่า ต่อวงจรตามภาพ เขียนโปรแกรมดังนี้ #include <Servo.h> Servo myservo;  // ประกาศใช้งานฟังก์ชั่นเซอร์โว จากไฟล์ servo.h int pos = 0;    // กำหนดตัวแปรเก็บค่าตำแหน่งเซอร์โว void setup() {   myservo.attach(9);  // กำหนดขาใช้งานในบอร์ด คือ ขา9 void loop() {   for (pos = 0; pos <= 180; pos += 1) { // ใส่ค่าตำแหน่งเริ่มจาก 0 ถึง 180 องศา โดยเพิ่มค่าทีละ 1 องศา       myservo.write(pos);              // เขียนคำสั่งจากค่าตัวแปรเก็บตำแหน่ง เพื่อส่งค่าออกเอาท์พุต     delay(15);            ...

เขียนโปรแกรม Arduino ด้วยภาษาซี ตัวอย่างที่ 3

บทความนี้จะพาคุณไปเรียนรู้แนวคิดการเขียนโปรแกรมที่สำคัญสองอย่าง นั่นคือ ฟังก์ชัน (Functions) และ โครงสร้างควบคุมเงื่อนไข (Conditional Statements) ซึ่งจะทำให้โค้ดของคุณเป็นระเบียบ, นำกลับมาใช้ใหม่ได้ง่ายขึ้น และมีความสามารถในการตัดสินใจ โดยที่เรายังคงใช้แค่ บอร์ด Arduino Uno และ ไฟ LED ในตัว (Built-in LED) เพื่อให้เห็นผลลัพธ์ได้ง่ายๆ




ทำไมต้องเรียนรู้ฟังก์ชันและโครงสร้างควบคุมเงื่อนไข?

  • ฟังก์ชัน: เหมือนกับการสร้าง "สูตร" หรือ "ชุดคำสั่ง" ที่สามารถเรียกใช้งานซ้ำๆ ได้ ทำให้โค้ดไม่ซ้ำซ้อน, อ่านง่าย และแก้ไขได้ง่ายขึ้น

  • โครงสร้างควบคุมเงื่อนไข: ช่วยให้โปรแกรมของคุณสามารถ "คิด" หรือ "ตัดสินใจ" ได้ โดยจะทำงานหรือไม่ทำงานบางส่วนของโค้ด ขึ้นอยู่กับเงื่อนไขที่กำหนด

สิ่งที่คุณต้องเตรียม

  1. บอร์ด Arduino Uno

  2. สาย USB (Type A to Type B)

  3. โปรแกรม Arduino IDE


1. ทำความรู้จักกับ 'ฟังก์ชัน' (Functions)

ฟังก์ชันคือกลุ่มของคำสั่งที่ถูกจัดรวมกันเป็นหน่วยเดียว เพื่อทำงานเฉพาะอย่าง เมื่อคุณต้องการให้งานนั้นๆ เกิดขึ้น คุณก็แค่ "เรียก" ชื่อฟังก์ชันนั้นๆ มาใช้งาน ไม่ต้องเขียนโค้ดซ้ำๆ

โครงสร้างของฟังก์ชัน

returnType functionName(parameter1Type parameter1Name, parameter2Type parameter2Name, ...)
 {
  // โค้ดที่จะทำงานเมื่อฟังก์ชันถูกเรียกใช้
  // ...
  return someValue; // (ถ้า returnType ไม่ใช่ void)
}
  • returnType: ชนิดของข้อมูลที่ฟังก์ชันจะส่งกลับมา (เช่น int, float, bool) ถ้าฟังก์ชันไม่ได้ส่งค่าอะไรกลับมาเลย ให้ใช้ void

  • functionName: ชื่อของฟังก์ชันที่คุณตั้งขึ้น ควรเป็นชื่อที่สื่อความหมาย

  • parameterType parameterName: พารามิเตอร์ (หรืออาร์กิวเมนต์) คือข้อมูลที่เราสามารถส่งเข้าไปให้ฟังก์ชันใช้งานได้ (จะไม่มีก็ได้)

ตัวอย่าง: เราจะสร้างฟังก์ชันสำหรับทำให้ไฟ LED กระพริบ ซึ่งจะทำให้โค้ดใน loop() ดูเรียบร้อยขึ้น

// ฟังก์ชันสำหรับทำให้ไฟ LED กระพริบ
// รับค่า 'pin' (หมายเลขขา LED) และ 'blinkDelay' (เวลาหน่วงในการกระพริบ)

void blinkLed(int pin, int blinkDelay) {
  digitalWrite(pin, HIGH);  // เปิดไฟ
  delay(blinkDelay);        // หน่วงเวลา
  digitalWrite(pin, LOW);   // ปิดไฟ
  delay(blinkDelay);        // หน่วงเวลา
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  blinkLed(LED_BUILTIN, 1000); // เรียกใช้ฟังก์ชัน blinkLed ให้ไฟ LED_BUILTIN กระพริบทุก 1 วินาที
  blinkLed(LED_BUILTIN, 200);  // เรียกใช้ฟังก์ชัน blinkLed ให้ไฟ LED_BUILTIN กระพริบทุก 0.2 วินาที (อีกครั้ง)
}

ในตัวอย่างนี้ เราสามารถเรียกใช้ blinkLed() ได้หลายครั้งด้วยค่าที่แตกต่างกัน โดยไม่ต้องเขียนโค้ด digitalWrite() และ delay() ซ้ำๆ


2. ทำความเข้าใจ 'โครงสร้างควบคุมเงื่อนไข' (Conditional Statements)

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

2.1. if Statement

จะทำงานเมื่อเงื่อนไขเป็นจริงเท่านั้น

if (condition) {
  // โค้ดที่จะทำงานถ้า 'condition' เป็นจริง (true)
}
  • condition: นิพจน์ทางตรรกะที่ให้ผลลัพธ์เป็น true หรือ false (เช่น x > 10, sensorValue == 0)

2.2. if...else Statement

จะทำงานโค้ดชุดหนึ่งถ้าเงื่อนไขเป็นจริง และทำงานโค้ดอีกชุดหนึ่งถ้าเงื่อนไขเป็นเท็จ

if (condition) {
  // โค้ดที่จะทำงานถ้า 'condition' เป็นจริง
} else {
  // โค้ดที่จะทำงานถ้า 'condition' เป็นเท็จ
}

2.3. if...else if...else Statement

ใช้เมื่อมีเงื่อนไขหลายข้อ เพื่อเลือกทำโค้ดชุดใดชุดหนึ่ง

if (condition1) {
  // โค้ดที่จะทำงานถ้า 'condition1' เป็นจริง
} else if (condition2) {
  // โค้ดที่จะทำงานถ้า 'condition2' เป็นจริง
} else {
  // โค้ดที่จะทำงานถ้าเงื่อนไขอื่นๆ ทั้งหมดเป็นเท็จ
}

ตัวดำเนินการเปรียบเทียบ (Comparison Operators) ที่ใช้ในเงื่อนไข:

  • == : เท่ากับ (ระวัง! ไม่ใช่ = ซึ่งเป็นการกำหนดค่า)

  • != : ไม่เท่ากับ

  • < : น้อยกว่า

  • > : มากกว่า

  • <= : น้อยกว่าหรือเท่ากับ

  • >= : มากกว่าหรือเท่ากับ


การนำไปใช้จริง: ไฟกระพริบอัจฉริยะ (ด้วยฟังก์ชันและเงื่อนไข)

เราจะเขียนโค้ดที่ทำให้ไฟ LED กระพริบช้า 5 ครั้ง แล้วกระพริบเร็ว 5 ครั้ง สลับกันไปเรื่อยๆ โดยใช้ฟังก์ชันและโครงสร้างควบคุมเงื่อนไข

  1. เปิดโปรแกรม Arduino IDE

  2. คัดลอกโค้ด ด้านล่างนี้ไปวางในหน้าต่าง Arduino IDE:

    /*
     * โปรแกรมไฟกระพริบอัจฉริยะ (Smart Blink)
     * สาธิตการใช้งานฟังก์ชันและโครงสร้างควบคุมเงื่อนไข (if/else)
     * ใช้ไฟ LED ในตัวบอร์ด Arduino Uno (ขา 13)
     */
    
    const int ledPin = LED_BUILTIN; // กำหนดขา LED ที่ต้องการควบคุม (ขา 13)
    
    // ตัวแปรสำหรับนับจำนวนรอบการกระพริบ เพื่อใช้ในการเปลี่ยนโหมด
    int blinkCounter = 0;
    // ตัวแปรสำหรับเก็บสถานะปัจจุบันของการกระพริบ (true = ช้า, false = เร็ว)
    bool isSlowBlinkMode = true;
    
    // --- ฟังก์ชัน: ทำให้ไฟ LED กระพริบตามจำนวนครั้งและหน่วงเวลาที่กำหนด ---
    void blinkLedMultipleTimes(int pin, int blinkDelay, int times) {
      for (int i = 0; i < times; i++) { // วนลูปตามจำนวนครั้งที่กำหนด
        digitalWrite(pin, HIGH);  // เปิดไฟ
        delay(blinkDelay);        // หน่วงเวลา
        digitalWrite(pin, LOW);   // ปิดไฟ
        delay(blinkDelay);        // หน่วงเวลา
      }
    }
    
    void setup() {
      // ตั้งค่าขา LED ให้เป็น OUTPUT
      pinMode(ledPin, OUTPUT);
      // เริ่มต้น Serial Communication เพื่อดูผลลัพธ์ (ไม่บังคับ แต่มีประโยชน์)
      Serial.begin(9600);
      Serial.println("Smart Blink Program Started!");
    }
    
    void loop() {
      // เพิ่มค่าตัวนับทุกครั้งที่ loop ทำงาน
      blinkCounter++;
    
      // ตรวจสอบเงื่อนไขว่าตอนนี้ควรจะกระพริบช้าหรือเร็ว
      if (isSlowBlinkMode == true) { // หรือเขียนย่อๆ ว่า if (isSlowBlinkMode) {
        Serial.println("Blinking SLOW...");
        blinkLedMultipleTimes(ledPin, 500, 5); // กระพริบช้า (500ms) 5 ครั้ง
        digitalWrite(ledPin, LOW); // ตรวจสอบให้แน่ใจว่าไฟดับหลังกระพริบ
        delay(1000);               // เว้นช่วงก่อนเปลี่ยนโหมด
        isSlowBlinkMode = false;   // เปลี่ยนเป็นโหมดกระพริบเร็วในรอบถัดไป
      } else {
        Serial.println("Blinking FAST...");
        blinkLedMultipleTimes(ledPin, 100, 5); // กระพริบเร็ว (100ms) 5 ครั้ง
        digitalWrite(ledPin, LOW); // ตรวจสอบให้แน่ใจว่าไฟดับหลังกระพริบ
        delay(1000);               // เว้นช่วงก่อนเปลี่ยนโหมด
        isSlowBlinkMode = true;    // เปลี่ยนเป็นโหมดกระพริบช้าในรอบถัดไป
      }
    
      // แสดงค่าตัวนับใน Serial Monitor เพื่อให้เห็นว่าโปรแกรมทำงานอยู่
      Serial.print("Total loops: ");
      Serial.println(blinkCounter);
      Serial.println("--------------------");
    }
    
  3. เสียบสาย USB เชื่อมต่อบอร์ด Arduino Uno

  4. ตั้งค่าบอร์ดและพอร์ต ใน Arduino IDE

  5. อัปโหลดโค้ด: คลิกที่ปุ่ม Upload

ผลลัพธ์ที่ได้

คุณจะเห็นไฟ LED "L" บนบอร์ด Arduino Uno:

  • กระพริบช้าๆ (ติด วินาที, ดับ วินาที) เป็นจำนวน ครั้ง

  • จากนั้นจะหยุดนิ่งไป วินาที

  • แล้วเริ่ม กระพริบเร็วๆ (ติด วินาที, ดับ วินาที) เป็นจำนวน ครั้ง

  • จากนั้นจะหยุดนิ่งไป วินาที

  • แล้วกลับไปเริ่มกระพริบช้าๆ ใหม่ เป็นแบบนี้ไปเรื่อยๆ

นอกจากนี้ ถ้าคุณเปิด Serial Monitor (Tools > Serial Monitor) และตั้ง Baud rate เป็น 9600 คุณจะเห็นข้อความที่ Arduino พิมพ์ออกมา บอกสถานะการกระพริบและจำนวนรอบที่ทำงานไปแล้ว

สรุปและก้าวต่อไป

ในบทความนี้ คุณได้เรียนรู้สองแนวคิดพื้นฐานแต่ทรงพลังในการเขียนโปรแกรม:

  • ฟังก์ชัน (void functionName(...) { ... }): ช่วยให้คุณจัดกลุ่มโค้ดและนำกลับมาใช้ใหม่ได้ ทำให้โค้ดเป็นระเบียบและจัดการได้ง่ายขึ้น

  • โครงสร้างควบคุมเงื่อนไข (if, else if, else): ทำให้โปรแกรมของคุณสามารถ "ตัดสินใจ" และเลือกเส้นทางการทำงานตามเงื่อนไขที่กำหนดได้

การผสมผสานฟังก์ชันและโครงสร้างควบคุมเงื่อนไขทำให้คุณสามารถสร้างโปรแกรมที่ซับซ้อนและมีความสามารถมากขึ้นได้ แม้จะยังไม่ต่ออุปกรณ์ภายนอกก็ตาม


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

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

เฟต(FET)

การเปลี่ยนฐานของระบบเลข