សញ្ញាផ្សេងៗដែលអាចបង្កើតបាន |
សញ្ញាជ្រុង (Square wave) គឺងាយស្រួលបង្កើតជាងគេក្នុងចំនោមសញ្ញាទាំងអស់ខាងលើ បើនិយាយពីកូដវីញមានតែ 1 និង 0 ប៉ុណ្ណោះ។ តែអ្វីដែលចំនុចសំខាន់ដើម្បីបង្កើតសញ្ញានេះបានគឺការកំណត់ប្រកង់ឲ្យត្រូវទៅតាមការចង់បាន។ ខាងក្រោមជារូបមន្តប្រកង់មានទំនាក់ទំនងជាមួយរយៈននៃខួបរបស់សញ្ញា៖
រូបបមន្តប្រេកង់ |
យោងទៅតាមរូបមន្តខាងលើ យើងអាចបង្កើត Function មួយសម្រាប់គណនារយៈពេលនៃខួបរបស់សញ្ញាបាន ដោយបញ្ចូលតម្លៃប្រេកង់៖
int TperiodMilliSecond(int freq){
return (1/(float)freq)*1000; // return in millisecond
}
បន្ទាប់ពីទទួលបានរយៈពេលនៃខួបរបស់សញ្ញា ធ្វើការសរសេរកូដបញ្ជារជើង Arduino ឲ្យចេញជាសញ្ញាជ្រុង៖
if(millis() - last_t >= TperiodMilliSecond(f)/2.0){
last_t = millis(); // Reset value
digitalWrite(FREQ_OUT_PIN, !digitalRead(FREQ_OUT_PIN)); // Toggle pin
}
ចែកនឹង 2 ត្រង់ចំនុចនេះដោយសារតែរៀងរាល់ពេលលក្ខខណ្ឌនេះដំណើរការម្តង Toggle ពី LOW ទៅ HIGH ដែលមានន័យថា ២ ដងទើបស្មើនឹង១ខួប។ លទ្ធផលដូចរូបខាងក្រោម៖
សៀគ្វីតេស្ត |
សញ្ញាដែលទទួលបាន |
កូដទាំងអស់
- Button library: https://github.com/etronicskh
#include <button.h>
unsigned long last_t = 0;
int f = 10;
#define FREQ_OUT_PIN 13
button button1(2, HIGH);
void setup() {
// put your setup code here, to run once:
pinMode(2, INPUT_PULLUP);
pinMode(FREQ_OUT_PIN, OUTPUT);
button1.init(); //Initialize button1
}
void loop() {
if(button1.push()){
f += 10;
if(f > 60) f = 10;
}
if(millis() - last_t >= TperiodMilliSecond(f)/2.0){
last_t = millis();
digitalWrite(FREQ_OUT_PIN, !digitalRead(FREQ_OUT_PIN));
}
}
int TperiodMilliSecond(int freq){
return (1/(float)freq)*1000;
}