Halo semuanya! Ada kesalahpahaman di Internet bahwa untuk mengendalikan komputer menggunakan elektronik buatan sendiri, hanya papan khusus yang diperlukan yang dapat dikenali sebagai perangkat USB HID. Dan mengenai Arduino, semua orang hanya berbicara tentang
Arduino Leanardo . Perpustakaan populer seperti
Keyboard dan
Mouse , yang memungkinkan Anda untuk membuat emulasi mouse atau keyboard menggunakan mikrokontroler, dimaksudkan hanya untuk sepasang Arduino, papan Leonardo, di antara mereka.
Saya akan berbicara tentang cara menghubungkan mikrokontroler Arduino (misalnya, mengambil
Arduino Uno ) dan program Pemrosesannya. Setelah menambahkan segala hal lain tentang pengetahuan Java, yang menjadi dasar pemrosesan, akan mungkin untuk menambahkan proyek di bawah kendali seluruh komputer, dan bukan hanya aplikasi sendiri. Topik mengendalikan program komputer di Jawa bukanlah sesuatu yang rahasia, google dan Anda akan menemukan segalanya, saya jamin.
Unduh Development Environment (IDE)
Ada banyak lingkungan pengembangan terintegrasi untuk pemrograman mikrokontroler di C. murni Dari jumlah tersebut, yang paling nyaman dapat dicatat: Atolika, Eclipse, Keil.
Namun, untuk kesederhanaan dan aksesibilitas panduan ini, saya akan menggunakan editor IDE Arduino dan menulis dalam bahasa Arduino C. Anda dapat mengunduh editor seperti itu dari
situs web resmi Arduino .
Lingkungan pengembangan untuk pemrograman tentang Pengadaan Pekerjaan juga dapat diunduh dari
situs web resmi .
Perlu dicatat, demi kesopanan, bahwa data IDE sangat mirip, karena mereka ditulis pada mesin yang sama. Dan ketika Arduino dibuat, para pendiri berusaha menyederhanakan editor kode mereka sebanyak mungkin, seperti yang dilakukan dalam editor Pemrosesan.
Arduino Kami merakit sirkuit dan menulis kode
Dalam contoh ini, saya akan menggunakan Arduino Uno. Sebuah tombol, potensiometer, dan LED akan terhubung dengannya. Dengan demikian, saya dapat menampilkan logis 0 atau 1. Baca logis 0 atau 1. Dan melakukan
konversi Analog-Digital (ADC atau ADC), mendapatkan angka dari 0 hingga 1023 (dalam Arduino Uno 10-bit ADC) tergantung pada posisi potensiometer. Anda tidak perlu lebih banyak misalnya, karena ini adalah fungsi utama yang dapat dilakukan mikrokontroler.
Diagram pengkabelan:

Dalam diagram, LED anoda terhubung ke 5V melalui resistor pembatas (setidaknya 220 Ohm, lebih disukai 500 Ohm), oleh katoda untuk menyematkan D11. Tombol menutup tanah dan pin D2. Potensiometer mengubah potensial pada pin A1.
Tugas mikrokontroler adalah sebagai berikut: Jika pesan "LED - H" tiba di antarmuka serial (Serial COM port) - hidupkan LED. Jika pesan "LED - L" tiba, matikan LED. Setiap 250ms mengirim pesan ke port serial (dalam hal ini, ke layar komputer) pesan "Pot -" dan nomor yang diterima oleh pembacaan analog pin A1. Ketika sebuah tombol ditekan, kirim pesan "Tombol ditekan!" Sekali.
Berikut adalah saran saya untuk menyelesaikan masalah ini (bukan contoh untuk diikuti):
Firmware untuk Arduino Uno #define pinPot A1 #define pinLed 11 #define pinBtn 2 void setup() { pinMode(pinPot, INPUT); pinMode(pinLed, OUTPUT); pinMode(pinBtn, INPUT_PULLUP); Serial.begin(9600); Serial.println("The program starts.\n\n"); } void loop() { /* INITIAL VARIABLES. Segment 1 */ static char potMes[] = "Pot - "; static char btnMes[] = "Button is pressed!"; static char passLight[] = "Led - "; static int passLength = sizeof(passLight) - 1; static int sizepm = sizeof(potMes) - 1; static int sizebtn = sizeof(btnMes) - 1; static bool flagLedState = LOW; static bool flagBtnPress = false; static long int curTime = 0; static const int period = 200; static bool flagEnableRead = false; /* INITIAL VARIABLES. Segment 1 */ /* FUNCTIONS CALL. Segment 2 */ /* * Led is attached to HIGH voltage from one side * And to pin on the other side * By that the inverting logic */ ReadSerialForLed(passLight, passLength, &flagLedState); digitalWrite(pinLed, !flagLedState); /* * Button pin always is pulled to the HIGH voltage * And only when button is pressed - Voltage on pin goes to GROUND * So it is need to invert logic when read pins */ if(!Bounce(pinBtn) && flagBtnPress == false){ for(int i = 0; i < sizebtn; i++){ Serial.write(btnMes[i]); } Serial.print("\n"); flagBtnPress = true; if(!flagEnableRead){ curTime = millis(); flagEnableRead = true; } }else if(Bounce(pinBtn)){ flagBtnPress = false; } /* * Read and send Info "Pot - " + var Only after first press on button * Every 'period'ms */ if(millis() - curTime > period && flagEnableRead){ SendData(pinPot, potMes, sizepm); curTime = millis(); } /* FUNCTIONS CALL. Segment 2 */ } /* * Pot - pin with potentiometer * pMes - Array with message before Pot value * sp - size of potentiometer message */ void SendData(int Pot, char* pMes, int sp){ static int varP[2]; varP[0] = analogRead(Pot); varP[1] = varP[0]/256; // 0 - 3 (256 - 1024) varP[0] = varP[0]%256; // 0 - 255 //Send Message for(int i = 0; i < sp; i++){ Serial.write(char(pMes[i])); } //Send 2 bits of data //Serial.write(varP[0]); //Serial.write(varP[1]); Serial.print(analogRead(Pot)); Serial.print("\n"); } /* * Function, which is reads button pin with the bounce */ bool Bounce(int btn){ if(digitalRead(btn) == true){ delay(15); if(digitalRead(btn) == true){ return true; }else{ return false; } }else{ return false; } } /* * If Message from Serial port, which you read will be the same to passLight * So look at the next symbol after Pass Message. If it is symbol 'H' - make LED to light * If it is 'L' - make LED off. */ void ReadSerialForLed(char *passLight_f, int passLength_f, bool* flagLedState_f){ static char sym; static int cntPass = 0; static bool readyGetLed = LOW; while (Serial.available() > 0) { sym = Serial.read(); if(sym == passLight_f[cntPass] && !readyGetLed){ cntPass++; }else if (!readyGetLed){ cntPass = 0; }else if(readyGetLed){ if(sym == 'H'){ *flagLedState_f = HIGH; }else if(sym == 'L'){ *flagLedState_f = LOW; } } if(cntPass == passLength_f){ readyGetLed = HIGH; } } }
Komentar: LED terhubung ke catu daya oleh anoda. Ini membalikkan logika status LED dan tidak lagi bermanfaat. Tombol tidak diikat dengan resistor pull-up karena alasan ekonomi, karena Arduino Uno memiliki resistor pull-up built-in yang termasuk dalam sirkuit ketika pin diinisialisasi ke mode INPUT_PULLUP.
Juga di firmware, pesan tentang nilai yang diambil dari potensiometer dikirim hanya setelah penekanan pertama tombol!Untuk mengisi firmware di board, jangan lupa untuk memilih port dan board.

Jika Anda tidak tahu port COM yang Anda miliki untuk papan Arduino, maka pada Windows, buka
Control Panel -> Device Manager dan klik pada tab "COM Ports"

Jika port COM Anda tidak ditandatangani sebagai milik saya, Anda selalu dapat memutuskan koneksi Arduino dan melihat port mana yang hilang. Tetapi jika tidak ada yang menghilang dan Arduin sama sekali tidak dikenali oleh komputer, maka inilah saatnya mencari solusi di Internet. Tetapi mulailah dengan memperbarui driver atau mengganti papan.
Ketika semuanya berhasil, coba buka monitor port dan masukkan "Led-H", "Led-L", tekan tombol, putar potensiometer dan lihat layar untuk melihat apakah semuanya ditampilkan dengan benar.
Sudah cukup bermain - sedikit ubah kodenya.
Ganti baris terakhir dengan kode dari komentar.
Sekarang nilai-nilai dari potensiometer tidak akan terlihat dapat dibaca, tetapi manuver seperti itu diperlukan untuk program Pemrosesan.
Pengolahan Kami sedang menulis sebuah program yang berinteraksi dengan mikrokontroler
Inti dari komunikasi antara program Pemrosesan dan mikrokontroler sangat sederhana. Ada perpustakaan Serial untuk bahasa pemrograman ini, yang memungkinkan Anda menerima pesan yang dikirim sebagai
Serial.write();
, dan juga memungkinkan Anda mengirim pesan sebagai
Serial.print();
. Penting untuk dicatat bahwa dengan pesan seperti itu dikirim, itu akan ditulis ke buffer port, yang berarti akan dibaca oleh mikrokontroler. Jadi kita hanya perlu terhubung ke port Serial yang diinginkan dan menerima / mengirim pesan ke sana.
Program berikut ini akan menghubungkan Serial library dan menulis di konsol editor daftar semua port COM yang dapat Anda sambungkan.
import processing.serial.*; void setup() { String[] port = Serial.list(); for(int i = 0; i < port.length; i++){ print("Port number #" + i + " "); println(Serial.list()[0]); } } void draw() {}
Ketika Anda menulis kode ke editor dan mengklik tombol "Start" (panah 1 pada gambar), jendela aplikasi akan muncul (2) dan daftar port COM akan ditampilkan di konsol (3).

Saya hanya memiliki satu port COM dan dalam sheet, seperti pada array, itu akan berada di nomor 0. Untuk alasan ini, objek dari kelas
Serial port;
:
Serial port;
ketika dibuat, akan ditentukan elemen pertama dari daftar
port = new Serial(this, Serial.list()[0], 9600);
Tuang di Arduin firmware terbaru kami dengan perubahan. Kemudian tulis program ini dan jalankan. Di dalamnya Setiap 500 milidetik pesan dikirim ke port COM untuk mematikan atau menyalakan LED. Dan jika semuanya dilakukan dengan benar, maka setelah memulai aplikasi LED harus berkedip.
import processing.serial.*; Serial port;
Atau di sini adalah contoh lain. LED akan berubah statusnya setelah klik pada jendela aplikasi (yang dimensinya 800x800px) dengan tombol mouse.
import processing.serial.*; Serial port;
Pengolahan Contoh aplikasi kaya fitur
Aplikasi dasar ini mensimulasikan "penerbangan di luar angkasa", jika Anda bisa menyebutnya begitu. Nilai dari potensiometer mengubah kecepatan penerbangan, menekan tombol mengubah arah penerbangan. Dan setiap klik tombol mouse pada jendela aplikasi mengubah status LED (ya, saya tidak menemukan yang lebih orisinal).
Kode saya jauh dari sempurna, jangan menganggapnya sebagai contoh yang baik. Ini hanya contoh yang berhasil. Ini dia.
Contoh program multifungsi import processing.serial.*; Serial port;
Kesimpulan
Saya pikir saya perlu menulis bahwa saya mengambil ide program terakhir dari satu programmer -
Daniel Shiffman , yang
merekam video yang dapat dimengerti bahkan untuk anak-anak tentang pemrograman pada Pemrosesan (
lebih dari 140 tugas visual telah diselesaikan ).
Ketika saya mencoba mencari tahu apa dan bagaimana melakukan pemrosesan dan komunikasi Arduino sendiri, situs-situs ini benar-benar membantu saya:
- developer.alexanderklimov.ru/arduino/processing.php
- arduino-diy.com/arduino-processing-osnovi