Mengelompokkan kode ke dalam fungsi memungkinkan programmer untuk membuat potongan kode modular yang melakukan tugas yang ditentukan dan kemudian kembali ke area kode dari mana fungsi itu "dipanggil". Kasus khas untuk membuat fungsi adalah ketika seseorang perlu melakukan tindakan yang sama beberapa kali dalam suatu program.
Untuk programmer yang terbiasa menggunakan BASIC, fungsi di Arduino menyediakan (dan memperluas) utilitas menggunakan subrutin (GOSUB dalam BASIC).
Membakukan fragmen kode ke dalam fungsi memiliki beberapa keunggulan:
- Fungsi membantu programmer tetap teratur. Seringkali ini membantu membuat konsep program.
- Fungsi mengkodifikasikan satu tindakan di satu tempat sehingga fungsi hanya perlu dipikirkan dan didebug sekali.
- Ini juga mengurangi kemungkinan kesalahan dalam modifikasi, jika kode perlu diubah.
- Fungsi membuat keseluruhan sketsa lebih kecil dan lebih kompak karena bagian kode digunakan kembali berkali-kali.
- Mereka membuatnya lebih mudah untuk menggunakan kembali kode dalam program lain dengan membuatnya lebih modular, dan sebagai efek samping yang bagus, menggunakan fungsi juga sering membuat kode lebih mudah dibaca.
Contoh
Untuk "memanggil" fungsi perkalian sederhana kami, kami memberikan parameter tipe data yang diharapkan:
void loop(){
int i = 2;
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k now contains 6
}
int i = 2;
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k now contains 6
}
Fungsi kami harus dideklarasikan di luar fungsi lain, sehingga "myMultiplyFunction ()" dapat berada di atas atau di bawah fungsi "loop ()".
Seluruh sketsa akan terlihat seperti ini:
void setup(){
Serial.begin(9600);
}
void loop() {
int i = 2;
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k now contains 6
Serial.println(k);
delay(500);
}
int myMultiplyFunction(int x, int y){
int result;
result = x * y;
return result;
}
Serial.begin(9600);
}
void loop() {
int i = 2;
int j = 3;
int k;
k = myMultiplyFunction(i, j); // k now contains 6
Serial.println(k);
delay(500);
}
int myMultiplyFunction(int x, int y){
int result;
result = x * y;
return result;
}
Contoh lain
Fungsi ini akan membaca sensor lima kali dengan analogRead () dan menghitung rata-rata lima pembacaan. Kemudian skala data menjadi 8 bit (0-255), dan membalikkannya, mengembalikan hasil yang terbalik.
int ReadSens_and_Condition(){
int i;
int sval = 0;
for (i = 0; i < 5; i++){
sval = sval + analogRead(0); // sensor on analog pin 0
}
sval = sval / 5; // average
sval = sval / 4; // scale to 8 bits (0 - 255)
sval = 255 - sval; // invert output
return sval;
}
int i;
int sval = 0;
for (i = 0; i < 5; i++){
sval = sval + analogRead(0); // sensor on analog pin 0
}
sval = sval / 5; // average
sval = sval / 4; // scale to 8 bits (0 - 255)
sval = 255 - sval; // invert output
return sval;
}
Untuk memanggil fungsi kami, kami hanya menetapkannya ke variabel.
int sens;
sens = ReadSens_and_Condition();
sens = ReadSens_and_Condition();
Seperti yang Anda lihat, bahkan jika suatu fungsi tidak memiliki parameter dan tidak ada pengembalian diharapkan "(" and")" tanda kurung plus ";" harus diberikan.
Functions
- Digital I/O
- Analog I/O
- Zero, Due & MKR Family
- Advanced I/O
- Time
- Math
- Trigonometry
- Characters
- Random Numbers
- Bits and Bytes
- External Interrupts
- Interrupts
- Communication
- USB
Digital I/O
1) digitalRead()
Description (Deskripsi)
Membaca nilai dari pin digital tertentu, baik HIGH atau LOW.
Syntax (Sintaksis)
digitalRead(pin)
Parameters (Parameter)
pin: nomor pin Arduino yang ingin Anda baca
Returns (Kembali)
HIGH or LOW
Kode Contoh
Setel pin 13 ke nilai yang sama dengan pin 7, dideklarasikan sebagai input.
int ledPin = 13; // LED connected to digital pin 13
int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
pinMode(inPin, INPUT); // sets the digital pin 7 as input
}
void loop() {
val = digitalRead(inPin); // read the input pin
digitalWrite(ledPin, val); // sets the LED to the button's value
}
Catatan dan Peringatan
Jika pin tidak terhubung dengan apa pun, digitalRead() dapat mengembalikan salah satu HIGH atau LOW(dan ini dapat berubah secara acak).
Pin input analog dapat digunakan sebagai pin digital, disebut sebagai A0, A1, dll. Pengecualian adalah pin Arduino Nano, Pro Mini, dan A6 dan A7 Mini, yang hanya dapat digunakan sebagai input analog.
2) digitalWrite()
Description (Deskripsi)
Tulis HIGH atau LOW nilai ke pin digital.
Jika pin telah dikonfigurasikan sebagai OUTPUT dengan pinMode(), tegangannya akan diatur ke nilai yang sesuai: 5V (atau 3.3V pada papan 3.3V) untuk HIGH, 0V (arde) untuk LOW.
Jika pin dikonfigurasikan sebagai INPUT, digitalWrite() akan mengaktifkan (HIGH) atau menonaktifkan (LOW) pullup internal pada pin input. Dianjurkan untuk mengatur pinMode() untuk INPUT_PULLUP untuk mengaktifkan internal pull-up resistor. Lihat tutorial Digital Pins untuk informasi lebih lanjut.
Jika Anda tidak mengatur pinMode() ke OUTPUT, dan menghubungkan LED ke pin, saat memanggil digitalWrite(HIGH), LED mungkin tampak redup. Tanpa pengaturan eksplisit pinMode(), digitalWrite() akan mengaktifkan resistor pull-up internal, yang bertindak seperti resistor pembatas arus yang besar.
Syntax (Sintaksis)
digitalWrite(pin, value)
Parameters (Parameter)
pin: nomor pin Arduino.
value: HIGHatau LOW.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode ini membuat pin digital 13 an OUTPUT dan beralih dengan bergantian antara HIGH dan LOW pada satu detik.
void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}
void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}
Catatan dan Peringatan
Pin input analog dapat digunakan sebagai pin digital, disebut sebagai A0, A1, dll. Pengecualian adalah pin Arduino Nano, Pro Mini, dan A6 dan A7 Mini, yang hanya dapat digunakan sebagai input analog.
3) pinMode()
Description (Deskripsi)
Mengkonfigurasi pin yang ditentukan untuk berperilaku sebagai input atau output. Lihat halaman Pin Digital untuk rincian tentang fungsionalitas pin.
Pada Arduino 1.0.1, dimungkinkan untuk mengaktifkan resistor pullup internal dengan mode INPUT_PULLUP. Selain itu, INPUT mode secara eksplisit menonaktifkan pullup internal.
Syntax (Sintaksis)
pinMode(pin, mode)
Parameters (Parameter)
pin: nomor pin Arduino untuk mengatur mode.
mode: INPUT, OUTPUT, Atau INPUT_PULLUP. Lihat halaman Digital Pins untuk deskripsi fungsi yang lebih lengkap.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode membuat digital pin 13 OUTPUT dan Toggles itu HIGH dan LOW
void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}
void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}
Catatan dan Peringatan
Pin input analog dapat digunakan sebagai pin digital, disebut sebagai A0, A1, dll.
Analog I/O
1) analogRead()
Description (Deskripsi)
Membaca nilai dari pin analog yang ditentukan. Papan Arduino berisi konverter multichannel, 10-bit analog ke digital. Ini berarti bahwa ia akan memetakan tegangan input antara 0 dan tegangan operasi (5V atau 3.3V) ke dalam nilai integer antara 0 dan 1023. Pada Arduino UNO, misalnya, ini menghasilkan resolusi antara pembacaan: 5 volt / 1024 unit atau 0,0049 volt (4,9 mV) per unit. Lihat tabel di bawah ini untuk pin yang dapat digunakan, tegangan operasi, dan resolusi maksimum untuk beberapa papan Arduino.
Rentang input dapat diubah menggunakan analogReference () , sementara resolusi dapat diubah (hanya untuk papan Zero, Due, dan MKR) menggunakan analogReadResolution () .
Pada papan berbasis ATmega (UNO, Nano, Mini, Mega), dibutuhkan sekitar 100 mikrodetik (0,0001 detik) untuk membaca input analog, sehingga kecepatan membaca maksimum sekitar 10.000 kali per detik.
NAIK | TEGANGAN OPERASI | PIN YANG DAPAT DIGUNAKAN | RESOLUSI MAKSIMAL |
---|---|---|---|
Uno
|
5 Volts
|
A0 ke A5
|
10 bit
|
Mini, Nano
|
5 Volts
|
A0 hingga A7
|
10 bit
|
Mega, Mega2560, MegaADK
|
5 Volts
|
A0 hingga A14
|
10 bit
|
Micro
|
5 Volts
|
A0 hingga A11 *
|
10 bit
|
Leonardo
|
5 Volts
|
A0 hingga A11 *
|
10 bit
|
Zero
|
3.3 Volts
|
A0 ke A5
|
12 bit **
|
Due
|
3.3 Volts
|
A0 hingga A11
|
12 bit **
|
MKR Family board
|
3.3 Volts
|
A0 hingga A6
|
12 bit **
|
* A0 hingga A5 diberi label pada papan, A6 hingga A11 masing-masing tersedia pada pin 4, 6, 8, 9, 10, dan 12
** analogRead() Resolusi default untuk papan ini adalah 10 bit, untuk kompatibilitas. Anda perlu menggunakan analogReadResolution () untuk mengubahnya menjadi 12 bit.
Syntax (Sintaksis)
analogRead(pin)
Parameters (Parameter)
pin: nama pin input analog untuk dibaca dari (A0 ke A5 pada kebanyakan papan, A0 ke A6 pada papan MKR, A0 ke A7 pada Mini dan Nano, A0 ke A15 pada Mega).
Returns (Kembali)
Pembacaan analog pada pin. Meskipun terbatas pada resolusi konverter analog ke digital (0-1023 untuk 10 bit atau 0-4095 untuk 12 bit). Jenis data: int.
Kode Contoh
Kode membaca tegangan pada analogPin dan menampilkannya.
int analogPin = A3; // potentiometer wiper (middle terminal) connected to analog pin 3
// outside leads to ground and +5V
int val = 0; // variable to store the value read
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}
Catatan dan Peringatan
Jika pin input analog tidak terhubung ke apa pun, nilai yang dikembalikan oleh analogRead() akan berfluktuasi berdasarkan sejumlah faktor (misalnya nilai input analog lainnya, seberapa dekat tangan Anda dengan papan, dll.).
2) analogReference()
Description (Deskripsi)
Mengkonfigurasi tegangan referensi yang digunakan untuk input analog (yaitu nilai yang digunakan sebagai bagian atas rentang input). Opsinya adalah:
Arduino AVR Boards (Uno, Mega, Leonardo, dll.)
- DEFAULT: referensi analog default 5 volt (pada papan Arduino 5V) atau 3,3 volt (pada papan Arduino 3.3V)
- INTERNAL: referensi bawaan, sama dengan 1,1 volt pada ATmega168 atau ATmega328P dan 2,56 volt pada ATmega32U4 dan ATmega8 (tidak tersedia di Arduino Mega)
- INTERNAL1V1: referensi bawaan 1.1V (hanya Arduino Mega)
- INTERNAL2V56: referensi 2.56V bawaan (hanya Arduino Mega)
- EXTERNAL: tegangan diterapkan pada pin AREF (hanya 0 hingga 5V) digunakan sebagai referensi.
Arduino SAMD Boards (Zero, etc.)
- AR_DEFAULT: referensi analog default 3.3V
- AR_INTERNAL: referensi 2.23V bawaan
- AR_INTERNAL1V0: referensi bawaan 1.0V
- AR_INTERNAL1V65: referensi bawaan 1.65V
- AR_INTERNAL2V23: referensi 2.23V bawaan
- AR_EXTERNAL: tegangan yang diterapkan pada pin AREF digunakan sebagai referensi
Arduino megaAVR Board (Uno WiFi Rev2)
- DEFAULT: referensi bawaan 0,55V
- INTERNAL: referensi bawaan 0,55V
- VDD: Vdd dari ATmega4809. 5V pada Uno WiFi Rev2
- INTERNAL0V55: referensi bawaan 0,55V
- INTERNAL1V1: referensi 1.1V bawaan
- INTERNAL1V5: referensi bawaan 1.5V
- INTERNAL2V5: referensi 2.5V bawaan
- INTERNAL4V3: referensi 4.3V bawaan
- EKSTERNAL: tegangan diterapkan pada pin AREF (hanya 0 hingga 5V) digunakan sebagai referensi
Arduino SAM Boards (Due)
- AR_DEFAULT: referensi analog default 3.3V. Ini adalah satu-satunya opsi yang didukung untuk Jatuh Tempo.
Syntax (Sintaksis)
analogReference(type)
Parameters (Parameter)
type: jenis referensi yang digunakan (lihat daftar opsi dalam deskripsi).
Returns (Kembali)
Tidak ada
Catatan dan Peringatan
Setelah mengubah referensi analog, beberapa bacaan pertama dari analogRead() mungkin tidak akurat.
Jangan gunakan apapun yang kurang dari 0V atau lebih dari 5V untuk tegangan referensi eksternal pada pin AREF! Jika Anda menggunakan referensi eksternal pada pin AREF, Anda harus mengatur referensi analog ke EKSTERNAL sebelum menelepon analogRead(). Jika tidak, Anda akan menyingkat tegangan referensi aktif (yang dihasilkan secara internal) dan pin AREF, mungkin merusak mikrokontroler pada papan Arduino Anda.
Atau, Anda dapat menghubungkan tegangan referensi eksternal ke pin AREF melalui resistor 5K, memungkinkan Anda untuk beralih antara tegangan referensi eksternal dan internal. Perhatikan bahwa resistor akan mengubah tegangan yang digunakan sebagai referensi karena ada resistor 32K internal pada pin AREF. Keduanya bertindak sebagai pembagi tegangan, jadi, misalnya, 2.5V yang diterapkan melalui resistor akan menghasilkan 2.5 * 32 / (32 + 5) = ~ 2.2V pada pin AREF.
3) analogWrite()
Description (Deskripsi)
Menulis nilai analog ( gelombang PWM ) ke pin. Dapat digunakan untuk menyalakan LED pada berbagai kecerahan atau menggerakkan motor pada berbagai kecepatan. Setelah panggilan ke analogWrite(), pin akan menghasilkan gelombang persegi panjang yang stabil dari siklus tugas yang ditentukan sampai panggilan berikutnya ke analogWrite() (atau panggilan ke digitalRead() atau digitalWrite()) pada pin yang sama.
Board | PIN PWM | FREKUENSI PWM |
---|---|---|
Uno, Nano, Mini
|
3, 5, 6, 9, 10, 11
|
490 Hz (pin 5 dan 6: 980 Hz)
|
Mega
|
2 - 13, 44 - 46
|
490 Hz (pin 4 dan 13: 980 Hz)
|
Leonardo, Micro, Yún
|
3, 5, 6, 9, 10, 11, 13
|
490 Hz (pin 3 dan 11: 980 Hz)
|
Uno WiFi Rev.2
|
3, 5, 6, 9, 10
|
976 Hz
|
MKR board *
|
0 - 8, 10, A3 (18), A4 (19)
|
732 Hz
|
MKR1000 WiFi *
|
0 - 8, 10, 11, A3 (18), A4 (19)
|
732 Hz
|
Zero *
|
3 - 13, A0 (14), A1 (15)
|
732 Hz
|
Due **
|
2-13
|
1000 Hz
|
101
|
3, 5, 6, 9
|
pin 3 dan 9: 490 Hz, pin 5 dan 6: 980 Hz
|
* Selain kemampuan PWM pada pin yang disebutkan di atas, papan MKR dan Zero memiliki output analog yang benar saat menggunakan analogWrite() pada pin DAC0( A0).
** Selain kemampuan PWM pada pin yang disebutkan di atas, Due memiliki output analog yang benar saat menggunakan analogWrite() pin DAC0 dan DAC1.
Anda tidak perlu menelepon pinMode() untuk mengatur pin sebagai output sebelum memanggil analogWrite(). The analogWrite Fungsi tidak ada hubungannya dengan pin analog atau analogRead fungsi.
Syntax (Sintaksis)
analogWrite(pin, value)
Parameters (Parameter)
pin: pin Arduino untuk menulis. Diizinkan tipe data: int.
value: siklus tugas: antara 0 (selalu mati) dan 255 (selalu aktif). Diizinkan tipe data: int.
Returns (Kembali)
Tidak ada
Kode Contoh
Atur output ke LED sebanding dengan nilai yang dibaca dari potensiometer.
t ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
Catatan dan Peringatan
Output PWM yang dihasilkan pada pin 5 dan 6 akan memiliki siklus tugas yang lebih tinggi dari yang diharapkan. Ini karena interaksi dengan millis() dan delay() fungsi, yang berbagi timer internal yang sama yang digunakan untuk menghasilkan output PWM. Ini akan diperhatikan terutama pada pengaturan siklus kerja rendah (misalnya 0 - 10) dan dapat menghasilkan nilai 0 tidak sepenuhnya mematikan output pada pin 5 dan 6.
Zero, Due & MKR Family
1) analogReadResolution()
Description (Deskripsi)
analogReadResolution () adalah ekstensi dari API Analog untuk Keluarga Arduino Due, Zero, dan MKR.
Menetapkan ukuran (dalam bit) dari nilai yang dikembalikan oleh analogRead(). Ini default ke 10 bit (mengembalikan nilai antara 0-1023) untuk kompatibilitas dengan papan berbasis AVR.
The Karena, Zero dan MKR Keluarga papan memiliki kemampuan ADC 12-bit yang dapat diakses dengan mengubah resolusi ke 12. Ini akan mengembalikan nilai dari analogRead() antara 0 dan 4095.
Syntax (Sintaksis)
analogReadResolution(bits)
Parameters (Parameter)
bits: menentukan resolusi (dalam bit) dari nilai yang dikembalikan oleh analogRead() fungsi. Anda dapat mengatur ini antara 1 dan 32. Anda dapat mengatur resolusi lebih tinggi dari 12 tetapi nilai yang dikembalikan oleh analogRead() akan mengalami perkiraan. Lihat catatan di bawah untuk detailnya.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode menunjukkan bagaimana menggunakan ADC dengan resolusi berbeda.
void setup() {
// open a serial connection
Serial.begin(9600);
}
void loop() {
// read the input on A0 at default resolution (10 bits)
// and send it out the serial connection
analogReadResolution(10);
Serial.print("ADC 10-bit (default) : ");
Serial.print(analogRead(A0));
// change the resolution to 12 bits and read A0
analogReadResolution(12);
Serial.print(", 12-bit : ");
Serial.print(analogRead(A0));
// change the resolution to 16 bits and read A0
analogReadResolution(16);
Serial.print(", 16-bit : ");
Serial.print(analogRead(A0));
// change the resolution to 8 bits and read A0
analogReadResolution(8);
Serial.print(", 8-bit : ");
Serial.println(analogRead(A0));
// a little delay to not hog Serial Monitor
delay(100);
}
Catatan dan Peringatan
Jika Anda menetapkan analogReadResolution() nilai ke nilai yang lebih tinggi dari kemampuan papan Anda, Arduino hanya akan melaporkan kembali pada resolusi tertinggi, melapisi bit tambahan dengan nol.
Sebagai contoh: menggunakan Due dengan analogReadResolution(16) akan memberi Anda angka 16-bit yang diperkirakan dengan 12 bit pertama yang mengandung pembacaan ADC nyata dan 4 bit terakhir diisi dengan nol .
Jika Anda menetapkan analogReadResolution() nilai ke nilai yang lebih rendah dari kemampuan papan Anda, bit ekstra paling signifikan yang dibaca dari ADC akan dibuang .
Menggunakan resolusi 16 bit (atau resolusi apa pun yang lebih tinggi dari kemampuan perangkat keras yang sebenarnya) memungkinkan Anda untuk menulis sketsa yang secara otomatis menangani perangkat dengan ADC resolusi yang lebih tinggi ketika ini tersedia di papan masa depan tanpa mengubah garis kode.
2) analogWriteResolution()
Description (Deskripsi)
analogWriteResolution() adalah perpanjangan dari API Analog untuk Arduino Due.
analogWriteResolution() mengatur resolusi analogWrite() fungsi. Standarnya 8 bit (nilai antara 0-255) untuk kompatibilitas dengan papan berbasis AVR.
The Karena memiliki kemampuan perangkat keras berikut:
- 12 pin yang default ke PWM 8-bit, seperti papan berbasis AVR. Ini dapat diubah ke resolusi 12-bit.
- 2 pin dengan DAC 12-bit (Digital-to-Analog Converter)
Dengan mengatur resolusi tulis ke 12, Anda dapat menggunakan analogWrite() dengan nilai antara 0 dan 4095 untuk mengeksploitasi resolusi DAC penuh atau untuk mengatur sinyal PWM tanpa berguling.
The Zero memiliki kemampuan perangkat keras berikut:
- 10 pin yang default ke PWM 8-bit, seperti papan berbasis AVR. Ini dapat diubah ke resolusi 12-bit.
- 1 pin dengan DAC 10-bit (Digital-to-Analog Converter).
Dengan mengatur resolusi tulis ke 10, Anda dapat menggunakan analogWrite() dengan nilai antara 0 dan 1023 untuk mengeksploitasi resolusi DAC penuh
The MKR Family papan memiliki kemampuan perangkat keras berikut:
- 4 pin yang default ke PWM 8-bit, seperti papan berbasis AVR. Ini dapat diubah dari 8 (standar) ke resolusi 12-bit.
- 1 pin dengan DAC 10-bit (Digital-to-Analog Converter)
Dengan mengatur resolusi tulis ke 12 bit, Anda dapat menggunakan analogWrite() dengan nilai antara 0 dan 4095 untuk sinyal PWM; atur 10 bit pada pin DAC untuk mengeksploitasi resolusi DAC penuh dari nilai 1024.
Syntax (Sintaksis)
analogWriteResolution(bits)
Parameters (Parameter)
bits: menentukan resolusi (dalam bit) dari nilai yang digunakan dalam analogWrite() fungsi. Nilai dapat berkisar dari 1 hingga 32. Jika Anda memilih resolusi lebih tinggi atau lebih rendah dari kemampuan perangkat keras papan Anda, nilai yang digunakan analogWrite() akan terpotong jika terlalu tinggi atau diisi dengan nol jika terlalu rendah. Lihat catatan di bawah untuk detailnya.
Returns (Kembali)
Tidak ada
Kode Contoh
Jelaskan Kode
void setup() {
// open a serial connection
Serial.begin(9600);
// make our digital pin an output
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
// read the input on A0 and map it to a PWM pin
// with an attached LED
int sensorVal = analogRead(A0);
Serial.print("Analog Read) : ");
Serial.print(sensorVal);
// the default PWM resolution
analogWriteResolution(8);
analogWrite(11, map(sensorVal, 0, 1023, 0, 255));
Serial.print(" , 8-bit PWM value : ");
Serial.print(map(sensorVal, 0, 1023, 0, 255));
// change the PWM resolution to 12 bits
// the full 12 bit resolution is only supported
// on the Due
analogWriteResolution(12);
analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
Serial.print(" , 12-bit PWM value : ");
Serial.print(map(sensorVal, 0, 1023, 0, 4095));
// change the PWM resolution to 4 bits
analogWriteResolution(4);
analogWrite(13, map(sensorVal, 0, 1023, 0, 15));
Serial.print(", 4-bit PWM value : ");
Serial.println(map(sensorVal, 0, 1023, 0, 15));
delay(5);
}
Catatan dan Peringatan
Jika Anda menetapkan analogWriteResolution() nilai ke nilai yang lebih tinggi dari kemampuan papan Anda, Arduino akan membuang bit tambahan. Sebagai contoh: menggunakan Due dengan analogWriteResolution(16) pada pin DAC 12-bit, hanya 12 bit pertama dari nilai yang diteruskan analogWrite() akan digunakan dan 4 bit terakhir akan dibuang.
Jika Anda menetapkan analogWriteResolution() nilai ke nilai yang lebih rendah dari kemampuan papan Anda, bit yang hilang akan diisi dengan nol untuk mengisi ukuran perangkat keras yang diperlukan. Sebagai contoh: menggunakan Due with analogWriteResolution (8) pada pin DAC 12-bit, Arduino akan menambahkan 4 nol bit ke nilai 8-bit yang digunakan analogWrite() untuk mendapatkan 12 bit yang diperlukan.
Advanced I/O
1) noTone()
Description (Deskripsi)
Menghentikan generasi gelombang persegi yang dipicu oleh tone(). Tidak berpengaruh jika tidak ada nada yang dihasilkan.
Syntax (Sintaksis)
noTone(pin)
Parameters (Parameter)
pin: pin Arduino untuk berhenti menghasilkan nada
Returns (Kembali)
Tidak ada
Catatan dan Peringatan
Jika Anda ingin memainkan nada berbeda pada beberapa pin, Anda perlu memanggil noTone() satu pin sebelum memanggil tone() pin berikutnya.
2) pulseIn()
Description (Deskripsi)
Membaca pulsa (baik HIGH atau LOW) pada pin. Misalnya, jika value adalah HIGH, pulseIn() menunggu pin untuk pergi dari LOW ke HIGH, mulai waktu, kemudian menunggu pin untuk pergi LOW dan berhenti waktu. Mengembalikan panjang pulsa dalam mikrodetik atau menyerah dan mengembalikan 0 jika tidak ada pulsa lengkap yang diterima dalam batas waktu.
Waktu fungsi ini telah ditentukan secara empiris dan mungkin akan menunjukkan kesalahan dalam pulsa yang lebih panjang. Bekerja pada pulsa dari 10 mikrodetik hingga 3 menit panjangnya.
Syntax (Sintaksis)
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Parameters (Parameter)
pin: jumlah pin Arduino tempat Anda ingin membaca pulsa. Diizinkan tipe data: int.
value: jenis pulsa untuk dibaca: TINGGI atau RENDAH . Diizinkan tipe data: int.
timeout(opsional): jumlah mikrodetik untuk menunggu pulsa dimulai; default adalah satu detik. Diizinkan tipe data: unsigned long.
Returns (Kembali)
Panjang pulsa (dalam mikrodetik) atau 0 jika tidak ada pulsa yang dimulai sebelum batas waktu. Jenis data: unsigned long.
Kode Contoh
Contoh ini mencetak durasi waktu pulsa pada pin 7.
int pin = 7;
unsigned long duration;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
duration = pulseIn(pin, HIGH);
Serial.println(duration);
}
3) pulseInLong()
Description (Deskripsi)
pulseInLong() adalah alternatif untuk pulseIn () yang lebih baik dalam menangani pulsa panjang dan mengganggu skenario yang terkena dampak.
Membaca pulsa (baik HIGH atau LOW) pada pin. Misalnya, jika value adalah HIGH, pulseInLong() menunggu pin untuk pergi dari LOW ke HIGH, mulai waktu, kemudian menunggu pin untuk pergi LOWdan berhenti waktu. Mengembalikan panjang pulsa dalam mikrodetik atau menyerah dan mengembalikan 0 jika tidak ada pulsa lengkap yang diterima dalam batas waktu.
Waktu fungsi ini telah ditentukan secara empiris dan mungkin akan menunjukkan kesalahan dalam pulsa yang lebih pendek. Bekerja pada pulsa dari 10 mikrodetik hingga 3 menit panjangnya. Rutin ini hanya dapat digunakan jika interupsi diaktifkan. Selanjutnya resolusi tertinggi diperoleh dengan interval besar.
Syntax (Sintaksis)
pulseInLong(pin, value)
pulseInLong(pin, value, timeout)
Parameters (Parameter)
pin: jumlah pin Arduino tempat Anda ingin membaca pulsa. Diizinkan tipe data: int.
value: jenis pulsa untuk dibaca: TINGGI atau RENDAH . Diizinkan tipe data: int.
timeout(opsional): jumlah mikrodetik untuk menunggu pulsa dimulai; default adalah satu detik. Diizinkan tipe data: unsigned long.
Returns (Kembali)
Panjang pulsa (dalam mikrodetik) atau 0 jika tidak ada pulsa yang dimulai sebelum batas waktu. Jenis data: unsigned long.
Kode Contoh
Contoh ini mencetak durasi waktu pulsa pada pin 7.
int pin = 7;
unsigned long duration;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
duration = pulseInLong(pin, HIGH);
Serial.println(duration);
}
Catatan dan Peringatan
Fungsi ini bergantung pada micros() sehingga tidak dapat digunakan dalam konteks noInterrupts () .
4) shiftIn()
Description (Deskripsi)
Bergeser dalam satu byte data satu per satu. Mulai dari bit yang paling signifikan (yaitu paling kiri) atau paling sedikit (paling kanan). Untuk setiap bit, pin jam ditarik tinggi, bit berikutnya dibaca dari baris data, dan kemudian pin jam diambil rendah.
Jika Anda berinteraksi dengan perangkat yang clocknya naik, Anda harus memastikan bahwa pin jam rendah sebelum panggilan pertama shiftIn(), misalnya dengan panggilan ke digitalWrite(clockPin, LOW).
Catatan: ini adalah implementasi perangkat lunak; Arduino juga menyediakan pustaka SPI yang menggunakan implementasi perangkat keras, yang lebih cepat tetapi hanya bekerja pada pin tertentu.
Syntax (Sintaksis)
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
Parameters (Parameter)
dataPin: pin tempat input setiap bit. Diizinkan tipe data: int.
clockPin: pin untuk beralih untuk memberi sinyal membaca dari dataPin .
bitOrder: perintah untuk menggeser bit; baik MSBFIRST atau LSBFIRST . (Bit Paling Signifikan Dahulu, atau, Bit Paling Signifikan Dahulu).
Returns (Kembali)
Nilai baca. Jenis data: byte.
5) shiftOut()
Description (Deskripsi)
Mengalihkan satu byte data satu per satu. Mulai dari bit yang paling signifikan (yaitu paling kiri) atau paling sedikit (paling kanan). Setiap bit pada gilirannya dituliskan ke pin data, setelah itu pin jam berdenyut (diambil tinggi, lalu rendah) untuk menunjukkan bahwa bit tersedia.
Catatan - jika Anda berinteraksi dengan perangkat yang clocknya naik, Anda harus memastikan bahwa pin jam rendah sebelum panggilan shiftOut(), misalnya dengan panggilan ke digitalWrite(clockPin, LOW).
Ini adalah implementasi perangkat lunak; lihat juga pustaka SPI , yang menyediakan implementasi perangkat keras yang lebih cepat tetapi hanya bekerja pada pin tertentu.
Syntax (Sintaksis)
shiftOut(dataPin, clockPin, bitOrder, value)
Parameters (Parameter)
dataPin: pin yang digunakan untuk menampilkan setiap bit. Diizinkan tipe data: int.
clockPin: pin untuk beralih setelah dataPin telah diatur ke nilai yang benar. Diizinkan tipe data: int.
bitOrder: perintah untuk menggeser bit; baik MSBFIRST atau LSBFIRST. (Bit Paling Signifikan Dahulu, atau, Bit Paling Signifikan Dahulu).
value: data yang akan dipindahkan. Diizinkan tipe data: byte.
Returns (Kembali)
Tidak ada
Kode Contoh
Untuk sirkuit yang menyertai, lihat tutorial tentang mengendalikan register geser 74HC595 .
//**************************************************************//
// Name : shiftOutCode, Hello World //
// Author : Carlyn Maw,Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//count up routine
for (int j = 0; j < 256; j++) {
//ground latchPin and hold low for as long as you are transmitting
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
Catatan dan Peringatan
DataPin dan clockPin harus sudah dikonfigurasi sebagai output dengan panggilan ke pinMode () .
shiftOut saat ini ditulis untuk menghasilkan 1 byte (8 bit) sehingga membutuhkan operasi dua langkah untuk menghasilkan nilai yang lebih besar dari 255.
// Do this for MSBFIRST serial
int data = 500;
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// shift out lowbyte
shiftOut(dataPin, clock, MSBFIRST, data);
// Or do this for LSBFIRST serial
data = 500;
// shift out lowbyte
shiftOut(dataPin, clock, LSBFIRST, data);
// shift out highbyte
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
6) tone()
Description (Deskripsi)
Menghasilkan gelombang kuadrat dari frekuensi yang ditentukan (dan siklus tugas 50%) pada pin. Durasi dapat ditentukan, jika tidak, gelombang berlanjut hingga panggilan ke noTone () . Pin dapat dihubungkan ke buzzer piezo atau speaker lain untuk memainkan nada.
Hanya satu nada yang dapat dihasilkan sekaligus. Jika nada sudah diputar pada pin yang berbeda, panggilan ke tidak tone() akan berpengaruh. Jika nada diputar pada pin yang sama, panggilan akan mengatur frekuensinya.
Penggunaan tone() fungsi ini akan mengganggu output PWM pada pin 3 dan 11 (pada board selain Mega).
Tidak mungkin menghasilkan nada yang lebih rendah dari 31Hz. Untuk detail teknis, lihat catatan Brett Hagman .
Syntax (Sintaksis)
tone(pin, frequency)
tone(pin, frequency, duration)
Parameters (Parameter)
pin: pin Arduino untuk menghasilkan nada.
frequency: frekuensi nada di hertz. Diizinkan tipe data: unsigned int.
duration: durasi nada dalam milidetik (opsional). Diizinkan tipe data: unsigned long.
Returns (Kembali)
Tidak ada
Catatan dan Peringatan
Jika Anda ingin memainkan nada berbeda pada beberapa pin, Anda perlu memanggil noTone() satu pin sebelum memanggil tone() pin berikutnya.
Time
1) delay()
Description (Deskripsi)
Menjeda program untuk jumlah waktu (dalam milidetik) yang ditentukan sebagai parameter. (Ada 1.000 milidetik dalam satu detik.)
Syntax (Sintaksis)
delay(ms)
Parameters (Parameter)
ms: jumlah milidetik yang akan dijeda. Diizinkan tipe data: unsigned long.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode menjeda program selama satu detik sebelum mengaktifkan pin output.
int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop() {
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
Catatan dan Peringatan
Meskipun mudah untuk membuat LED yang berkedip dengan delay() fungsi dan banyak sketsa menggunakan penundaan singkat untuk tugas-tugas seperti beralih debouncing, penggunaan delay() sketsa memiliki kelemahan yang signifikan. Tidak ada pembacaan lain dari sensor, perhitungan matematis, atau manipulasi pin yang dapat berlangsung selama fungsi penundaan, sehingga efeknya, itu menghentikan sebagian besar aktivitas lainnya. Untuk pendekatan alternatif untuk mengendalikan waktu lihat sketsa Blink Tanpa Tunda , yang berputar, polling fungsi millis () sampai waktu yang cukup telah berlalu. Pemrogram yang lebih berpengetahuan luas biasanya menghindari penggunaan delay()waktu acara yang lebih lama dari 10 detik, kecuali jika sketsa Arduino sangat sederhana.
Hal-hal tertentu berjalan ketika fungsi delay () mengendalikan chip Atmega, namun, karena fungsi delay tidak menonaktifkan interupsi. Komunikasi serial yang muncul di pin RX direkam, nilai PWM ( analogWrite ) dan status pin dipertahankan, dan interupsi akan berfungsi sebagaimana mestinya.
2) delayMicroseconds()
Description (Deskripsi)
Menjeda program untuk jumlah waktu (dalam mikrodetik) yang ditentukan oleh parameter. Ada seribu mikrodetik dalam milidetik dan sejuta mikrodetik dalam satu detik.
Saat ini, nilai terbesar yang akan menghasilkan penundaan akurat adalah 16383. Ini bisa berubah dalam rilis Arduino masa depan. Untuk penundaan lebih lama dari beberapa ribu mikrodetik, Anda harus menggunakannya delay().
Syntax (Sintaksis)
delayMicroseconds(us)
Parameters (Parameter)
us: jumlah mikrodetik yang akan dijeda. Diizinkan tipe data: unsigned int.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode mengkonfigurasi pin nomor 8 agar berfungsi sebagai pin keluaran. Ini mengirimkan kereta pulsa sekitar 100 mikrodetik periode. Perkiraannya adalah karena eksekusi instruksi lain dalam kode.
int outPin = 8; // digital pin 8
void setup() {
pinMode(outPin, OUTPUT); // sets the digital pin as output
}
void loop() {
digitalWrite(outPin, HIGH); // sets the pin on
delayMicroseconds(50); // pauses for 50 microseconds
digitalWrite(outPin, LOW); // sets the pin off
delayMicroseconds(50); // pauses for 50 microseconds
}
Catatan dan Peringatan
Fungsi ini bekerja sangat akurat dalam kisaran 3 mikrodetik ke atas. Kami tidak dapat memastikan bahwa delayMicroseconds akan bekerja dengan tepat untuk waktu tunda yang lebih kecil.
Pada Arduino 0018, delayMicroseconds () tidak lagi menonaktifkan interups
3) micros()
Description (Deskripsi)
Mengembalikan jumlah mikrodetik sejak papan Arduino mulai menjalankan program saat ini. Jumlah ini akan melimpah (kembali ke nol), setelah sekitar 70 menit. Pada papan Arduino 16 MHz (misalnya Duemilanove dan Nano), fungsi ini memiliki resolusi empat mikrodetik (yaitu nilai yang dikembalikan selalu kelipatan empat). Pada papan Arduino 8 MHz (mis. LilyPad), fungsi ini memiliki resolusi delapan mikrodetik.
Syntax (Sintaksis)
time = micros()
Parameters (Parameter)
Tidak ada
Returns (Kembali)
Mengembalikan jumlah mikrodetik sejak papan Arduino mulai menjalankan program saat ini. Jenis data: unsigned long.
Kode Contoh
Kode mengembalikan jumlah mikrodetik sejak papan Arduino dimulai.
unsigned long time;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Time: ");
time = micros();
Serial.println(time); //prints time since program started
delay(1000); // wait a second so as not to send massive amounts of data
}
Catatan dan Peringatan
Ada 1.000 mikrodetik dalam satu milidetik dan 1.000.000 mikrodetik dalam satu detik.
4) millis()
Description (Deskripsi)
Mengembalikan jumlah milidetik yang berlalu sejak dewan Arduino mulai menjalankan program saat ini. Jumlah ini akan melimpah (kembali ke nol), setelah sekitar 50 hari.
Syntax (Sintaksis)
time = millis()
Parameters (Parameter)
Tidak ada
Returns (Kembali)
Jumlah milidetik berlalu sejak program dimulai. Jenis data: unsigned long.
Kode Contoh
Kode contoh ini mencetak pada port serial jumlah milidetik yang dilewati sejak papan Arduino mulai menjalankan kode itu sendiri.
unsigned long time;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Time: ");
time = millis();
Serial.println(time); //prints time since program started
delay(1000); // wait a second so as not to send massive amounts of data
}
Catatan dan Peringatan
Harap dicatat bahwa nilai kembali untuk millis () adalah tipe unsigned long, kesalahan logika dapat terjadi jika seorang programmer mencoba melakukan aritmatika dengan tipe data yang lebih kecil seperti int. Bahkan yang ditandatangani long mungkin mengalami kesalahan karena nilai maksimumnya setengah dari padanannya yang tidak ditandatangani.
Math (matematika)
1) abs()
Description (Deskripsi)
Menghitung nilai absolut suatu angka.
Syntax (Sintaksis)
abs(x)
Parameters (Parameter)
x: nomor
Returns (Kembali)
x: jika x lebih besar dari atau sama dengan 0
-x.: jika x kurang dari 0.
Catatan dan Peringatan
Karena cara fungsi abs () diimplementasikan, hindari menggunakan fungsi lain di dalam tanda kurung, hal itu dapat menyebabkan hasil yang salah.
abs(a++); // avoid this - yields incorrect results
// use this instead:
abs(a);
a++; // keep other math outside the function
2) constrain()
Description (Deskripsi)
Batasi angka agar berada dalam kisaran.
Syntax (Sintaksis)
constrain(x, a, b)
Parameters (Parameter)
x: angka untuk membatasi tipe data yang Diizinkan: semua tipe data.
a: ujung bawah kisaran. Tipe data yang diizinkan: semua tipe data.
b: ujung atas kisaran. Tipe data yang diizinkan: semua tipe data.
Returns (Kembali)
x: jika x adalah antara a dan b.
a: jika x kurang dari a.
b: jika x lebih besar dari b.
Kode Contoh
Kode membatasi nilai sensor antara 10 hingga 150.
sensVal = constrain(sensVal, 10, 150); // limits range of sensor values to between 10 and 150
Catatan dan Peringatan
Karena cara constrain() fungsi diimplementasikan, hindari menggunakan fungsi lain di dalam tanda kurung, ini dapat menyebabkan hasil yang salah.
Kode ini akan menghasilkan hasil yang salah:
int constrainedInput = constrain(Serial.parseInt(), minimumValue, maximumValue); // avoid this
Gunakan ini sebagai gantinya:
int input = Serial.parseInt(); // keep other operations outside the constrain function
int constrainedInput = constrain(input, minimumValue, maximumValue);
3) map()
Description (Deskripsi)
Memetakan kembali suatu nomor dari satu rentang ke yang lain. Artinya, nilai fromLow akan dipetakan ke toLow , nilai fromHigh ke toHigh , nilai di antara nilai-nilai di antara, dll.
Tidak membatasi nilai di dalam rentang, karena nilai di luar kisaran kadang-kadang dimaksudkan dan bermanfaat. The constrain() Fungsi dapat digunakan baik sebelum atau setelah fungsi ini, jika batas-batas rentang yang diinginkan.
Perhatikan bahwa "batas bawah" dari salah satu rentang mungkin lebih besar atau lebih kecil dari "batas atas" sehingga map() fungsi tersebut dapat digunakan untuk membalikkan rentang angka, misalnya
y = map(x, 1, 50, 50, 1);
Fungsi ini juga menangani angka negatif dengan baik, sehingga contoh ini
y = map(x, 1, 50, 50, -100);
juga valid dan berfungsi dengan baik.
The map() penggunaan integer fungsi matematika sehingga tidak akan menghasilkan pecahan, ketika matematika mungkin menunjukkan bahwa itu harus melakukannya. Sisa pecahan dipotong, dan tidak bulat atau rata-rata.
Syntax (Sintaksis)
map(value, fromLow, fromHigh, toLow, toHigh)
Parameters (Parameter)
value: nomor untuk dipetakan.
fromLow: batas bawah dari kisaran nilai saat ini.
fromHigh: batas atas rentang nilai saat ini.
toLow: batas bawah kisaran target nilai.
toHigh: batas atas kisaran target nilai.
Returns (Kembali)
Nilai yang dipetakan.
Kode Contoh
/* Map an analog value to 8 bits (0 to 255) */
void setup() {}
void loop() {
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
Lampiran
Untuk yang cenderung matematis, inilah keseluruhan fungsinya
long map(long x, long in_min, long in_max, long out_min, long out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Catatan dan Peringatan
Seperti disebutkan sebelumnya, fungsi map () menggunakan matematika integer. Jadi pecahan mungkin tertekan karena ini. Misalnya, pecahan seperti 3/2, 4/3, 5/4 semuanya akan dikembalikan sebagai 1 dari fungsi map (), meskipun nilai aktualnya berbeda. Jadi jika proyek Anda membutuhkan perhitungan yang akurat (mis. Voltase akurat hingga 3 tempat desimal), harap pertimbangkan untuk menghindari peta () dan menerapkan perhitungan secara manual dalam kode Anda sendiri.
4) max()
Description (Deskripsi)
Menghitung maksimum dua angka.
Syntax (Sintaksis)
max(x, y)
Parameters (Parameter)
x: angka pertama. Tipe data yang diizinkan: semua tipe data.
y: angka kedua. Tipe data yang diizinkan: semua tipe data.
Returns (Kembali)
Semakin besar dari dua nilai parameter.
Kode Contoh
Kode memastikan bahwa sensVal setidaknya 20.
sensVal = max(sensVal, 20); // assigns sensVal to the larger of sensVal or 20
// (effectively ensuring that it is at least 20)
Catatan dan Peringatan
Mungkin kontra-intuitif, max() sering digunakan untuk membatasi ujung bawah rentang variabel, sementara min() digunakan untuk membatasi ujung atas rentang.
Karena cara max() fungsi diimplementasikan, hindari menggunakan fungsi lain di dalam tanda kurung, ini dapat menyebabkan hasil yang salah
max(a--, 0); // avoid this - yields incorrect results
// use this instead:
max(a, 0);
a--; // keep other math outside the function
5) min()
Description (Deskripsi)
Menghitung minimum dua angka.
Syntax (Sintaksis)
min(x, y)
Parameters (Parameter)
x: angka pertama. Tipe data yang diizinkan: semua tipe data.
y: angka kedua. Tipe data yang diizinkan: semua tipe data.
Returns (Kembali)
Semakin kecil dari dua angka tersebut.
Kode Contoh
Kode memastikan bahwa tidak pernah sampai di atas 100.
sensVal = min(sensVal, 100); // assigns sensVal to the smaller of sensVal or 100
// ensuring that it never gets above 100.
Catatan dan Peringatan
Mungkin kontra-intuitif, max() sering digunakan untuk membatasi ujung bawah rentang variabel, sementara min() digunakan untuk membatasi ujung atas rentang.
Karena cara min() fungsi diimplementasikan, hindari menggunakan fungsi lain di dalam tanda kurung, ini dapat menyebabkan hasil yang salah
6) pow()
Description (Deskripsi)
Menghitung nilai angka yang dinaikkan ke daya. pow()dapat digunakan untuk menaikkan angka ke kekuatan fraksional. Ini berguna untuk menghasilkan pemetaan nilai atau kurva eksponensial.
Syntax (Sintaksis)
pow(base, exponent)
Parameters (Parameter)
base: nomor. Diizinkan tipe data: float.
exponent: kekuatan yang menjadi dasar pangkalan dinaikkan. Diizinkan tipe data: float.
Returns (Kembali)
Hasil dari eksponensial. Jenis data: double.
Kode Contoh
Hitung nilai x yang dinaikkan menjadi kekuatan y:
z = pow(x, y);
Lihat sketsa ( fscale ) untuk contoh penggunaan yang lebih kompleks pow().
7) sq()
Description (Deskripsi)
Menghitung kuadrat angka: angka dikalikan dengan sendirinya.
Syntax (Sintaksis)
sq(x)
Parameters (Parameter)
x: nomor. Tipe data yang diizinkan: semua tipe data.
Returns (Kembali)
Kuadrat dari angka tersebut. Jenis data: double.
Catatan dan Peringatan
Karena cara sq() fungsi diimplementasikan, hindari menggunakan fungsi lain di dalam tanda kurung, ini dapat menyebabkan hasil yang salah.
Kode ini akan menghasilkan hasil yang salah:
int inputSquared = sq(Serial.parseInt()); // avoid this
Gunakan ini sebagai gantinya:
int input = Serial.parseInt(); // keep other operations outside the sq function
int inputSquared = sq(input);
8) sqrt()
Description (Deskripsi)
Menghitung akar kuadrat dari angka.
Syntax (Sintaksis)
sqrt(x)
Parameters (Parameter)
x: nomor. Tipe data yang diizinkan: semua tipe data.
Returns (Kembali)
Akar kuadrat angka itu. Jenis data: double.
Trigonometry
1) cos()
Description (Deskripsi)
Menghitung kosinus sudut (dalam radian). Hasilnya akan antara -1 dan 1.
Syntax (Sintaksis)
cos(rad)
Parameters (Parameter)
rad: Sudut dalam radian. Diizinkan tipe data: float.
Returns (Kembali)
Cos sudut. Jenis data: double.
2) sin()
Description (Deskripsi)
Menghitung sinus sudut (dalam radian). Hasilnya akan antara -1 dan 1.
Syntax (Sintaksis)
sin(rad)
Parameters (Parameter)
rad: Sudut dalam radian. Diizinkan tipe data: float.
Returns (Kembali)
Sinus sudut. Jenis data: double.
3) tan()
Description (Deskripsi)
Menghitung garis singgung sudut (dalam radian). Hasilnya adalah antara infinity negatif dan infinity.
Syntax (Sintaksis)
tan(rad)
Parameters (Parameter)
rad: Sudut dalam radian. Diizinkan tipe data: float.
Returns (Kembali)
Garis singgung sudut. Jenis data: double.
Characters
1) isAlpha()
Description (Deskripsi)
Menganalisis apakah char adalah alpha (itu adalah huruf). Mengembalikan nilai true jika thisChar berisi surat.
Syntax (Sintaksis)
isAlpha(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah alpha.
Kode Contoh
if (isAlpha(myChar)) { // tests if myChar is a letter
Serial.println("The character is a letter");
}
else {
Serial.println("The character is not a letter");
}
2) isAlphaNumeric()
Description (Deskripsi)
Analisis apakah char adalah alfanumerik (yaitu huruf atau angka). Mengembalikan nilai true jika thisChar berisi angka atau huruf.
Syntax (Sintaksis)
isAlphaNumeric(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika iniChar adalah alfanumerik.
Kode Contoh
if (isAlphaNumeric(myChar)) { // tests if myChar isa letter or a number
Serial.println("The character is alphanumeric");
}
else {
Serial.println("The character is not alphanumeric");
}
3) isAscii()
Description (Deskripsi)
Analisis apakah char adalah Ascii. Mengembalikan nilai true jika thisChar berisi karakter Ascii.
Syntax (Sintaksis)
isAscii(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika iniChar adalah Ascii.
Kode Contoh
if (isAscii(myChar)) { // tests if myChar is an Ascii character
Serial.println("The character is Ascii");
}
else {
Serial.println("The character is not Ascii");
}
4) isControl()
Description (Deskripsi)
Analisis apakah char adalah karakter kontrol. Mengembalikan nilai true jika thisChar adalah karakter kontrol.
Syntax (Sintaksis)
isControl(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah karakter kontrol.
Kode Contoh
if (isControl(myChar)) { // tests if myChar is a control character
Serial.println("The character is a control character");
}
else {
Serial.println("The character is not a control character");
}
5) isDigit()
Description (Deskripsi)
Analisis apakah char adalah angka (itu angka). Mengembalikan nilai true jika thisChar adalah angka.
Syntax (Sintaksis)
isDigit(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah angka.
Kode Contoh
if (isDigit(myChar)) { // tests if myChar is a digit
Serial.println("The character is a number");
}
else {
Serial.println("The character is not a number");
}
6) isGraph()
Description (Deskripsi)
Menganalisis jika char dapat dicetak dengan beberapa konten (ruang dapat dicetak tetapi tidak memiliki konten). Mengembalikan nilai true jikaChar ini dapat dicetak.
Syntax (Sintaksis)
isGraph(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar dapat dicetak.
Kode Contoh
if (isGraph(myChar)) { // tests if myChar is a printable character but not a blank space.
Serial.println("The character is printable");
}
else {
Serial.println("The character is not printable");
}
7) isHexadecimalDigit()
Description (Deskripsi)
Analisis jika char adalah digit heksadesimal (AF, 0-9). Mengembalikan nilai true jika thisChar berisi digit heksadesimal.
Syntax (Sintaksis)
isHexadecimalDigit(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah digit heksadesimal.
Kode Contoh
if (isHexadecimalDigit(myChar)) { // tests if myChar is an hexadecimal digit
Serial.println("The character is an hexadecimal digit");
}
else {
Serial.println("The character is not an hexadecimal digit");
}
8) isLowerCase()
Description (Deskripsi)
Analisis apakah char adalah huruf kecil (yaitu huruf dalam huruf kecil). Mengembalikan nilai true jika thisChar berisi huruf dalam huruf kecil.
Syntax (Sintaksis)
isLowerCase(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah huruf kecil.
Kode Contoh
if (isLowerCase(myChar)) { // tests if myChar is a lower case letter
Serial.println("The character is lower case");
}
else {
Serial.println("The character is not lower case");
}
9) isPrintable()
Description (Deskripsi)
Menganalisis apakah char dapat dicetak (itu adalah karakter apa pun yang menghasilkan output, bahkan ruang kosong). Mengembalikan nilai true jikaChar ini dapat dicetak.
Syntax (Sintaksis)
isPrintable(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar dapat dicetak.
Kode Contoh
if (isPrintable(myChar)) { // tests if myChar is printable char
Serial.println("The character is printable");
}
else {
Serial.println("The character is not printable");
}
10) isPunct()
Description (Deskripsi)
Analisis apakah char adalah tanda baca (itu adalah koma, titik koma, tanda seru, dan sebagainya). Mengembalikan nilai true jika thisChar adalah tanda baca.
Syntax (Sintaksis)
isPunct(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah tanda baca.
Kode Contoh
if (isPunct(myChar)) { // tests if myChar is a punctuation character
Serial.println("The character is a punctuation");
}
else {
Serial.println("The character is not a punctuation");
}
11) isSpace()
Description (Deskripsi)
Analisis apakah char adalah karakter white-space. Mengembalikan nilai true jika argumennya adalah spasi, form feed ( '\f'), newline ( '\n'), carriage return ( '\r'), tab horizontal ( '\t'), atau tab vertikal ( '\v').
Syntax (Sintaksis)
isSpace(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah karakter spasi-putih.
Kode Contoh
if (isSpace(myChar)) { // tests if myChar is a white-space character
Serial.println("The character is white-space");
}
else {
Serial.println("The character is not white-space");
}
12) isUpperCase()
Description (Deskripsi)
Analisis apakah char adalah huruf besar (yaitu, huruf dalam huruf besar). Mengembalikan nilai true jika thisChar adalah huruf besar.
Syntax (Sintaksis)
isUpperCase(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah huruf besar.
Kode Contoh
if (isUpperCase(myChar)) { // tests if myChar is an upper case letter
Serial.println("The character is upper case");
}
else {
Serial.println("The character is not upper case");
}
13) isWhitespace()
Description (Deskripsi)
Menganalisis apakah char adalah karakter ruang. Mengembalikan nilai true jika argumennya adalah spasi atau tab horizontal ( '\t').
Syntax (Sintaksis)
isWhitespace(thisChar)
Parameters (Parameter)
thisChar: variabel. Diizinkan tipe data: char.
Returns (Kembali)
true: jika thisChar adalah karakter spasi.
Kode Contoh
if (isWhitespace(myChar)) { // tests if myChar is a space character
Serial.println("The character is a space or tab");
}
else {
Serial.println("The character is not a space or tab");
}
Random Numbers (angka acak)
1) random()
Description (Deskripsi)
Fungsi acak menghasilkan angka pseudo-acak.
Syntax (Sintaksis)
random(max)
random(min, max)
Parameters (Parameter)
min: batas bawah dari nilai acak, inklusif (opsional).
max: batas atas dari nilai acak, eksklusif.
Returns (Kembali)
Angka acak antara min dan maks-1. Jenis data: long.
Kode Contoh
Kode menghasilkan angka acak dan menampilkannya.
long randNumber;
void setup() {
Serial.begin(9600);
// if analog input pin 0 is unconnected, random analog
// noise will cause the call to randomSeed() to generate
// different seed numbers each time the sketch runs.
// randomSeed() will then shuffle the random function.
randomSeed(analogRead(0));
}
void loop() {
// print a random number from 0 to 299
randNumber = random(300);
Serial.println(randNumber);
// print a random number from 10 to 19
randNumber = random(10, 20);
Serial.println(randNumber);
delay(50);
}
Catatan dan Peringatan
Jika urutan urutan nilai yang dihasilkan random() berbeda, pada eksekusi sketsa berikutnya, gunakan randomSeed() untuk menginisialisasi generator angka acak dengan input yang cukup acak, seperti analogRead() pada pin yang tidak tersambung.
Sebaliknya, kadang-kadang berguna untuk menggunakan urutan pseudo-acak yang berulang secara tepat. Ini dapat dilakukan dengan menelepon randomSeed() dengan nomor tetap, sebelum memulai urutan acak.
The max parameter harus dipilih sesuai dengan jenis data variabel yang nilai disimpan. Dalam kasus apa pun, maksimum absolut terikat pada long sifat nilai yang dihasilkan (32 bit - 2.147.483.647). Menetapkan max ke nilai yang lebih tinggi tidak akan menghasilkan kesalahan selama kompilasi, tetapi selama eksekusi sketsa angka yang dihasilkan tidak akan seperti yang diharapkan
2) randomSeed()
Description (Deskripsi)
randomSeed() menginisialisasi pseudo-random number generator, menyebabkannya mulai pada titik acak dalam urutan acaknya. Urutan ini, meskipun sangat panjang, dan acak, selalu sama.
Jika urutan urutan nilai yang dihasilkan random() berbeda, pada eksekusi sketsa berikutnya, gunakan randomSeed () untuk menginisialisasi generator angka acak dengan input yang cukup acak, seperti analogRead() pada pin yang tidak terhubung.
Sebaliknya, kadang-kadang berguna untuk menggunakan urutan pseudo-acak yang berulang secara tepat. Ini dapat dilakukan dengan menelepon randomSeed() dengan nomor tetap, sebelum memulai urutan acak.
Syntax (Sintaksis)
randomSeed(seed)
Parameters (Parameter)
seed: number untuk menginisialisasi urutan pseudo-acak. Diizinkan tipe data: unsigned long.
Returns (Kembali)
Tidak ada
Kode Contoh
Kode menghasilkan nomor pseudo-acak dan mengirimkan nomor yang dihasilkan ke port serial.
long randNumber;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop() {
randNumber = random(300);
Serial.println(randNumber);
delay(50);
}
Bits and Bytes
1) bit()
Description (Deskripsi)
Menghitung nilai bit yang ditentukan (bit 0 adalah 1, bit 1 adalah 2, bit 2 adalah 4, dll.).
Syntax (Sintaksis)
bit(n)
Parameters (Parameter)
n: bit yang nilainya dihitung
Returns (Kembali)
Nilai bit.
2) bitClear()
Description (Deskripsi)
Menghapus (menulis 0 hingga) sedikit variabel numerik.
Syntax (Sintaksis)
bitClear(x, n)
Parameters (Parameter)
x: variabel numerik yang bitnya harus dihapus.
n: bit mana yang akan dihapus, mulai dari 0 untuk bit paling tidak signifikan (paling kanan).
Returns (Kembali)
Tidak ada
3) bitRead()
Description (Deskripsi)
Membaca sedikit angka.
Syntax (Sintaksis)
bitRead(x, n)
Parameters (Parameter)
x: nomor dari mana untuk membaca.
n: bit mana yang harus dibaca, mulai dari 0 untuk bit paling tidak signifikan (paling kanan).
Returns (Kembali)
Nilai bit (0 atau 1).
4) bitSet()
Description (Deskripsi)
Menetapkan (menulis 1 hingga) sedikit variabel numerik.
Syntax (Sintaksis)
bitSet(x, n)
Parameters (Parameter)
x: variabel numerik yang bitnya diatur.
n: bit mana yang akan diatur, mulai dari 0 untuk bit paling tidak signifikan (paling kanan).
Returns (Kembali)
Tidak ada
5) bitWrite()
Description (Deskripsi)
Menulis sedikit variabel numerik.
Syntax (Sintaksis)
bitWrite(x, n, b)
Parameters (Parameter)
x: variabel numerik yang akan ditulis.
n: bit nomor mana yang akan ditulis, mulai dari 0 untuk bit paling tidak signifikan (paling kanan).
b: nilai untuk menulis ke bit (0 atau 1).
Returns (Kembali)
Tidak ada
Kode Contoh
Mendemonstrasikan penggunaan bitWrite dengan mencetak nilai variabel ke Serial Monitor sebelum dan sesudah penggunaan bitWrite().
void setup() {
Serial.begin(9600);
while (!Serial) {} // wait for serial port to connect. Needed for native USB port only
byte x = 0b10000000; // the 0b prefix indicates a binary constant
Serial.println(x, BIN); // 10000000
bitWrite(x, 0, 1); // write 1 to the least significant bit of x
Serial.println(x, BIN); // 10000001
}
void loop() {}
6) highByte()
Description (Deskripsi)
Mengekstrak byte kata tingkat tinggi (paling kiri) (atau byte terendah kedua dari tipe data yang lebih besar).
Syntax (Sintaksis)
highByte(x)
Parameters (Parameter)
x: nilai jenis apa pun
Returns (Kembali)
Jenis data: byte.
7) lowByte()
Description (Deskripsi)
Ekstrak byte urutan rendah (paling kanan) dari suatu variabel (misalnya kata).
Syntax (Sintaksis)
lowByte(x)
Parameters (Parameter)
x: nilai jenis apa pun
Returns (Kembali)
Jenis data: byte.
External Interrupts
1) attachInterrupt()
Description (Deskripsi)
Parameter pertama attachInterrupt() adalah angka interupsi. Biasanya Anda harus menggunakan digitalPinToInterrupt(pin) untuk menerjemahkan pin digital aktual ke nomor interupsi tertentu. Misalnya, jika Anda terhubung ke pin 3, gunakan digitalPinToInterrupt(3) sebagai parameter pertama attachInterrupt().
Board | PIN DIGITAL DAPAT DIGUNAKAN UNTUK INTERUPSI |
---|---|
Uno, Nano, Mini, berbasis 328 lainnya
|
2, 3
|
Uno WiFi Rev.2
|
semua pin digital
|
Mega, Mega2560, MegaADK
|
2, 3, 18, 19, 20, 21
|
Micro, Leonardo, berbasis 32u4 lainnya
|
0, 1, 2, 3, 7
|
Zero
|
semua pin digital, kecuali 4
|
MKR Family Board
|
0, 1, 4, 5, 6, 7, 8, 9, A1, A2
|
Due
|
semua pin digital
|
101
|
semua pin digital (Hanya pin 2, 5, 7, 8, 10, 11, 12, 13 yang bekerja dengan CHANGE )
|
Catatan dan Peringatan
Catatan
Di dalam fungsi terlampir, delay() tidak akan berfungsi dan nilai yang dikembalikan millis() tidak akan bertambah. Data serial yang diterima saat dalam fungsi dapat hilang. Anda harus mendeklarasikan sebagai volatile variabel apa pun yang Anda modifikasi dalam fungsi terlampir. Lihat bagian ISR di bawah ini untuk informasi lebih lanjut.
Menggunakan Interupsi
Interupsi berguna untuk membuat sesuatu terjadi secara otomatis dalam program mikrokontroler dan dapat membantu memecahkan masalah waktu. Tugas yang baik untuk menggunakan interupsi mungkin termasuk membaca encoder putar, atau memonitor input pengguna.
Jika Anda ingin memastikan bahwa suatu program selalu menangkap pulsa dari rotary encoder, sehingga tidak pernah melewatkan pulsa, itu akan membuatnya sangat sulit untuk menulis sebuah program untuk melakukan hal lain, karena program tersebut harus terus-menerus mengumpulkan polling sensor. baris untuk pembuat enkode, untuk menangkap pulsa ketika terjadi. Sensor lain juga memiliki antarmuka dinamis yang mirip, seperti mencoba membaca sensor suara yang mencoba menangkap bunyi klik, atau sensor slot inframerah (penginterupsi foto) yang mencoba menangkap setetes koin. Dalam semua situasi ini, menggunakan interupsi dapat membebaskan mikrokontroler untuk menyelesaikan beberapa pekerjaan sementara tidak melewatkan input.
Tentang Rutinitas Layanan Interupsi
ISR adalah jenis fungsi khusus yang memiliki beberapa batasan unik yang sebagian besar fungsi lainnya tidak miliki. ISR tidak dapat memiliki parameter apa pun, dan mereka tidak boleh mengembalikan apa pun.
Secara umum, ISR harus sesingkat dan secepat mungkin. Jika sketsa Anda menggunakan beberapa ISR, hanya satu yang dapat berjalan pada satu waktu, interupsi lainnya akan dieksekusi setelah yang sekarang selesai dalam urutan yang tergantung pada prioritas yang mereka miliki. millis() mengandalkan interupsi untuk menghitung, sehingga tidak akan bertambah dalam ISR. Karena delay() membutuhkan interupsi untuk bekerja, itu tidak akan berfungsi jika dipanggil di dalam ISR. micros() bekerja pada awalnya tetapi akan mulai berperilaku tidak menentu setelah 1-2 ms. delayMicroseconds() tidak menggunakan penghitung apa pun, jadi itu akan berfungsi seperti biasa.
Biasanya variabel global digunakan untuk meneruskan data antara ISR dan program utama. Untuk memastikan variabel yang dibagikan antara ISR dan program utama diperbarui dengan benar, nyatakan sebagai volatile.
Untuk informasi lebih lanjut tentang interupsi, lihat catatan Nick Gammon .
Syntax (Sintaksis)
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)(disarankan)
attachInterrupt(interrupt, ISR, mode)(tidak disarankan)
attachInterrupt(pin, ISR, mode)(Tidak disarankan. Selain itu, sintaks ini hanya berfungsi pada Arduino SAMD Boards, Uno WiFi Rev2, Due, dan 101.)
Parameters (Parameter)
interrupt: jumlah interupsi. Diizinkan tipe data: int.
pin: nomor pin Arduino.
ISR: ISR untuk memanggil ketika interupsi terjadi; fungsi ini tidak boleh mengambil parameter dan mengembalikan apa pun. Fungsi ini kadang-kadang disebut sebagai rutin layanan interupsi.
mode: mendefinisikan kapan interupsi harus dipicu. Empat konstanta ditentukan sebelumnya sebagai nilai yang valid:
- LOW untuk memicu interupsi setiap kali pin rendah,
- CHANGE untuk memicu interupsi setiap kali pin berubah nilainya
- RISING untuk memicu ketika pin beralih dari rendah ke tinggi,
- FALLING saat pin bergerak dari tinggi ke rendah.
- HIGH untuk memicu interupsi setiap kali pin tinggi.
Returns (Kembali)
Tidak ada
Kode Contoh
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
Angka Interrupt
Biasanya Anda harus menggunakan digitalPinToInterrupt(pin), daripada menempatkan nomor interupsi langsung ke sketsa Anda. Pin khusus dengan interupsi dan pemetaannya ke angka interupsi bervariasi untuk setiap jenis papan. Penggunaan langsung nomor interupsi mungkin tampak sederhana, tetapi dapat menyebabkan masalah kompatibilitas ketika sketsa Anda berjalan di papan yang berbeda.
Namun, sketsa yang lebih lama sering memiliki angka interupsi langsung. Seringkali angka 0 (untuk pin digital 2) atau nomor 1 (untuk pin digital 3) digunakan. Tabel di bawah ini menunjukkan pin interupsi yang tersedia di berbagai papan.
Perhatikan bahwa dalam tabel di bawah ini, angka interupsi merujuk ke nomor yang akan diteruskan attachInterrupt(). Karena alasan historis, penomoran ini tidak selalu berhubungan langsung dengan penomoran interupsi pada chip ATmega (mis. Int.0 terkait dengan INT4 pada chip ATmega2560).
BOARD | INT.0 | INT.1 | INT.2 | INT.3 | INT.4 | INT.5 |
---|---|---|---|---|---|---|
Uno, Ethernet
|
2
|
3
| ||||
Mega2560
|
2
|
3
|
21
|
20
|
19
|
18
|
Berbasis 32u4 (e.g. Leonardo, Micro)
|
3
|
2
|
0
|
1
|
7
|
Untuk Uno WiFiRev.2, Due, Zero, MKR Family dan 101 board interrupt number = pin number .
2) detachInterrupt()
Description (Deskripsi)
Mematikan interupsi yang diberikan.
Syntax (Sintaksis)
detachInterrupt(digitalPinToInterrupt(pin))(disarankan)
detachInterrupt(interrupt)(tidak disarankan)
detachInterrupt(pin)(Tidak disarankan. Selain itu, sintaks ini hanya berfungsi pada Arduino SAMD Boards, Uno WiFi Rev2, Due, dan 101.)
Parameters (Parameter)
interrupt: jumlah interrupt untuk menonaktifkan (lihat attachInterrupt () untuk lebih jelasnya).
pin: nomor pin Arduino dari interrupt untuk menonaktifkan
Returns (Kembali)
Tidak ada
Interrupts
Description (Deskripsi)
Mengaktifkan kembali interupsi (setelah dinonaktifkan oleh nointerupsi () . Interupsi memungkinkan tugas-tugas penting tertentu terjadi di latar belakang dan diaktifkan secara default. Beberapa fungsi tidak akan berfungsi saat interupsi dinonaktifkan, dan komunikasi yang masuk mungkin diabaikan. Interupsi dapat sedikit mengganggu waktu kode, dan dapat dinonaktifkan untuk bagian kode yang sangat penting.
Syntax (Sintaksis)
interrupts()
Parameters (Parameter)
Tidak ada
Returns (Kembali)
Tidak ada
Kode Contoh
Kode memungkinkan Interupsi.
void setup() {}
void loop() {
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
2) noInterrupts()
Description (Deskripsi)
Menonaktifkan interupsi (Anda dapat mengaktifkannya kembali dengan interrupts()). Interupsi memungkinkan tugas-tugas penting tertentu terjadi di latar belakang dan diaktifkan secara default. Beberapa fungsi tidak akan berfungsi saat interupsi dinonaktifkan, dan komunikasi yang masuk mungkin diabaikan. Namun, interupsi dapat sedikit mengganggu waktu kode, dan dapat dinonaktifkan untuk bagian kode yang sangat penting.
Syntax (Sintaksis)
noInterrupts()
Parameters (Parameter)
Tidak ada
Returns (Kembali)
Tidak ada
Kode Contoh
Kode ini menunjukkan cara mengaktifkan interupsi.
void setup() {}
void loop() {
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
Communication (komunikasi)
Description (Deskripsi)
Digunakan untuk komunikasi antara papan Arduino dan komputer atau perangkat lain. Semua papan Arduino memiliki setidaknya satu port serial (juga dikenal sebagai UART atau USART), dan beberapa memiliki beberapa.
bOARD | NAMA CDC USB | PIN SERIA; | PIN SERIAL1 | PIN SERIAL2 | PIN SERIAL3 |
---|---|---|---|---|---|
Uno, Nano, Mini
|
0 (RX), 1 (TX)
| ||||
Mega
|
0 (RX), 1 (TX)
|
19 (RX), 18 (TX)
|
17 (RX), 16 (TX)
|
15 (RX), 14 (TX)
| |
Leonardo, Micro, Yún
|
Serial
|
0 (RX), 1 (TX)
| |||
Uno WiFi Rev.2
|
Terhubung ke USB
|
0 (RX), 1 (TX)
|
Terhubung ke NINA
| ||
Papan MKR
|
Serial
|
13 (RX), 14 (TX)
| |||
Zero
|
SerialUSB (Khusus USB Port)
|
Terhubung ke Port Pemrograman
|
0 (RX), 1 (TX)
| ||
Due
|
SerialUSB (Khusus USB Port)
|
0 (RX), 1 (TX)
|
19 (RX), 18 (TX)
|
17 (RX), 16 (TX)
|
15 (RX), 14 (TX)
|
101
|
Serial
|
0 (RX), 1 (TX)
|
On Uno, Nano, Mini, and Mega, pins 0 and 1 are used for communication with the computer. Connecting anything to these pins can interfere with that communication, including causing failed uploads to the board.
You can use the Arduino environment’s built-in serial monitor to communicate with an Arduino board. Click the serial monitor button in the toolbar and select the same baud rate used in the call to begin().
Serial communication on pins TX/RX uses TTL logic levels (5V or 3.3V depending on the board). Don’t connect these pins directly to an RS232 serial port; they operate at +/- 12V and can damage your Arduino board.
To use these extra serial ports to communicate with your personal computer, you will need an additional USB-to-serial adaptor, as they are not connected to the Mega’s USB-to-serial adaptor. To use them to communicate with an external TTL serial device, connect the TX pin to your device’s RX pin, the RX to your device’s TX pin, and the ground of your Mega to your device’s ground.
Functions
if(Serial)
available()
availableForWrite()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println()
read()
readBytes()
readBytesUntil()
readString()
readStringUntil()
setTimeout()
write()
serialEvent()
2) Stream
Description (Deskripsi)
Stream adalah kelas dasar untuk stream berbasis karakter dan biner. Itu tidak dipanggil secara langsung, tetapi dipanggil setiap kali Anda menggunakan fungsi yang bergantung padanya.
Stream mendefinisikan fungsi membaca di Arduino. Saat menggunakan fungsionalitas inti apa pun yang menggunakan metode read() atau yang serupa, Anda dapat dengan aman menganggapnya memanggil pada kelas Stream. Untuk fungsi seperti print(), Stream mewarisi dari kelas Print.
Beberapa perpustakaan yang mengandalkan Stream meliputi:
Functions
available()
read()
flush()
find()
findUntil()
peek()
readBytes()
readBytesUntil()
readString()
readStringUntil()
parseInt()
parseFloat()
setTimeout()
USB
1) Keyboard
Description (Deskripsi)
Fungsi keyboard memungkinkan papan berbasis mikro 32u4 atau SAMD untuk mengirim penekanan tombol ke komputer yang terpasang melalui port USB asli mikro mereka.
Catatan: Tidak semua karakter ASCII yang mungkin, terutama yang tidak dicetak, dapat dikirim dengan pustaka Keyboard.
Perpustakaan mendukung penggunaan kunci pengubah. Tombol pengubah mengubah perilaku tombol lain saat ditekan secara bersamaan. Lihat di sini untuk informasi tambahan tentang kunci yang didukung dan penggunaannya.
Catatan dan Peringatan
Pustaka inti ini memungkinkan papan berbasis 32u4 dan SAMD (Leonardo, Esplora, Zero, Due, dan MKR Family) muncul sebagai Mouse asli dan / atau Keyboard ke komputer yang terhubung.
Peringatan untuk menggunakan pustaka Mouse dan Keyboard : jika pustaka Mouse atau Keyboard terus berjalan, akan sulit untuk memprogram papan Anda. Fungsi seperti Mouse.move() dan Keyboard.print() akan memindahkan kursor Anda atau mengirim penekanan tombol ke komputer yang terhubung dan hanya akan dipanggil ketika Anda siap untuk menanganinya. Disarankan untuk menggunakan sistem kontrol untuk mengaktifkan fungsi ini, seperti sakelar fisik atau hanya menanggapi input spesifik yang dapat Anda kendalikan. Lihat contoh Mouse dan Keyboard untuk beberapa cara untuk menangani ini.
Saat menggunakan perpustakaan Mouse atau Keyboard, mungkin lebih baik untuk menguji output Anda terlebih dahulu menggunakan Serial.print () . Dengan cara ini, Anda dapat yakin bahwa Anda tahu nilai apa yang dilaporkan.
Fungsi
Keyboard.begin ()
Keyboard.end ()
Keyboard.press ()
Keyboard.print ()
Keyboard.println ()
Keyboard.release ()
Keyboard.releaseAll ()
Keyboard.write ()
2) Mouse
Description (Deskripsi)
Fungsi mouse memungkinkan papan berbasis mikro 32u4 atau SAMD untuk mengontrol pergerakan kursor pada komputer yang terhubung melalui port USB asli mikro mereka. Saat memperbarui posisi kursor, selalu relatif terhadap lokasi kursor sebelumnya.
Catatan dan Peringatan
Pustaka inti ini memungkinkan papan berbasis 32u4 dan SAMD (Leonardo, Esplora, Zero, Due, dan MKR Family) muncul sebagai Mouse asli dan / atau Keyboard ke komputer yang terhubung.
Peringatan untuk menggunakan pustaka Mouse dan Keyboard : jika pustaka Mouse atau Keyboard terus berjalan, akan sulit untuk memprogram papan Anda. Fungsi seperti Mouse.move() dan Keyboard.print() akan memindahkan kursor Anda atau mengirim penekanan tombol ke komputer yang terhubung dan hanya akan dipanggil ketika Anda siap untuk menanganinya. Disarankan untuk menggunakan sistem kontrol untuk mengaktifkan fungsi ini, seperti sakelar fisik atau hanya menanggapi input spesifik yang dapat Anda kendalikan. Lihat contoh Mouse dan Keyboard untuk beberapa cara untuk menangani ini.
Saat menggunakan perpustakaan Mouse atau Keyboard, mungkin lebih baik untuk menguji output Anda terlebih dahulu menggunakan Serial.print () . Dengan cara ini, Anda dapat yakin bahwa Anda tahu nilai apa yang dilaporkan.
Fungsi
Mouse.begin ()
Mouse.click ()
Mouse.end ()
Mouse.move ()
Mouse.press ()
Mouse.release ()
Mouse.isPressed ()
REFERENSI
- [1] https://www.arduino.cc/en/Reference/FunctionDeclaration
- [2] https://www.arduino.cc/en/Guide/HomePage
- [3] https://www.arduino.cc/reference/en/