/*
#define MIC_PIN A0
void setup() {
Serial.begin(115200);
}
void loop() {
int sensorValue = analogRead(MIC_PIN);
Serial.println(sensorValue); // แสดงค่าแรงดันที่อ่านได้
delay(10); // หน่วงนิดหน่อย เพื่อให้อ่านได้ต่อเนื่อง
}
*/
/*
Bas on Tech
This course is part of the courses on https://arduino-tutorials.net
(c) Copyright 2020 - Bas van Dijk / Bas on Tech
This code and course is copyrighted. It is not allowed to use these courses commercially
without explicit written approval
YouTube: https://www.youtube.com/c/BasOnTech
Facebook: https://www.facebook.com/BasOnTechChannel
Instagram: https://www.instagram.com/BasOnTech
Twitter: https://twitter.com/BasOnTech
*/
// https://arduino-tutorials.net/tutorial/drawing-sound-sensor-data-on-serial-plotter
////////////////////////////////////////////////////////////////////
/*
====================================
✅ ภาพรวม
โค้ดนี้เป็นตัวอย่างการอ่านข้อมูลจาก Sound Sensor Module
(เซ็นเซอร์เสียงแบบดิจิทัล ที่มีขา OUT) แล้วส่งค่าผ่าน
Serial Monitor / Serial Plotter ของ Arduino
เพื่อดูกราฟการเปลี่ยนแปลงของเสียงที่ตรวจจับได้
*/
//====================================
// ✅ ส่วนประกาศตัวแปร
const int OUT_PIN = 8; // ขาที่ใช้รับสัญญาณดิจิทัลจาก Sound Sensor
const int SAMPLE_TIME = 10; // เวลาสะสมค่า (หน่วย ms) ที่จะส่งออก 1 ครั้ง
unsigned long millisCurrent; // เวลา ณ ปัจจุบัน (ms)
unsigned long millisLast = 0; // เวลาเดิมที่ส่งข้อมูลล่าสุด
unsigned long millisElapsed = 0; // เวลาที่ผ่านไประหว่างรอบ
int sampleBufferValue = 0; // ตัวเก็บจำนวนครั้งที่เจอสัญญาณ LOW
//====================================
void setup() {
Serial.begin(9600);
//ยังไม่ได้กำหนด pinMode() ให้กับ OUT_PIN → Arduino จะมองว่าขานี้เป็น input โดยอัตโนมัติ
}
//====================================
void loop() {
//-ใช้ millis() เพื่อตรวจจับเวลาผ่านไป (ไม่ใช้ delay)
millisCurrent = millis(); // เวลาปัจจุบัน
millisElapsed = millisCurrent - millisLast; // เวลาที่ผ่านไปตั้งแต่รอบก่อน
//-อ่านค่าจากขาเซ็นเซอร์เสียง (ดิจิทัล)
//-ถ้าเซ็นเซอร์ตรวจพบเสียง (ออก LOW) จะเพิ่มตัวนับ sampleBufferValue
if (digitalRead(OUT_PIN) == LOW) {
sampleBufferValue++;
}
//-ทุก ๆ 10 ms (SAMPLE_TIME) จะพิมพ์จำนวนครั้งที่เจอเสียง
//-ยิ่งมีเสียงดัง/ถี่ → ค่ายิ่งสูง
//-เสียงเบา/เงียบ → ค่าใกล้ 0}
if (millisElapsed > SAMPLE_TIME) {
Serial.println(sampleBufferValue); // ส่งค่าที่นับได้ไปยัง Serial Plotter
sampleBufferValue = 0; // เคลียร์ค่าตัวนับ
millisLast = millisCurrent; // อัปเดตเวลาอ้างอิงรอบนี้
}
}
/*
====================================
✅ การทำงานจริง
-เซ็นเซอร์เสียงจะให้สัญญาณดิจิทัล (HIGH = เงียบ, LOW = มีเสียง)
-โปรแกรมนี้จะ นับจำนวนครั้งที่สัญญาณเป็น LOW ภายในเวลา 10 ms
-แล้วส่งค่าออกทาง Serial Plotter → ทำให้เห็นกราฟแท่ง ๆ ขึ้นลงตามความดังของเสียง
====================================
✅ สรุป
โค้ดนี้คือ Sound Activity Counter ที่ใช้วิธีการนับสัญญาณ LOW
จากโมดูลเสียง แล้วแสดงผลแบบเรียลไทม์บน
Serial Plotter → เหมือน "กราฟระดับเสียงคร่าว ๆ"
====================================
*/