Isi kandungan:
- Langkah 1: Menentukan Alamat Daftar
- Langkah 2: Susunan dan Pembolehubah Global
- Langkah 3: Fungsi "serial.begin"
- Langkah 4: Fungsi "serial.available"
- Langkah 5: Fungsi "serial.read"
- Langkah 6: Fungsi "serial.write"
- Langkah 7: Fungsi Persediaan
- Langkah 8: Fungsi Gelung dan ISR
- Langkah 9: Pendawaian
- Langkah 10: Menggabungkan Semuanya
Video: Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan): 10 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Ini bukan sesuatu yang biasa saya buat, saya lebih suka kerja logam saya, tetapi kerana saya pelajar kejuruteraan elektrik dan perlu mengikuti kelas mikrokontroler (Reka Bentuk Sistem Tertanam), saya fikir saya akan membuat pengajaran salah satu projek saya. Semasa saya mula-mula membuat projek dan yang lain untuk kelas ini, saya mendapati bahawa terdapat sangat sedikit atau tidak ada tutorial yang tidak menggunakan fungsi perpustakaan arduino atau fungsi bersiri, yang merupakan sebab lain saya fikir ini akan menjadi petunjuk yang baik.
Kod ini direka untuk mikrokontroler Atmega 2560, jadi jika anda ingin menerapkannya di papan lain, anda perlu mengubah daftar alamat dalam kod berdasarkan manual pengguna pengawal anda. Idea asas di sebalik kod ini adalah bahawa setiap kali anda memasukkan kekunci pada papan kekunci ke monitor bersiri, arduino mega akan mengeluarkan frekuensi tertentu berdasarkan kekunci apa yang anda tekan, dengan "q" menetapkannya semula. Saya membuatnya supaya "a" mengeluarkan frekuensi rata A dan "A" akan mengeluarkan frekuensi tajam A, "b" mengeluarkan B rata, "c" untuk datar C, "C" untuk tajam C, dan seterusnya. Kod penuh dimuat pada akhir, tetapi setiap langkah akan memecah kod tersebut menjadi beberapa bahagian sehingga lebih mudah dijelaskan.
Langkah 1: Menentukan Alamat Daftar
Langkah ini mudah, jika anda menggunakan atmega 2560, anda hanya perlu menggunakan alamat yang saya gunakan, walaupun jika anda menggunakan papan dengan cip yang berbeza, anda perlu mencari alamat untuk setiap daftar ini di manual pengguna kerepek. Definisi di bahagian atas hanyalah pemalar yang akan digunakan untuk fungsi kita di kemudian hari. Kami menetapkan alamat sebagai tidak ditandatangani yang tidak stabil kerana kami tidak mahu penyusunnya mengacaukannya.
Langkah 2: Susunan dan Pembolehubah Global
Di sini kita ingin menentukan array Frekuensi yang akan mengandungi semua frekuensi yang harus dikeluarkan oleh setiap kunci. Nilai-nilai ini dikira dari frekuensi nota sebenar, dan sejujurnya saya lupa bagaimana saya memperolehnya, tetapi nilai-nilai tersebut tepat ketika saya mengujinya pada osiloskop untuk memastikannya. Kami juga menentukan susunan nota yang mengandungi semua kekunci untuk menekan setiap nada, serta pemboleh ubah yang kami perlukan untuk fungsi kami yang kemudian.
Langkah 3: Fungsi "serial.begin"
Kami akan memanggil fungsi khusus kami yang meniru fungsi "serial.begin" U0init (). Ia mengambil baudrate yang diinginkan sebagai input dan memulakan port bersiri pada baudrate tersebut.
Langkah 4: Fungsi "serial.available"
Kami akan memanggil fungsi yang meniru "serial.available" U0kbhit (). Ia tidak memerlukan input tetapi sebaliknya mengesan jika ada perubahan yang dilakukan pada papan kekunci menggunakan bit status RDA dan kembali benar apabila perubahan dikesan.
Langkah 5: Fungsi "serial.read"
Kami akan memanggil fungsi yang meniru fungsi "serial.read" U0getchar (), yang tidak memerlukan input dan output apa pun perubahan yang dibuat pada papan kekunci, yang disimpan dalam daftar UDR0.
Langkah 6: Fungsi "serial.write"
Kami akan memanggil fungsi yang meniru "serial.write" U0putchar (), yang mengambil data dari daftar UDR0 sementara perubahan dikesan dan disimpan, dan output yang berubah kembali ke monitor bersiri.
Langkah 7: Fungsi Persediaan
Ini adalah fungsi persediaan asas yang akan menggunakan tiruan "serial.begin" kami untuk menginisialisasi port bersiri, dan akan menginisialisasi tetapan bit kami untuk daftar pemasa dan menetapkan PB6 untuk mengeluarkan nada kami.
Langkah 8: Fungsi Gelung dan ISR
Gelung berfungsi seperti itu: jika perubahan terdeteksi dengan fungsi "serial.available" kami, fungsi "serial.read" kami menyimpan perubahan itu, dan fungsi "serial.write" kami memasukkan perubahan tersebut ke dalam monitor bersiri. Selagi pemboleh ubah i kurang dari ukuran array frekuensi, ia akan menetapkan output menjadi kedudukan i dalam array itu, mengeluarkan frekuensi pada kedudukan itu. ISR berfungsi sebagai reset, di mana jika kedudukan array frekuensi tidak sama dengan 0 (dengan kata lain jika "q" tidak ditekan), ia akan mengeluarkan frekuensi, tetapi apabila "q" ditekan, ia akan diset semula. Harap perhatikan: kod ini menggunakan gangguan, tetapi ia boleh dilakukan dengan gangguan yang dilumpuhkan. Saya akan menghantar kod tanpa gangguan jika saya mendapat permintaan untuk itu, saya rasa versi gangguan lebih menyeronokkan.
Langkah 9: Pendawaian
Pendawaian untuk kod ini sangat mudah, cukup masukkan wayar keluaran dari PB6 ke papan roti, sambungkan bel atau pembesar suara secara bersiri dengan itu, dan sambungkan kembali ke tanah. Catatan: jika anda menggunakan pembesar suara, letakkan perintang kecil di hadapan pembesar suara. Sekiranya anda hanya mahu melihat output tetapi tidak mendengarnya, sambungkan PB6 ke plumbum osiloskop merah dan plumbum hitam ke tanah.
Langkah 10: Menggabungkan Semuanya
Saya menambahkan kod penuh pada langkah ini, kerana saya telah menjelaskan semua bahagiannya pada langkah sebelumnya. Ia hanya memerlukan input keyboard untuk frekuensi dan output yang berlainan sehingga frekuensi PB6. Harap anda menikmati membaca cara yang berbeza untuk membuat kod dengan IDE!
Juga, sila pilih ini dalam peraduan Mikrokontroler: D
Disyorkan:
Memprogram Arduino Menggunakan Arduino Lain untuk Memaparkan Teks Menatal Tanpa Perpustakaan: 5 Langkah
Memprogram Arduino Menggunakan Arduino Lain untuk Memaparkan Teks Menggulir Tanpa Perpustakaan: Sony Spresense atau Arduino Uno tidak begitu mahal dan tidak memerlukan banyak tenaga. Walau bagaimanapun, jika projek anda mempunyai had kuasa, ruang, atau anggaran, anda mungkin ingin mempertimbangkan untuk menggunakan Arduino Pro Mini. Tidak seperti Arduino Pro Micro, Arduino Pro Mi
HC - 06 (Slave Module) Mengubah "NAMA" Tanpa Digunakan "Monitor Serial Arduino" yang "Berfungsi dengan Mudah": Cara Tanpa Sesar !: 3 Langkah
HC - 06 (Slave Module) Menukar "NAMA" Tanpa Digunakan "Monitor Serial Arduino" … yang "Berfungsi dengan Mudah": Cara Tanpa Sesar !: Selepas " Masa Lama " mencuba Menukar Nama ke HC - 06 (hamba Modul), menggunakan " monitor bersiri Arduino, tanpa " Kejayaan ", saya menjumpai cara lain yang mudah dan saya Berkongsi sekarang! Selamat Bersenang-senang
Self Excite Alternator Tanpa Generator DC, Kapasitor Bank atau Bateri: 5 Langkah (dengan Gambar)
Self Excite Alternator Tanpa Generator DC, Bank Kapasitor atau Bateri: Hai! Arahan ini adalah untuk menukar alternator yang bersemangat di lapangan menjadi yang bersemangat sendiri. Kelebihan helah ini ialah anda tidak perlu mengaktifkan bidang ini alternator dengan bateri 12 volt tetapi ia akan mengaktifkannya sendiri sehingga anda
Cara Mendengar Perpustakaan Itunes Anda Melalui Penerima Tv atau Av Anda: 5 Langkah
Cara Mendengarkan Perpustakaan Itunes Anda Melalui Penerima Tv atau Av Anda: Baiklah, saya membuat arahan ini dalam 10 minit. Semudah itu! Komputer riba akan bagus untuk ini tetapi desktop yang berdekatan dengan tv juga tidak mengapa. Sekiranya anda mempunyai Airport Express maka saya akan menambah langkah untuk anda semua. (Catatan: Saya tidak memiliki ekspres lapangan terbang jadi jika saya
Penyejuk / Dudukan Laptop Kos Sifar (Tanpa Lem, Tanpa Penggerudian, Tanpa Mur & Baut, Tanpa Skru): 3 Langkah
Penyejuk / Dudukan Laptop Kos Sifar (Tanpa Lem, Tanpa Penggerudian, Tanpa Mur & Baut, Tanpa Skru): KEMASKINI: SILA KINDLY VOTE FOR MY INSTRUCTABLE, TERIMA KASIH ^ _ ^ ANDA JUGA MUNGKIN MENGUNDI LAIN MASUK DI www.instructables.com/id/Zero-Cost-Aluminium-Furnace-No-Propane-No-Glue-/ ATAU MUNGKIN MEMBERIKAN suara untuk rakan baik saya