Giới thiệu về ngôn ngữ lập trình Arduino

Bạn có thể viết chương trình cho bảng Arduino của mình như thế nào? Về cơ bản, Arduino hỗ trợ một ngôn ngữ mà chúng tôi gọi là Ngôn ngữ lập trình Arduino, hoặc Ngôn ngữ Arduino.

Bạn có thể viết chương trình cho bảng Arduino của mình như thế nào?

Về cơ bản, Arduino hỗ trợ một ngôn ngữ mà chúng tôi gọi là Ngôn ngữ lập trình Arduino, hoặc Ngôn ngữ Arduino.

Ngôn ngữ này dựa trênĐấu dâynền tảng phát triển, đến lượt nó, dựa trênChế biến, mà nếu bạn không quen thuộc, là những gìp5.jsdựa trên. Đó là một lịch sử lâu dài của các dự án được xây dựng dựa trên các dự án khác, theo cách rất Mã nguồn mở. Arduino IDE dựa trên IDE xử lý và IDE đấu dây được xây dựng trên nó.

Khi chúng tôi làm việc với Arduino, chúng tôi thường sử dụng Arduino IDE (Môi trường phát triển tích hợp), một phần mềm có sẵn cho tất cả các nền tảng máy tính để bàn chính (macOS, Linux, Windows), cung cấp cho chúng tôi 2 thứ: một trình soạn thảo lập trình với hỗ trợ thư viện tích hợp và một cách dễ dàng biên dịch và tải các chương trình Arduino của chúng tôi vào bảng kết nối với máy tính.

Ngôn ngữ lập trình Arduino về cơ bản là một khung công tác được xây dựng dựa trên C ++. Bạn có thể tranh luận rằng nó không phải là một ngôn ngữ lập trình thực sự theo thuật ngữ truyền thống, nhưng tôi nghĩ điều này giúp tránh nhầm lẫn cho người mới bắt đầu.

Một chương trình được viết bằng Ngôn ngữ lập trình Arduino được gọi làbản phác thảo. Bản phác thảo thường được lưu với.inophần mở rộng (từ Arduino).

Sự khác biệt chính so với "bình thường"Choặc C ++ là bạn gói tất cả mã của bạn thành 2 hàm chính. Tất nhiên, bạn có thể có nhiều hơn 2, nhưng bất kỳ chương trình Arduino nào cũng phải cung cấp ít nhất 2 cái đó.

Một người được gọi làsetup(), cái kia được gọi làloop(). Lần đầu tiên được gọi một lần, khi chương trình bắt đầu, lần thứ hai được gọi nhiều lần trong khi chương trình của bạn đang chạy.

Chúng tôi không cómain()chức năng như bạn đã quen trong C / C ++ làm điểm đầu vào cho một chương trình. Sau khi bạn biên dịch bản phác thảo của mình, IDE sẽ đảm bảo kết quả cuối cùng là một chương trình C ++ chính xác và về cơ bản sẽ bổ sung phần keo bị thiếu bằng cách xử lý trước nó.

Mọi thứ khác đều là mã C ++ bình thường và vì C ++ là một tập siêu của C, nên bất kỳ C hợp lệ nào cũng là mã Arduino hợp lệ.

Một điểm khác biệt có thể khiến bạn gặp rắc rối là mặc dù bạn có thể tạo chương trình của mình trên nhiều tệp, nhưng tất cả các tệp đó phải nằm trong cùng một thư mục. Có thể là một giới hạn phá vỡ thỏa thuận nếu chương trình của bạn sẽ phát triển rất lớn, nhưng tại thời điểm đó, sẽ dễ dàng chuyển sang thiết lập C ++ gốc, điều này có thể thực hiện được.

Một phần của Ngôn ngữ lập trình Arduino là các thư viện tích hợp cho phép bạn dễ dàng tích hợp với các chức năng được cung cấp bởi bảng Arduino.

Chương trình Arduino đầu tiên của bạn chắc chắn sẽ liên quan đến việc bật đèn LED, rồi tắt. Để làm như vậy, bạn sẽ sử dụngpinMode(),delay()digitalWrite()các hàm, cùng với một số hằng số nhưHIGH,LOW,OUTPUT.

Như thế này, dự án Arduino đầu tiên chuẩn tắc (“Hello, World!”):

#define LED_PIN 13

void setup() {
    // Configure pin 13 to be a digital output
    pinMode(LED_PIN, OUTPUT);
}

void loop() { // Turn on the LED digitalWrite(LED_PIN, HIGH); // Wait 1 second (1000 milliseconds) delay(1000); // Turn off the LED digitalWrite(LED_PIN, LOW); // Wait 1 second delay(1000); }

Đây là tất cả các phần của Ngôn ngữ lập trình Arduino, hay chúng ta nên gọi nó làThượng hạnghoặc làthư viện.

Hỗ trợ cho ngôn ngữ khác

Xin nhắc lại, tôi muốn lưu ý rằng bạn không bị giới hạn trong việc sử dụng ngôn ngữ này và IDE để lập trình Arduino. Các dự án tồn tại, trong số những dự án khác, để cho phép bạn chạy mã Node.js trên đó bằng cách sử dụngJohnny Fivedự án, sử dụng mã Pythonkim tự thápvà đi mã vớiĐi bot, nhưng Ngôn ngữ lập trình Arduino chắc chắn là ngôn ngữ bạn sẽ thấy hầu hết các hướng dẫn dựa trên, vì đó là cách nguyên bản và hợp quy để làm việc với các thiết bị này.

Hằng số tích hợp trong ngôn ngữ lập trình Arduino

Arduino đặt hai hằng số mà chúng ta có thể sử dụng để

HIGHtương đương với mức điện áp cao, có thể khác nhau tùy thuộc vào phần cứng (> 2V trên bảng 3.3V như Arduino Nano,> 3V trên bảng 5V như Arduino Uno)LOWtương đương với mức điện áp thấp. Một lần nữa, giá trị chính xác phụ thuộc vào bảng được sử dụng

Sau đó, chúng tôi có 3 hằng số mà chúng tôi có thể sử dụng kết hợp vớipinMode()chức năng:

  • INPUTđặt ghim làm chân đầu vào
  • OUTPUTđặt chân làm chân đầu ra
  • INPUT_PULLUPđặt chân làm điện trở kéo lên bên trong

Hằng số khác mà chúng ta có làLED_BUILTIN, trỏ đến số của chốt trên bo mạch, thường tương đương với số13.

Ngoài ra, chúng ta có các hằng số C / C ++truefalse.

Hằng số toán học Arduino

  • M_PIhằng số pi (3.14159265358979323846)
  • M_Ehằng số e
  • M_LN10 the natural logarithm of the number 10.
  • M_LN2 the natural logarithm of the number 2.
  • M_LOG10E the logarithm of the e to base 10.
  • M_LOG2E the logarithm of the e to base 2.
  • M_SQRT2 the square root of 2.
  • NANhằng số NAN (không phải số).

Các chức năng tích hợp của ngôn ngữ lập trình Arduino

Trong phần này, tôi sẽ tham khảo các hàm tích hợp được cung cấp bởi Ngôn ngữ lập trình Arduino.

Vòng đời chương trình

  • setup()chức năng này được gọi một lần, khi chương trình bắt đầu và khi Arduino tắt và khởi động lại.
  • loop()hàm này được gọi nhiều lần trong khi chương trình Arduino đang chạy.

Xử lý I / O

Các chức năng sau đây giúp xử lý đầu vào và đầu ra từ thiết bị Arduino của bạn.

I / O kỹ thuật số

  • digitalRead()đọc giá trị từ một pin kỹ thuật số. Chấp nhận một số pin làm tham số và trả vềHIGHhoặc làLOWkhông thay đổi.
  • digitalWrite()viết mộtHIGHhoặc làLOWgiá trị đến chân đầu ra kỹ thuật số. Bạn chuyển số pin vàHIGHhoặc làLOWdưới dạng các tham số.
  • pinMode()đặt một chân làm đầu vào hoặc đầu ra. Bạn chuyển số pin vàINPUThoặc làOUTPUTgiá trị như các tham số.
  • pulseIn()đọc một xung kỹ thuật số từLOWđếnHIGHvà sau đó đếnLOWmột lần nữa, hoặc từHIGHđếnLOWvà đểHIGHmột lần nữa trên một ghim. Chương trình sẽ chặn cho đến khi phát hiện ra xung. Bạn chỉ định số pin và loại xung bạn muốn phát hiện (LHL hoặc HLH). Bạn có thể chỉ định thời gian chờ tùy chọn để dừng chờ xung đó.
  • pulseInLong()giống nhưpulseIn(), ngoại trừ nó được triển khai theo cách khác và không thể sử dụng nếu ngắt bị tắt. Các ngắt thường được tắt để có kết quả chính xác hơn.
  • shiftIn()đọc từng byte dữ liệu một bit từ một chân.
  • shiftOut()ghi từng byte dữ liệu một bit vào một chân.
  • tone()gửi một sóng vuông trên một chân cắm, được sử dụng cho bộ rung / loa để phát âm thanh. Bạn có thể chỉ định mã pin và tần số. Nó hoạt động trên cả chân kỹ thuật số và chân analog.
  • noTone()dừng lạitone()tạo sóng trên một pin.

I / O tương tự

  • analogRead()đọc giá trị từ một chân tương tự.
  • analogReference()định cấu hình giá trị được sử dụng cho phạm vi đầu vào trên cùng trong đầu vào tương tự, theo mặc định 5V trong bo mạch 5V và 3.3V trong bo mạch 3.3V.
  • analogWrite()ghi một giá trị tương tự vào một chân
  • analogReadResolution()cho phép bạn thay đổi độ phân giải bit tương tự mặc định choanalogRead(), theo mặc định là 10 bit. Chỉ hoạt động trên các thiết bị cụ thể (Arduino Due, Zero và MKR)
  • analogWriteResolution()cho phép bạn thay đổi độ phân giải bit tương tự mặc định choanalogWrite(), theo mặc định là 10 bit. Chỉ hoạt động trên các thiết bị cụ thể (Arduino Due, Zero và MKR)

Chức năng thời gian

  • delay()tạm dừng chương trình trong một số mili giây được chỉ định làm tham số
  • delayMicroseconds()tạm dừng chương trình trong một số micro giây được chỉ định làm tham số
  • micros()số micro giây kể từ khi bắt đầu chương trình. Đặt lại sau ~ 70 phút do tràn
  • millis()số mili giây kể từ khi bắt đầu chương trình. Đặt lại sau ~ 50 ngày do tràn

Các hàm toán học

  • abs()giá trị tuyệt đối của một số
  • constrain()hạn chế một số nằm trong một phạm vi,xem cách sử dụng
  • map()ánh xạ lại một số từ dải ô này sang dải ô khác,xem cách sử dụng
  • max()tối đa của hai số
  • min()số tối thiểu của hai số
  • pow()giá trị của một số được nâng lên thành lũy thừa
  • sq()bình phương của một số
  • sqrt()căn bậc hai của một số
  • cos()cosin của một góc
  • sin()sin của một góc
  • tan()tiếp tuyến của một góc

Lưu ý: có nhiều hàm toán học được tích hợp sẵn hơn nếu bạn cần,tài liệu ở đây.

Làm việc với các ký tự chữ và số

  • isAlpha()kiểm tra xem một ký tự có phải là alpha (một chữ cái) hay không
  • isAlphaNumeric()kiểm tra xem một ký tự có phải là chữ và số (một chữ cái hoặc số)
  • isAscii()kiểm tra xem một ký tự có phải là ký tự ASCII không
  • isControl()kiểm tra xem một ký tự có phải là mộtnhân vật điều khiển
  • isDigit()kiểm tra xem một ký tự có phải là một số không
  • isGraph()kiểm tra xem một ký tự có phải là một ký tự ASCII có thể in được hay không và có chứa nội dung hay không (ví dụ: nó không phải là khoảng trắng)
  • isHexadecimalDigit()kiểm tra xem một ký tự có phải là một chữ số thập lục phân hay không (AF 0-9)
  • isLowerCase()kiểm tra xem một ký tự có phải là một ký tự viết thường hay không
  • isPrintable()kiểm tra xem một ký tự có phải là ký tự ASCII có thể in được không
  • isPunct()kiểm tra xem một ký tự có phải là dấu chấm câu hay không (dấu phẩy, dấu chấm phẩy, dấu chấm than, v.v.)
  • isSpace()kiểm tra xem một ký tự có phải là khoảng trắng không, nguồn cấp dữ liệu biểu mẫu\f, dòng mới\n, vận chuyển trở lại\r, Tab ngang\thoặc tab dọc\v.
  • isUpperCase()kiểm tra xem một ký tự có phải là một ký tự viết hoa hay không
  • isWhitespace()kiểm tra xem một ký tự là một ký tự khoảng trắng hay một tab ngang\t

Tạo số ngẫu nhiên

  • random()tạo một số giả ngẫu nhiên
  • randomSeed()khởi tạo trình tạo số giả ngẫu nhiên với một số ban đầu tùy ý

Trong Arduino, giống như trong hầu hết các ngôn ngữ, không thể lấy các số thực sự ngẫu nhiên và chuỗi luôn giống nhau, vì vậy bạn gieo nó với thời gian hiện tại hoặc (trong trường hợp của Arduino), bạn có thểđọc đầu vào từ một cổng analog.

Làm việc với bit và byte

  • bit()tính giá trị của một bit (0 = 1, 1 = 2, 2 = 4, 3 = 8…)
  • bitClear()xóa (đặt thành 0) một bit của một biến số. Chấp nhận một số và số bit bắt đầu từ bên phải
  • bitRead()đọc một chút của một số. Chấp nhận một số và số bit bắt đầu từ bên phải
  • bitSet()đặt thành 1 bit của một số. Chấp nhận một số và số bit bắt đầu từ bên phải
  • bitWrite()ghi 1 hoặc 0 vào một bit cụ thể của số Chấp nhận một số, số bit bắt đầu từ bên phải và giá trị cần ghi (0 hoặc 1)
  • highByte()lấy byte bậc cao (ngoài cùng bên trái) của biến từ (có 2 byte)
  • lowByte()lấy byte bậc thấp (ngoài cùng bên phải) của một biến word (có 2 byte)

Ngắt

  • noInterrupts()vô hiệu hóa sự gián đoạn
  • interrupts()bật lại các ngắt sau khi chúng đã bị vô hiệu hóa
  • attachInterrupt()cho phép một chân đầu vào kỹ thuật số là một ngắt. Các bảng khác nhau có các chân được phép khác nhau,kiểm tra tài liệu chính thức.
  • detachInterrupt()vô hiệu hóa ngắt được kích hoạt bằng cách sử dụngattachInterrupt()

Các hướng dẫn về điện tử khác: