Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Antarmuka Baris Perintah Sederhana

Komponen dan persediaan

Arduino UNO
× 1

Tentang proyek ini

Baris Perintah

Ada saatnya ketika Anda perlu menemukan nilai sensor atau Anda ingin memberi tahu robot Anda untuk melakukan sesuatu seperti "bergerak ke kiri". Mungkin Anda perlu menanyakan nilai runtime variabel pada program Anda, atau Anda perlu menyetel nilai potensiometer digital.

Yang Anda butuhkan adalah baris perintah. Ya, mudah untuk membuat Arduino Anda merespons perintah teks.

Inilah salah satu yang dapat Anda bangun. Ini adalah Antarmuka Baris Perintah yang sederhana, cepat, dan sangat hemat memori (CLI) yang dapat Anda potong dan tempel dalam beberapa menit ke dalam kode Anda sendiri dan siap digunakan. Perintah terdiri dari nama yang diikuti oleh beberapa argumen. Bahkan mendukung backspace saat Anda mengetik perintah.  

Ikhtisar Cepat

Setiap sketsa memiliki loop() fungsi. Anda bisa sesederhana yang di bawah ini. Ini memanggil dua rutinitas di tab terpisah bernama CommandLine.h . Saya akan memandu Anda melalui dua file ini dan Anda akan siap dan berjalan.

Putaran

Apa yang dilakukannya:  Setiap kali loop() menjalankannya untuk memeriksa apakah kita memiliki perintah dari port serial, memanggil getCommandLineFromSerialPort() . Variabel CommandLine dideklarasikan di CommandLine.h tetapi secara gaya Anda mungkin ingin memindahkannya ke tab Loop utama. Ketika perintah lengkap telah tiba ke port Serial dan telah disalin ke buffer perintah:

        char   commandLine[COMMAND_BUFFER_LENGTH + 1]; 

Kemudian loop() memanggil DoMyCommand() untuk menjalankan perintah yang tepat.

Sekarang mari kita lihat apa yang ada di CommandLine.h . Saya harus menunjukkan bahwa saya memasukkan semua kode ke CommandLine.h , karena selanjutnya yang harus Anda lakukan adalah memotong dan menempelkan kode ini ke tab baru di Arduino IDE Anda (pastikan untuk memberi nama tab yang diakhiri dengan ".h "). Kemudian sertakan file ini di file utama Anda, yaitu

 #include "CommandLine.h" 

Apa yang dilakukan adalah memungkinkan Anda untuk meletakkan semua kode baris perintah dalam satu tab dan merujuk ke rutinitasnya di tempat lain dalam program Anda tanpa kode tambahan.

Mencari di CommandLine.h

File CommandLine.h disertakan di akhir posting ini. Dalam CommandLine.h , setiap baris yang perlu Anda ubah ditandai dengan komentar, //Modify here . File menyertakan dua contoh perintah add dan sub dan menunjukkan bagaimana mereka dipanggil dari dalam DoMyCommand .

Bagi banyak dari Anda, hanya itu yang Anda perlukan. Cukup buka CommandLine.h . Bagi mereka yang ingin melihat lebih detail, teruskan membaca.

Melihat Lebih Dalam

Dalam CommandLine.h pertama kita sertakan . String.h adalah pustaka standar C . Jika Anda belum pernah menemukan pustaka C sebelumnya, lakukan Pencarian Internet cepat untuk "Bahasa Pemrograman C". Alkitab C ditulis bertahun-tahun yang lalu oleh Brian Kernigan dan Dennis Ritchie dan terus diperbarui. Kebanyakan orang memiliki salinannya tetapi Anda dapat menemukannya secara online secara gratis.

Kami hanya akan menggunakan strtok() rutin (string ke token) dari . Rutin ini membaca token, yaitu kata yang dibatasi oleh karakter tertentu (parameter kedua strtok ). Cara kerjanya seperti ini.

  • Saat pertama kali memanggilnya, Anda memberikan string ptr dan itu akan mengembalikan token pertama
  • Pada panggilan berikutnya, (ini dia bagian peretasan yang hebat) berikan NULL alih-alih string ptr dan itu akan melanjutkan di mana ia tinggalkan dengan string awal, sehingga mendapatkan satu token (kira-kira satu kata) pada satu waktu.

Kami juga menyertakan dari mana kita hanya menggunakan atoi() untuk konversi ascii-ke-integer. Jangan khawatir, kompiler hanya akan menyertakan satu rutin ini, bukan seluruh pustaka, tetapi Anda mungkin ingin memeriksa rutin lain di pustaka ini karena bermanfaat.

Berikutnya adalah makro kecil opsional yang saya tulis bernama print2:

#define print2(x,y) (Serial.print(x), Serial.println(y) 

Saya selalu ingin mencetak label dan string. Anda menggunakannya seperti ini:

print2("myVar =", myVar); 

Jika myVar adalah 25 maka ini akan mencetak ke jendela serial:

myVar =25 

CommandLine.h berisi getCommandLineFromSerialPort() yang merakit baris perintah dari port serial. Setiap kali dipanggil, ia membaca dari port Serial dan menyimpan input ke buffer input global, CommandLine[] . Saat mencapai return karakter yang menandakan akhir dari perintah yang mengembalikan true .

Buffer yang telah dirakit sepenuhnya sekarang diteruskan ke DoMyCommand() yang mengetahui fungsi mana yang diminta pengguna dan memanggilnya. Dengan sejumlah besar perintah, Anda bisa mendapatkan pernyataan if-the-else yang cukup berat.

Jika Anda memiliki jumlah perintah yang sangat banyak, ada banyak cara untuk mempercepatnya seperti mengadopsi apa yang disebut fungsi hashing. Atau Anda dapat membuat perintah hanya satu karakter dan kemudian menggunakan satu karakter itu sebagai label dari pernyataan kasus sakelar. Saya menemukan tak satu pun dari ini diperlukan sangat sering. Sebuah kata jauh lebih mudah diingat daripada satu karakter dan mengingat ini adalah Arduino, berapa banyak perintah yang benar-benar dapat Anda miliki sebelum Anda kehabisan ruang pada chip?

Tambahkan dan Sub

Setiap fungsi perintah bertanggung jawab untuk menguraikan argumennya sendiri. Ini adalah cara sederhana untuk melakukannya dan cukup mudah untuk dimodifikasi. Alternatif untuk ini adalah membaca semua argumen segera di DoMyCommand . Anda dapat memasukkan argumen individual ke dalam array global string argv[] .

Untuk keperluan contoh ini saya telah mendefinisikan dua perintah:add dan sub . Keduanya menggunakan argumen numerik tetapi saya telah menyertakan readWord (yang bisa disebut readStringToken ) untuk mengembalikan sebuah kata. Anda juga dapat memodifikasi readStringToken . ini untuk mengizinkan string seperti "ini adalah string ". Anggap saja ini sebagai latihan yang diserahkan kepada pembaca.

Cara tercepat untuk berlari

Jika Anda memiliki file loop utama seperti yang ditunjukkan di atas, buat tab baru menggunakan segitiga yang mengarah ke bawah di sebelah kanan jendela Arduino IDE Anda, dan salin CommandLine.h (di bawah) file ke dalamnya, Anda harus dapat mengetik add dan sub perintah.

Sekarang terserah Anda!

Kode

  • Penerjemah Baris Perintah Sederhana untuk Arduino
Penerjemah Baris Perintah Sederhana untuk ArduinoC/C++
Lihat komentar di artikel ini atau di kode untuk menambahkan baris perintah sederhana ke sketsa Arduino Anda.

Anda dapat menambahkan perintah seperti ini:
tambahkan 5, 10
kurangi 10, 5

Atau apa pun yang Anda butuhkan
/*************************************** ************************************ Cara Menggunakan CommandLine:Buat sketsa. Lihat di bawah untuk contoh pengaturan dan kode loop utama dan salin dan tempel ke dalam sketsa baru. Buat tab baru. (Gunakan menu tarik-turun (segitiga kecil) di ujung kanan Editor Arduino. Beri nama tab CommandLine.h Tempelkan file ini ke dalamnya. Tes:Unduh sketsa yang baru saja Anda buat ke Arduino seperti biasa dan buka Serial Window. Ketik perintah berikut diikuti dengan kembali:tambah 5, 10 kurangi 10, 5 Lihat perintah tambah dan kurang yang disertakan dan tulis sendiri!********************* ************************************************** ****** Inilah yang terjadi di balik selimut************************************ **************************************** Penerjemah Baris Perintah Sederhana dan Jelas File ini akan memungkinkan Anda mengetik perintah ke dalam Serial Window seperti, tambahkan 23.599 blink 5 playSong Kemarin ke sketsa Anda yang berjalan di Arduino dan jalankan Catatan implementasi:Ini akan menggunakan string C sebagai lawan dari Objek String berdasarkan asumsi bahwa jika Anda memerlukan commandLine penerjemah, Anda mungkin kekurangan ruang juga dan objek String cenderung tidak efisien ruang. 1) Perintah Protokol Sederhana adalah kata dan angka baik spasi atau koma spearated Kata pertama adalah perintah, setiap kata tambahan adalah argumen "\n" mengakhiri setiap perintah 2) Menggunakan rutin C library strtok:Perintah adalah kata yang dipisahkan oleh spasi atau koma. Sebuah kata yang dipisahkan oleh karakter tertentu (seperti spasi atau koma) disebut token. Untuk mendapatkan token satu per satu, saya menggunakan C lib routing strtok (bagian dari C stdlib.h lihat di bawah cara memasukkannya). Ini adalah bagian dari pustaka bahasa C  yang dapat Anda cari secara online. Pada dasarnya Anda:1) berikan string (dan pembatas yang Anda gunakan, yaitu spasi dan comman) dan itu akan mengembalikan token pertama dari string 2) pada panggilan berikutnya, berikan NULL (bukan string ptr) dan itu akan melanjutkan di mana ia tinggalkan dengan string awal. Saya telah menulis beberapa rutinitas pembantu dasar:readNumber:using strtok dan atoi (atoi:ascii to int, lagi-lagi bagian dari C stdlib.h) untuk mengembalikan bilangan bulat. Perhatikan bahwa atoi mengembalikan int dan jika Anda menggunakan 1 byte int seperti uint8_t Anda harus mendapatkan lowByte(). readWord:mengembalikan ptr ke kata teks 4) DoMyCommand:Daftar if-then-elses untuk setiap perintah. Anda bisa membuat pernyataan kasus ini jika semua perintah adalah satu karakter. Menggunakan kata lebih mudah dibaca. Untuk keperluan contoh ini, kami memiliki:Add Subtract nullCommand*//*********************contoh kode loop utama ************* ************************** #include "CommandLine.h" void setup() { Serial.begin(115200); } void loop() { bool diterima =getCommandLineFromSerialPort(CommandLine); //global CommandLine didefinisikan di CommandLine.h jika (diterima) DoMyCommand(CommandLine); }*************************************************** *********************************///Beri nama tab ini:CommandLine.h#include  #include //makro berikut ini bagus untuk debugging, mis print2("myVar=", myVar);#define print2(x,y) (Serial.print(x), Serial.println(y))#define CR '\r'#define LF '\n'#define BS '\b'#define NULLCHAR '\0'#define SPACE ' '#define COMMAND_BUFFER_LENGTH 25 //panjang serial buffer untuk perintah yang masukchar CommandLine[COMMAND_BUFFER_LENGTH + 1]; //Baca perintah ke buffer ini dari Serial. +1 panjangnya untuk charconst char *delimiters =", \n"; //perintah dapat dipisahkan dengan return, spasi atau koma/************************************ ************************************************** ********************** Nama Perintah Anda Di Sini*/const char *addCommandToken ="tambah"; //Modify hereconst char *subtractCommandToken ="sub"; //Ubah di sini/********************************************* ************************************************** ************** getCommandLineFromSerialPort() Mengembalikan string dari perintah berikutnya. Perintah dibatasi oleh pengembalian" Menangani karakter BackSpace Jadikan semua karakter huruf kecil********************************** ************************************************** **********************/boolgetCommandLineFromSerialPort(char * commandLine){ static uint8_t charsRead =0; //catatan:COMAND_BUFFER_LENGTH harus kurang dari 255 karakter // membaca asynchronous sampai input perintah penuh while (Serial.available()) { char c =Serial.read(); switch (c) { case CR://kemungkinan memiliki perintah penuh di buffer sekarang, perintah diakhiri oleh CR dan/atau LS case LF:commandLine[charsRead] =NULLCHAR; //null menghentikan perintah char array if (charsRead> 0) { charsRead =0; //charsRead adalah static, jadi harus mereset Serial.println(commandLine); return true; } break; case BS:// menangani backspace di input:beri spasi di char terakhir if (charsRead> 0) { //dan sesuaikan commandLine dan charsRead commandLine[--charsRead] =NULLCHAR; Serial <Jumlahnya adalah =",hasil); } else { if (strcmp(ptrToCommandName, subtractCommandToken) ==0) { //Modify here result =subtractCommand(); //K&R string.h hal. 251 print2("> Bedanya =", hasil); } else { nullCommand(ptrToCommandName); } }}

Proses manufaktur

  1. C# Komentar
  2. antarmuka C#
  3. Antarmuka Jawa
  4. Antarmuka ke Sensor Jalan Nirkabel
  5. Sensor jarak analog sederhana dengan antarmuka digital (untuk Raspberry Pi) [pembaruan terakhir:7 Feb 2014]
  6. ANDY:Robot "Humanoid" Serbaguna
  7. Robot Pi Sederhana
  8. C - Argumen Baris Perintah
  9. C# - Antarmuka
  10. Apa itu Steel Coil Slitting Line?