Seperti judulnya. Apa perbedaan di antara keduanya?
analogWrite (pin, 0-255)
vs digitalWrite (pin, RENDAH-TINGGI)
digitalWrite akan mengatur pin yang ditentukan ke salah satu dari dua status - HIGH/LOW, yang masing-masing setara dengan 5v (3.3v pada beberapa papan) dan ground.
analogWrite dapat bervariasi berdasarkan jenis output yang digunakan.
Jika diterapkan ke pin PWM - ini akan mengatur pin ke sinyal tinggi/rendah secara periodik, di mana persentase sinyal yang dihabiskan tinggi sebanding dengan nilai yang ditulis. sebagai contoh -
analogWrite(PWMpin,255)
Akan menjadi HIGH 100% dari waktu, sementara
analogWrite(PWMpin,127)
Akan menjadi TINGGI 50% dari waktu, dan RENDAH 50% dari waktu
Ketika menerapkan analogWrite ke pin DAC (tersedia pada beberapa board, seperti DUE atau MEGA)
analogWrite sebenarnya akan menyebabkan pin yang ditentukan untuk mengeluarkan level tegangan yang proporsional dengan nilai analog yang ditentukan
Sebagai contoh, pada Due, dengan tegangan maksimal 3.3v dan resolusi analog default 8 bit -[0:255]
analogWrite(DACpin,255)
Akan menyebabkan pin yang ditentukan menjadi output 3.3v, dan-
analogWrite(DACpin,127)
Akan menyebabkan pin yang ditentukan menjadi output 1.35v
digitalWrite
mengatur pin output menjadi RENDAH atau TINGGI (di mana tegangan tersebut tergantung pada Vcc dari prosesor. Untuk Uno atau Mega, itu akan menjadi 0V atau 5V (atau mendekati itu).
Berikut ini adalah tangkapan layar dari digitalWrite (LOW):
Artinya, pin output berada pada 0V.
Sekarang untuk digitalWrite (HIGH):
Tegangan output adalah 5V.
analogWrite
seharusnya dinamai PWMwrite karena ia mengkonfigurasi timer prosesor untuk mengeluarkan PWM (modulasi lebar-pulsa).
Mari kita coba analogWrite(1):
Anda dapat melihat bahwa level voltase adalah 0V hampir sepanjang waktu, dan akan menjadi 5V untuk periode singkat. Anda juga melihat bahwa frekuensinya adalah 490 Hz yang mana halaman referensi untuk analogWrite mengatakan bahwa frekuensi tersebut adalah 490 Hz.
Memperbesar:
Outputnya tinggi selama 8 & # 181; s, yang persis 1/256 dari 2048 & # 181; s yang merupakan periode timer. Jadi, kita memiliki siklus tugas 1/256 (0,39%).
Mari kita coba analogWrite(127) - setengah jalan dari 0 ke 255:
Sekarang Anda dapat melihat bahwa outputnya TINGGI tepat separuh waktu, dan RENDAH di sisa waktu.
Mari kita coba analogWrite(254):
Ini adalah kebalikan dari analogWrite (1). Outputnya TINGGI sepanjang waktu kecuali untuk periode singkat. Memperbesar:
Sekarang outputnya off selama 8 µs - dibandingkan dengan gambar sebelumnya di mana outputnya menyala selama 8 µs.
analogWrite (0)
sama dengan digitalWrite (LOW)
.
analogWrite (255)
sama dengan digitalWrite (HIGH)
.
Hal ini dibuktikan oleh kode yang relevan di wiring_analog.c:
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
analogWrite
pada dasarnya mengkonfigurasi timer perangkat keras untuk menghasilkan PWM. Setelah Anda melakukan itu, perangkat keras pewaktu mengeluarkan siklus tugas yang diminta (dari 0 hingga 255) di mana 0 selalu mati, 255 selalu menyala, dan beberapa nilai di antaranya memberi Anda PWM (output berdenyut).
Untuk informasi lebih lanjut tentang timer lihat halaman saya tentang timer.
digitalWrite menetapkan pin ke nilai tinggi atau rendah yang tetap berada pada nilai tersebut sampai digitalWrite dipanggil lagi untuk pin tersebut.
analogWrite menetapkan pin untuk memiliki nilai osilasi yang memiliki panjang pulsa berdasarkan siklus tugas yang ditentukan sebagai parameter kedua.
Jadi:
digitalWrite (5, HIGH); // Pin 5 goes high
analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.