1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thư Viện Lập Trình Pascal SArduino-1.3

52 183 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 299,23 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

● Cú pháp Procedure digitalWritepin: ​integer​; value: ​integer​; ● Tham số pin​: chân digital cần thiết lập value​: HIGH hoặc LOW ● Kiểu trả về Không ● Ví dụ... pinModeINPIN, INPUT; {th

Trang 1

Saigon Institute of Technology

Thư Viện Lập Trình Pascal SArduino-1.3

SaigonTech Tháng 12, năm 2016

Trang 2

Nội Dung

Trang 3

Các hàm ngắt (interrupts) 24

Trang 4

1 Lịch sử chỉnh sửa

SArduino-1.0 Hỗ trợ các thư viện SArduino, SWire, SServo, SMPU6050

SArduino-1.1 Đổi tên và thêm một số hàm trong thư viện

SArduino-1.3 - Đổi tên các thư viện thành STArduino, STWire, STServo, STMPU6050

- Đổi các kiểu dữ liệu hỗ trợ

- Đổi tên các hàm giao tiếp serial

- Thay đổi bộ thư viện giao tiếp STMPU6050

2 Các kiểu dữ liệu cơ bản cho phép sử dụng

HIGH là một hằng số có giá trị nguyên là 1

Trong điện tử, HIGH là một mức điện áp lớn hơn 0V Giá trị của HIGH được định nghĩa khác nhau trong các mạch điện khác nhau, nhưng thường được quy ước ở các mức như 1.8V, 2.7V, 3.3V 5V, 12V, …

3.1.2 LOW

LOW là một hằng số có giá trị nguyên là 0

Trong điện tử, LOW là mức điện áp 0V hoặc gần bằng 0V, giá trị này được định nghĩa khác nhau trong các mạch điện khác nhau, nhưng thường là 0V

3.1.3 INPUT

Trang 5

Hằng số này cấu hình 1 chân (pin) là đầu vào (INPUT)

3.1.9 MSBFIRST: ​bit nằm bên trái nhất

3.1.10 LSBFIRST: ​bit nằm bên phải nhất

3.1.11 SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (the default),

SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2​: cấu hình: thiết lập dữ liệu, tính chẵn lẻ, và bit stop cho hàm serialBeginConfigures

3.1.12 BIN, OCT, DEC, HEX​: các tham số dành cho loại hàm serialPrintFormat và

serialPrintlnFormat để chuyển sang các hệ cơ số khác (2, 8, 10, 16)

3.1.13 DEFAULT​: Đặt mức điện áp tối đa là 5V (nếu trên mạch dùng nguồn 5V) hoặc là 3.3V

(nếu trên mạch dùng nguồn 3.3V)

3.1.14 INTERNAL​: Đặt lại mức điện áp tối đa là 1.1 V nếu sử dụng vi điều khiển ATmega328

hoặc ATmega168 và đặt lại mức điện áp tối đa là 2.56V nếu sử dụng vi điều khiển ATmega8 Chú ý: không tồn tại tham số này trên mạch Arduino Mega

3.1.15 INTERNAL1V1​: Đặt lại mức điện áp tối đa là 1.1 V (chỉ có trên Arduino Mega)

3.1.16 INTERNAL2V56​: Đặt lại mức điện áp tối đa là 2.56 V (chỉ có trên Arduino Mega)

3.1.17 EXTERNAL​: Đặt lại mức điện áp tối đa bằng với mức điện áp được cấp vào chân AREF

(chỉ được cấp vào chân AREF một điện áp nằm trong khoảng 0-5V) 3.2 Digital I/O

Trang 6

mode: đầu vào (INPUT), đầu ra (OUTPUT) hoặc INPUT_PULLUP

digitalWrite(LEDPIN, HIGH); {bật đèn led}

digitalWrite(LEDPIN, LOW); {tắt đèn led}

- Xuất tín hiệu ra các chân digital

- Nếu một chân được thiết lập là OUTPUT bởi hàm pinMode Khi dùng hàm digitalWrite

để xuất tín hiệu HIGH thì điện thế tại chân này sẽ là 5V (hoặc là 3.3V trên mạch 3.3V), và khi xuất tín hiệu LOW thì hiệu điện thế là 0V

- Nếu một chân được thiết lập là INPUT bởi hàm pinMode Lúc này hàm digitalWrite sẽ bật (HIGH) hoặc tắt (LOW) hệ thống điện trở pullup nội bộ

● Cú pháp

Procedure digitalWrite(pin: ​integer​; value: ​integer​);

● Tham số

pin​: chân digital cần thiết lập

value​: HIGH hoặc LOW

● Kiểu trả về

Không

● Ví dụ

Trang 7

digitalWrite(​LEDPIN​, HIGH); {bật đèn led}

delay(1000); {dừng trong 1 giây}

digitalWrite(​LEDPIN​, LOW); {tắt đèn led}

delay(1000); {dừng trong 1 giây}

​LEDPIN​ = 13; { đèn LED được kết nối với chân digital 13}

INPIN = 7; {nút nhấn kết nối chân số 7}

Trang 8

pinMode(INPIN, INPUT); {thiết lập chân số 7 là INPUT} end;

Procedure loop;

begin

val:= digitalRead(INPIN); {đọc giá trị từ chân số 7}

digitalWrite(​LEDPIN​, val); {truyền giá trị đọc được cho chân 13} end;

type​: tham số nhận 1 trong các giá trị: DEFAULT, INTERNAL, INTERNAL1V1,

INTERNAL2V56 hoặc EXTERNAL Trong đó:

- DEFAULT: Đặt mức điện áp tối đa là 5V (nếu trên mạch dùng nguồn 5V) hoặc là 3.3V (nếu trên mạch dùng nguồn 3.3V)

- INTERNAL: Đặt lại mức điện áp tối đa là 1.1 V nếu sử dụng vi điều khiển ATmega328 hoặc ATmega168 và đặt lại mức điện áp tối đa là 2.56V nếu sử dụng vi điều khiển ATmega8 Chú ý: không tồn tại tham số này trên mạch Arduino Mega

- INTERNAL1V1: Đặt lại mức điện áp tối đa là 1.1 V (chỉ có trên Arduino Mega)

- INTERNAL2V56: Đặt lại mức điện áp tối đa là 2.56 V (chỉ có trên Arduino Mega)

- EXTERNAL: Đặt lại mức điện áp tối đa BẰNG với mức điện áp được cấp vào chân AREF (chỉ được cấp vào chân AREF một điện áp nằm trong khoảng 0-5V)

Trang 9

- Hàm analogRead cần 100 micro giây (0.0001 s) để thực hiện

- Khi nói "đọc tín hiệu analog" thì có thể hiểu đó chính là việc đọc giá trị điện áp

val:= analogRead(ANALOGPIN); {đọc giá trị chân số 3}

serialPrintlnLong(val); {xuất giá trị đọc được} end;

Trang 10

● Tham số

pin​: chân phát xung

value​: giá trị xung PWM Giá trị mức xung PWM nằm trong khoảng từ 0 đến 255, tương ứng với mức duty cycle từ 0% đến 100%

LEDPIN = 9; {LED kết nối digital chân số 9}

ANALOGPIN = 3; {chân đọc điện áp là chân 3}

val:= analogRead(ANALOGPIN); {đọc chân INPUT}

analogWrite(LEDPIN, val div 4); {analogRead có giá trị từ 0 1023}

- analogReadResolution là hàm mở rộng Analog API dành cho mạch Arduino Due và Zero

- Thiết lập kích cỡ-size (đơn vị bits) của giá trị trả về bởi analogRead Mặc định là 10 bits (trả về giá trị từ 0-1023)

- Phần ​Due and the Zero tương thích với mạch chuyển đổi tương tự ra số 12 bits​,

có thể được truy cập bằng cách thay đổi độ phân giải thành 12 Do đó giá trị từ analogRead trả về sẽ trong khoảng từ 0 đến 4095

● Cú pháp

Procedure​​analogReadResolution​(bits: ​integer​);

Trang 11

● Tham số

bits: xác định độ phân giải (bits) của giá trị trả về bởi hàm analgoRead, có thể thiết lập giá trị này từ 1 đến 32 Ta có thể thiết lập giá trị độ phân giải cao hơn 12 nhưng giá trị trả

về của hàm analogRead sẽ xấp xỉ khác đi như sau:

● Nếu ta set giá trị hàm analogReadResolution cao hơn độ tương thích của board, mạch Arduino sẽ trả về giá trị độ phân giải cao nhất cộng thêm phần đệm số bits

dư là những số 0

● Ví dụ: nếu ta set analogReadResolution(16), hàm sẽ trả về xấp xỉ 16 bits với 12 bits đầu tiên là giá trị đọc được ​thật sự​ từ ADC, cộng thêm ​4 bits đệm là

những số 0

● Nếu ta set giá trị hàm analogReadResolution nhỏ hơn độ tương thích của board,

số bits nhỏ hơn sẽ bị ​bỏ qua​

● Việc sử dụng độ phân giải 16 bit (hoặc cao hơn) cho phép người dùng phác họa những thiết bị xử lý tự động với mạch ADC có độ phân giải cao hơn khi những thiết bị này được sản xuất trong tương lai mà không cần thay đổi mã lệnh

bits: xác định độ phân giải (bits) của giá trị được dùng trong hàm analogWrite, có giá trị

từ 1 đến 32 Nếu ta chọn độ phân giải cao hay thấp hơn board, giá trị dùng trong hàm analogWrite sẽ bị hoặc bỏ bớt đi (cao hơn) hay có thêm phần đệm những số 0 nếu thấp hơn

- Khi chạy hàm này, chân digital phải kết nối tới buzzer hoặc loa để có thể phát được âm thanh

Trang 12

- Lưu ý: hàm tone/toneDuration chỉ được gọi 1 lần Nếu hàm tone/toneDuration đang chạy trên một chân nào đó, thì khi gọi hàm tone/toneDuration thêm một lần sẽ không có hiệu lực

- Nếu tone/toneDuration lên chân đang được tone/toneDuration thì sẽ làm thay đổi tần số sóng của chân đó

- Việc sử dụng hàm tone sẽ gây nhiễu với các ngõ ra PWM (pulse width modulation) trên các chân 3 và 11 (với các mạch khác Arduino Mega)

- Chú ý: nếu bạn muốn có nhiều cao độ (pitches) khác nhau trên nhiều chân Thì trước khi tone/toneDuration trên một chân khác thì phải noTone trên chân đang được sử dụng

● Cú pháp

Procedure​​tone​(pin: ​integer​; frequency: ​integer​);

Procedure​​toneDuration​(pin: ​integer​; frequency: ​integer​; duration: ​longint​);

● Tham số

pin​: Chân digital phát xung

frequency​: Tần số của xung (Hz)

duration​: Thời gian phát, đơn vị là mili giây

- Nếu đang giao tiếp với thiết bị được kích bằng cạnh, chân clockPin phải có giá trị LOW (bằng cách chạy lệnh digitalWrite(clockPin, LOW)) trước khi chạy shiftOut

Trang 13

- Chú ý:

- Chân DataPin va chân clockPin phải được cấu hình là chân OUTPUT bằng hàm pinMode

- shiftOut chỉ xuất được dữ liệu kiểu byte Trong trường hợp muốn xuất một kiểu

dữ liệu lớn hơn thì phải shiftOut nhiều hơn 1 lần, mỗi lần là 8 bit

● Cú pháp

Procedure​​shiftOut​(dataPin: ​integer​; clockPin: ​integer​; bitOrder: ​integer​; value: ​byte​);

● Tham số

dataPin​: Chân digital sẽ được xuất tín hiệu

clockPin​: Chân digital dùng để xác nhận việc gửi từng bit ra chân dataPin

bitOrder​: Có giá trị là một trong hai giá trị MSBFIRST (bắt đầu từ bit bên trái nhất) hoặc LSBFIRST (bắt đầu từ bit bên phải nhất)

value​: Dữ liệu sẽ được chuyển từng bít ra chân dataPin

dataPin​: pin sẽ được xuất ra tín hiệu

clockPin​: pin dùng để xác nhận việc gửi từng bit của dataPin

bitOrder​: một trong hai giá trị MSBFIRST hoặc LSBFIRST (Bắt đầu từ bit bên phải nhất hoặc Bắt đầu từ bit bên trái nhất)

pulseIn/pulseInTimeout để đọc tín hiệu

● Cú pháp

Function​​pulseIn​(pin: ​integer​; value: ​integer​): ​longint​;

Function​​pulseInTimeout​(pin: ​integer​; value: ​integer​; timeout: ​longint​): ​longint​;

Trang 14

● Tham số

pin​: chân được chọn để đọc xung

value​: kiểu để hàm đọc dữ liệu (HIGH hoặc LOW) Nếu đặt value là HIGH, hàm pulseIn

sẽ đợi đến khi tín hiệu đạt mức HIGH, khởi động bộ đếm thời gian Khi tín hiệu nhảy xuống LOW, bộ đếm thời gian dừng lại pulseIn sẽ trả về thời gian tín hiệu nhảy từ mức HIGH xuống LOW này Nếu đặt value là LOW, hàm pulseIn sẽ làm ngược lại, đó là đo thời gian tín hiệu nhảy từ mức LOW lên HIGH value có kiểu dữ liệu là int

timeout​: Nếu tín hiệu luôn ở một mức HIGH/LOW cố định thì sau khoảng thời gian timeout, hàm pulseIn/pulseInTimeout sẽ dừng bộ đếm thời gian và trả về giá trị 0 timeout được tính bằng đơn vị micro giây Giá trị mặc định của timeout là 60.106 tương ứng với 1 phút Giá trị tối đa là 180.106 tương ứng với 3 phút

duration:= pulseIn(PIN, HIGH);

{Hãy nối chân 7 của Arduino vào đường tín hiệu muốn đọc xung} serialPrintlnLong(duration);

Trang 15

Trả về số mili giây từ lúc bo Arduino bắt đầu chạy chương trình Giá trị này sẽ bị tràn và trở về số 0 sau khoảng 50 ngày

end;

procedure loop;

begin serialPrintString('Time: ');

loop;

end

● Mô tả

● Hàm trả về số microseconds từ khi mạch Arduino bắt đầu chạy chương trình hiện hành

Số microseconds này có thể bị tràn (trở về 0) sau khoảng 70 phút Trên mạch Arduino 16 MHz (như Duemilanove hay Nano), hàm này có độ phân giải 4 microseconds (giá trị trả

về là bội số của 4) Trên mạch Arduino 8 MHz (như LilyPad), hàm này có độ phân giải 8 microseconds

Trang 16

Số microseconds từ khi mạch Arduino bắt đầu chạy chương trình hiện hành (​longint​)

Trang 17

Hàm trả về giá trị lớn nhất trong 2 giá trị cho trước

a: số nhỏ nhất của khoảng cho trước

b: số lớn nhất của khoảng cho trước

Hàm chuyển một số từ 1 thang đo sang 1 thang đo khác: 1 giá trị ​fromLow​ sẽ map đến

toLow​, 1 giá trị ​fromHigh​ sẽ map đến ​toHigh​ Giá trị trả về sau khi chuyển là số nguyên

● Cú pháp

Function​​map​(value: ​integer​; fromLow: ​integer​; fromHigh: ​integer​; toLow: ​integer​; toHigh: integer): ​integer​;

Trang 18

● Tham số

value: số cần chuyển

fromLow: số nhỏ nhất của thang đo hiện hành

fromHigh: số lớn nhất của thang đo hiện hành

toLow: số nhỏ nhất của thang đo muốn chuyển đến

toHigh: số lớn nhất của thang đo muốn chuyển đến

base: cơ số (​real​)

exponent: lũy thừa (​real​)

Trang 23

3.10.2. random

● Mô tả

Hàm trả về giá trị ngẫu nhiên giữa 0 và một số cho trước

Lưu ý:​ nếu gọi hàm random mà không gọi hàm randomSeed trước thì chương trình sẽ mặc định chạy hàm randomSeed(0)

Trang 24

n: bit cần đọc, từ 0 đến bit phải nhất

b: giá trị ghi: 0 hoặc 1

Trang 25

● Tham số

x: số cần xóa bit n: bit cần xóa, từ 0 đến bit phải nhất

Mặc định, Arduino luôn bật các ngắt nên trong phần setup, bạn không cần gọi hàm này

để bật các ngắt Hàm interrupts sẽ bật toàn bộ các ngắt đã được cài đặt Nếu vì lý do nào đó bạn tắt các ngắt bằng hàm ​noInterrupts​, bạn sử dụng hàm này để bật lại các ngắt

Khi cần chạy các đoạn chương trình yêu cầu chính xác về thời gian, bạn cần tắt các ngắt

để Arduino chỉ tập trung vào xử lý các tác vụ cần thiết và chỉ duy nhất các tác vụ này Các ngắt chạy nền sẽ không được thực thi sau khi gọi hàm noInterrupts

Trang 26

3.13 Hàm thư viện Serial

● Mô tả

Hàm lấy số bytes (ký tự) có sẵn từ 1 cổng serial để đọc Đây là dữ liệu đã được gửi đến

và lưu trữ trên buffer của serial

14400, 19200, 28800, 38400, 57600, hoặc 115200, và cấu hình dữ liệu (data bits), tính chẵn

lẻ (parity), và stop bit Mặc định là 8 bit dữ liệu, không có tính chẵn lẻ, một stop bit

● Cú pháp

Trang 27

Procedure serialBeginConfigures(speed: longint; conf: string);

● Tham số

Speed: tốc độ truyền bits/giây

Conf: cấu hình dữ liệu, tính chẵn lẻ, và stop bit Một trong các giá trị: SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (the default), SERIAL_5N2, SERIAL_6N2,

SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,

SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1,

SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2

Hàm vô hiệu hóa giao tiếp với serial, cho phép các chân RX (nhận) và TX (truyền) được

sử dụng cho việc nhập, xuất Để cho phép giao tiếp với serial trở lại, gọi hàm serialBegin

Trang 28

terminal: chuỗi kết thúc tìm kiếm trong chuỗi cho ban đầu

Hàm trả về số thực dấu chấm động đầu tiên từ serial buffer Những ký tự không phải chữ

số (hoặc dấu trừ) sẽ bị bỏ qua Hàm serialParseFloat sẽ ngắt bởi ký tự không phải là một số thực dấu chấm động

Hàm tìm kiếm một số nguyên trong dữ liệu truyền đến serial Như sau:

- Những ký tự khởi tạo mà không phải chữ số hoặc là dấu trừ sẽ bị bỏ qua;

- Việc tìm kiếm sẽ dừng nếu thời gian cấu hình time-out hết (xem hàm serialSetTimeout) hoặc không có chữ số nào được tìm thấy;

- Nếu không có chữ số nào được tìm thấy cho đến khi thời gian cấu hình time-out hết, hàm sẽ trả về 0;

Trang 29

● Mô tả

Hàm trả về byte đầu tiên trong dữ liệu truyền đến serial mà không cần loại bỏ nó ra khỏi

bộ đệm của serial, có nghĩa là nếu gọi hàm serialPeek nhiều lần sẽ cho ra một ký tự giống nhau

● Cú pháp

Function serialReadBytesUntil(character: Char; buffer: pbyte; length: integer): integer;

Trang 30

buffer: con trỏ chỉ đến mảng lưu trữ char

length : số byte muốn đọc

Trang 34

● BIN; OCT; DEC; HEX: in số dưới dạng binary, octal, decimal, hexadecimal

Trang 35

● Số nguyên 1; 2; 3; 4…: in bao nhiêu số phần thập phân

Trang 36

Function serialPrintlnLong(n: longint): longint;

Trang 37

● BIN; OCT; DEC; HEX: in số dưới dạng binary, octal, decimal, hexadecimal

● Số nguyên 1; 2; 3; 4…: in bao nhiêu số phần thập phân

Trang 38

address: địa chỉ của thiết bị Slave

quantity: số lượng byte yêu cầu

Trang 39

wireBegin; {ket noi i2c bus}

wireRequestFrom(2, 6); {yeu cau 6 byte tu slave so 2}

while wireAvailable>0 do {slave co the ghi it hon so byte yeucau}

begin

c := wireRead; {doc 1 byte ky tu}

serialPrintString(c); {in ky tu vua doc duoc}

address: là địa chỉ của thiết bị Slave

quantity: số lượng byte yêu cầu

stop: nếu giá trị là true → gửi tín hiệu dừng xuống thiết bị, ngắt kết nối và giải phóng bus Nếu giá trị là false → gửi yêu cầu restart xuống thiết bị, vẫn giữ kết nối với thiết bị

Trang 40

1: dữ liệu dài hơn bộ đệm

2: nhận tín hiệu NACK (không nhận) từ slave sau khi truyền địa chỉ

3: nhận tín hiệu NACK (không nhận) từ slave sau khi truyền dữ liệu

1: dữ liệu dài hơn bộ đệm

2: nhận tín hiệu NACK (không nhận) từ slave sau khi truyền địa chỉ

3: nhận tín hiệu NACK (không nhận) từ slave sau khi truyền dữ liệu

Ngày đăng: 06/09/2018, 14:42

TỪ KHÓA LIÊN QUAN

w