Arduino cho người mới bắt đầu

186 8 0
Arduino cho người mới bắt đầu

Đ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

Arduino cho người bắt đầu IoT Maker Viet Nam Mục lục Arduino cho người bắt đầu 3/188 Lời mở đầu Trong thời đại công nghệ phát triển vũ bão nay, mảng điện tử lập trình, việc dùng Arduino trở nên phổ biến Chúng ta gặp ứng dụng Arduino nhiều lĩnh vực đời sống Nhận thấy nhu cầu lớn việc tìm hiểu Arduino nên chúng tơi biên soạn sách nhằm mục đích giúp cho ngưịi khơng chun, người bắt đầu với lập trình vi điều khiển rút ngắn thời gian tìm hiểu ban đầu, tạo dự án với Arduino cách nhanh chóng hữu ích Mặc dù cố gắng tạo sản phẩm tốt đến tay người dùng, nhiên q trình biên soạn sách khơng khỏi có thiếu sót, chúng tơi hoan nghênh nhận phản hồi chỉnh sửa đóng góp ý kiến để chất lượng nội dung sách tốt Sách public github đường dẫn : github.com/iotmakervn/arduino-for-beginners Đôi lời tác giả Chủ biên sách ơng Phạm Minh Tuấn(TuanPM), người có nhiều năm kinh nghiệm làm việc lập trình vi điều khiển, IoT phát triển thư viện mã nguồn mở cho cộng đồng Tác giả xây dựng sách với mục đích đóng góp phần nhỏ kiến thức người bắt đầu tiếp cận với lập trình vi điều khiển thông qua nên tảng phát triển Arduino Thuật ngữ hay sử dụng • Arduino - Đề cập đến board mạch Arduino thị trường • Arduino IDE - Viết tắt Arduino Integratted Developement Enviroment Nói cách đơn giản, cơng cụ để lập trình với board Arduino bao gồm trình soạn thảo code, gỡ lỗi nạp chương trình cho board • Git - Trình quản lý phiên • Github - Mạng xã hội dành cho lập trình viên • Compiler - Trình biên dịch • Logic Level - Mức điện áp để chip hiểu (1 hay 0) 4/188 Giải thích code void setup() { //comment ① int a = ; a ++ ; ② } Dòng giải thích comment (chú thích) Dịng giải thích biến a tăng thêm đơn vị IoT Maker Viet Nam Arduino cho người bắt đầu 5/188 Giới thiệu nội dung • Nội dung sách bao gồm hướng dẫn chi tiết cho người đọc cách sử dụng tính tảng phát triển Arduino thông qua board mạch IoT Maker UnoX, hiểu chức chuẩn giao tiếp thông dụng truyền nhận liệu, đồng thời bám sát nội dung học thực hành • Phần cứng sử dụng board mạch phần cứng mở IoT Maker UnoX IoT Maker VietNam thiết kế, hồn tồn tương thích với chuẩn Arduino Uno thị trường Đây dự án open source hardware nên chúng tơi hoan nghênh có nhận xét đóng góp nhằm cải thiện tính cho board mạch • Phần mềm sử dụng lập trình máy tính Arduino, ngơn ngữ lập trình C/C++ Ngồi ra, bạn cần tìm hiểu số cơng cụ khái niệm thường xuyên sử dụng sách sau: • Git - Trình quản lý phiên sử dụng rộng rãi giới Git giúp bạn quản lý mã nguồn, làm việc nhóm, xử lý thao tác hợp nhất, lịch sử mã nguồn, … Có thể q trình làm việc với sách này, bạn cần sử dụng thư viện mã nguồn mở cho Arduino từ Github, nên việc cài đặt sử dụng công cụ cần thiết cho việc Chưa kể, giúp bạn quản lý mã nguồn dự án ngày chuyên nghiệp • Github - Là mạng xã hội cho lập trình viên dựa Git • Firmware - phần mềm (software) nhúng (embedded) vào phần cứng (hardware) thiết bị, giúp điều khiển, cập nhật tính cho phần cứng Tuy phần cứng thức sử dụng board mạch phần cứng mở IoT Maker UnoX, bạn hồn tồn sử dụng board Arduino Uno khác thị trường cho sách này, ví dụ như: Arduino Uno R3, Arduno-nano3.0, … Tất mã nguồn hạn chế giải thích rõ chi tiết API cho tính năng, thay vào cung cấp phụ lục Cheat Sheet (Arduino) Ai sử dụng? • Học sinh (cấp 2, 3), sinh viên muốn bổ sung kiến thức, nâng cao kỹ 6/188 • Các giáo viên THCS, THPH muốn sử dụng Arduino giảng dạy STEM • Các lập trình viên phần mềm muốn tham gia làm sản phẩm điện tử • Các kỹ sư khơng chun lập trình muốn làm sản phẩm tự động • Cá nhân muốn tự làm sản phẩm phục vụ cơng việc sống • Các công ty không chuyên phần cứng phần mềm • Và tất lập trình viên u thích phần cứng Mục tiêu mang lại cho người đọc • Hiểu cách thức hoạt động tảng phát triển Arduino • Hiểu cách hoạt động, chuẩn giao tiếp truyền nhận liệu vi điều khiển • Giúp cho người khơng chun phần cứng tiếp cận để làm sản phẩm cách dễ dàng • Có thể tự phát triển hệ thống tích hợp cho sản phẩm Chuẩn bị • Bạn cần board mạch Arduino lập trình được, tốt nên sử dụng board mạch có module nạp cho chip • Nên có thêm module khác cảm biến, động để thực hành, Arduino Kit phù hợp • máy tính cá nhân (Windows, MacOS Linux) • C & Arduino Cheatsheet (Mục lục cuối sách này) Kiến thức Để có nhìn tổng quan bắt đầu với tảng phát triển Arduino, điểm qua nội dung tìm hiểu phần sau: • Khái niệm Arduino • Tìm hiểu dịng chip board Aruino thị trường • Giới thiệu board mạch IoT Maker UnoX • Tìm hiểu Arduino IDE cách cài đặt • Giới thiệu sơ lược ngôn ngữ C/C++ IoT Maker Viet Nam Arduino cho người bắt đầu 7/188 Arduino Arduino ? Khái niệm, lịch sử hình thành phát triển Theo định nghĩa từ www.arduino.cc , Arduino tảng điện tử mã nguồn mở, dựa phần cứng phần mềm, linh hoạt dễ sử dụng, board Arduino có khả đọc liệu từ mơi trường (ánh sáng, nhiệt độ, độ ẩm,…), trạng thái nút nhấn, tin nhắn từ Twitter,… điều khiển trở lại với thiết bị động cơ, đèn LED, gửi thơng tin đến nơi khác,… Chúng ta điều khiển vi điều khiển board Arduino cách sử dụng ngơn ngữ lập trình C++, điều khiển biên dịch Arduino IDE trình biên dịch kèm mã máy nhị phân Lúc Vi điều khiển dễ dàng thực thi chương trình Hiện tại, Arduino cơng ty hoạt động lĩnh vực phần cứng phần mềm máy tính mã nguồn mở Dự án Arduino sinh học viện Interaction Design Ivrea, Italy vào năm 2003 Mục đích ban đầu board Arduino giúp cho sinh viên học viện - người tảng kiến thức điện tử tạo sản phẩm cách nhanh chóng với chi phí thấp dễ sử dụng Đó dự án mã nguồn mở, Arduino phát triển thông qua việc cho phép người dùng tồn giới xây dựng, phát triển đóng góp vào dự án Tên Arduino tên quán bar Ivrea, Italy Đây nơi nhà sáng lập dự án arduino gặp mặt để bắt đầu ý tưởng hình thành dự án Tên quán bar đặt theo tên người huy quân đội (như lãnh chúa thời phong kiến) Ivrea sau ông vua nước Italy từ năm 1002 đến năm 1014 Tại Arduino ? Hiện nay, Arduino sử dụng nhiều dự án nhiều lĩnh vực khác Chính đơn giản, dễ sử dụng đặc biệt mã nguồn phần cứng mở nên nhận hỗ trợ lớn từ lập trình viên tồn giới Phần mềm dễ cho người bắt đầu không thiếu linh hoạt cho lập trình viên lâu năm Cộng đồng Arduino lớn nên sử dụng với Arduino, theo cách nói vui bạn "support tới tận răng", có nghĩa vấn đề bạn gặp phải bây giờ, người dùng Arduino giới gặp phải, giải đưa thư viện tốt cho bạn, với cộng đồng lớn đặc biệt tất open-source nên dễ dàng bạn chọn Arduino thay tảng lập trình khác 8/188 Với người "ngoại đạo" (đề cập đến người khơng có nhiều kiến thức điện tử) Arduino thực tuyệt vời, giúp họ dễ dàng tạo sản phẩm liên quan đến điện tử Những kiến trúc sư, giáo viên, nghệ sĩ vài ngày để tạo sản phẩm điện tử nhằm phục vụ cho nhu cầu họ, việc trước dường bất khả thi Tuy nhiên, có câu hỏi đặt là: Nếu kỹ sư điện tử lập trình, có nên dùng Arduino cho dự án hay khơng? Bởi q đơn giản nhìn giống "đồ chơi trẻ con" ??? Đây chủ đề bàn luận sôi thật khó để tìm câu trả lời xác Arduino che phức tạp việc lập trình cho vi điều khiển cách phủ lên lớp "vỏ bọc" bên Chỉ vài câu lệnh đơn giản chớp, tắt LED với tảng lập trình khác, muốn làm chuyện bạn phải hiểu kiến trúc vi điều khiển, hiểu cách truy cập, setup giá trị bit ghi,… từ dùng tập lệnh để viết code điều khiển LED Và phức tạp, tinh vi tảng Arduino khơng thua thư viện nhà sản xuất, có làm cho người dùng cảm giác đơn giản Những người xây dựng tảng Arduino tạo lệnh vô đơn giản, giúp cho người dùng dễ tiếp cận Tuy nhiên cách học "những người nghề" không tốt muốn nắm rõ lập trình vi điều khiển đào sâu tìm hiểu Ví dụ, người làm việc lĩnh vực IT, muốn tạo hiệu ứng cho bóng đèn LED qua ứng dụng điện thoại Với họ, việc tạo ứng dụng điện thoại không thành vấn đề, liên quan đến điều khiển LED, cần kết nối board Arduino với LED, "google search" để tìm kiếm thư viện phù hợp, lấy hiệu ứng họ cần thư viện Việc đơn giản dùng Arduino Vấn đề họ giải thành công mà không cần biết nhiều kiến thức điện tử Tuy nhiên, vấn đề phát sinh là: muốn LED sáng mờ hơn, muốn tạo số hiệu ứng theo ý mình, tơi cần kết nối với cảm biến khác, tơi cần truyền, nhận liệu module mà kết hợp,… toán đặt trở nên thực phức tạp vượt tầm hiểu biết họ Lúc này, giá trị kĩ sư điện tử lập trình thể Để làm yêu cầu ấy, bạn phải hiểu rõ cách thức hoạt động vi điều khiển, chức năng, chuẩn truyền liệu,… để từ hiệu chỉnh lại thư viện có, tối ưu hóa tùy biến theo yêu cầu người dùng Câu hỏi đặt là: nhiều tảng lập trình khác làm điều này, đâu lợi ích Arduino ? Ích lợi đơn giản tập lệnh, cộng đồng lớn open-source Thư viện dành cho Arduino khơng q khó tìm, lệnh khơng q nhiều để học bạn phải hiểu hoạt động Để tìm hiểu sâu nó, người phát triển Arduino cung cấp cho thư viện Hardware Abstraction Library (gọi tắt HAL) dành cho muốn tìm hiểu sâu cách mà Arduino hoạt động IoT Maker Viet Nam Arduino cho người bắt đầu 9/188 Ví dụ, với Arduino, để bật bóng LED, dùng lệnh đơn giản pinMode(PIN_LED) lệnh digitalWrite(PIN_LED) với PIN_LED định nghĩa chân đấu nối với đèn LED ngồi thực tế Tìm hiểu chi tiết pinMode() hàm : • Nhằm cấu hình chân giống ngõ vào (input) ngõ (output), cấu hình ghi hướng liệu DDR (Data Direction Register), bit ghi DDR chân cấu hình input, giá trị bit output 10/188 • • Giá trị mặc định ban đầu bit (input) DDR tên gọi chung ghi chip ATmega328P, bao gồm ghi DDRB, DDRC, DDRD Các ghi liên quan đến chân chip ATmega328P (board Arduino Uno R3) bảng bên dưới: Hình Bảng ghi DDR tương ứng với chân board Arduino Uno R3 Tiếp theo, ATmega328P có ghi PORT để cài đặt giá trị cho bit, bit tương ứng với chân I/O chip ATmega328P Chân A0 - A5 chân Analog, chân D0 - D13 chân Digital Giá trị bit LOW (mức thấp, điện áp 0V DC), HIGH (mức cao, điện áp 5VDC) Giá trị mặc định ban đầu bit Hình Bảng ghi PORT tương ứng với chân board Arduino Uno R3 Như vậy, muốn cho chân từ D0 - D7 ngõ ta cần cài đặt DDRD = 0b00000000 (0b định dạng kiểu nhị phân, hiểu gán giá trị cho bit), cho chân mức HIGH cài đặt giá trị ghi PORTD = 0b11111111 Đó cách hoạt động chung cài đặt hướng setup giá trị cho chân GPIPO tảng lập trình Nếu bạn kĩ sư điện tử lập trình cách học nên theo hướng Một bạn hiểu cách hoạt động vi điều khiển sử dụng Arduino giúp xây dựng dự án cách nhanh chóng tập lệnh đơn giản để dùng IoT Maker Viet Nam 172/188 trang web học ESP8266 với Arduino phiên tiếng Anh: arduinoesp8266.readthedocs.io/en/latest/ Cảm biến DHT11 DHT11 cảm biến có khả đo nhiệt độ độ ẩm khơng khí với độ xác vừa phải, giá phải Có thể lấy liệu đo cảm biến giao thức 1-Wire Hình 127 Hình ảnh cảm biến DHT11 Thư viện hỗ trợ lấy liệu DHT11 Dựa theo chuẩn truyền nhận 1-Wire phổ biến dịng sensor DHTXX (DHT11, DHT22,…), có nhiều thư viện xây dựng lên để việc lập trình với DHT11 trở nên dễ dàng Trong cài đặt sử dụng thư viện DHT sensor library Adafruit Hình 128 Hình ảnh tìm kiếm cài đặt thư viện DHT11 Ngồi ra, để sử dụng thư viện DHT sensor library cần thêm thư viện Adafruit Unified Sensor Driver Sau tải thư viện về, bạn mở cửa sổ Arduino, chọn Sketch → Import Library… → Add Library… Sau chọn file zip mà bạn vừa tải để sử dụng thư viện IoT Maker Viet Nam Arduino cho người bắt đầu 173/188 Phân tích • Chúng ta kết nối ESP-01 với Board Arduino giao tiếp UART chân 10 11 ( Sử dụng thư viện SoftwareSerial.h) • ESP-01 hoạt động chế độ Access Point tạo điểm phát sóng WiFi để thiết bị khác truy cập vào • Thiết bị kết nối WiFi ESP-01 điều khiển giám sát thiết bị thơng qua trình duyệt WEB (Google Chrome, IE, Cốc Cốc, EAGLE) với đường dẫn (link) chức liệt kê bên dưới: ◦ IPAdress: Sẽ hiển thị nhiệt độ, độ ẩm ◦ IPAdress/LED=ON: Sẽ bật LED board ◦ IPAddress/LED=OFF: Sẽ tắt LED board Với IPAddress địa IP ESP-01 Thông số hiển thị SerialMonitor (Thông thường 192.168.4.1) Sơ đồ kết nối Bảng 25 Bảng đấu nối IoT Maker UnoX ESP-01 IoT Maker UnoX ESP-01 3V3 GND (Vcc) (GND) (RXD) (TXD) 3V3 (CH_PD) Bảng 26 Bảng đấu nối IoT Maker UnoX DHT11 IoT Maker UnoX DHT11 5V Vcc GND GND Data [dht11 esp01 unox] | 08-project/project-wifi/dht11-esp01-unox.png Hình 129 Hình ảnh kết nối cảm biến DHT11 ESP-01 với board IoT Maker UnoX 174/188 Source code IoT Maker Viet Nam Arduino cho người bắt đầu 175/188 Nội dung biến html đoạn code html chuyển qua kiểu string Chúng ta tìm hiểu HTML tại: w3schools.com Kết nối board với máy tính cổng COM, nạp chương trình Màn hình SerialMonitor hiển thị IPAddress bạn sau: 176/188 Chúng ta sử dụng IPAddress truy cập server để đọc nhiệt độ điểu khiển thiết bị Ví dụ điều khiển bật/tắt LED hình Tổng kết Sau hoàn thành dự án này, hiểu tổng quan cách kết nối, giao tiếp Arduino với ESP8266 đồng thời hiểu Web Server hoạt động Đây tảng để phát triển dự án IoT sau Cheatsheet Phần cung cấp thông tin cho việc tra cứu nhanh hàm sử dụng với Arduino ngơn ngữ lập trình C Với Arduino có nhiều thư viện cung cấp tính hữu ích thơng qua API cho phép người sử dụng gọi, nội dung tóm lược đề cập tới thư viện thường xuyên sử dụng Nếu bạn sử dụng thư viện khác, hồn tồn tra cứu dễ dàng tài liệu sử dụng thư viện Thông thường thư viện phát hành nguồn mở Github có file README.md cung cấp đầy đủ thông tin IoT Maker Viet Nam Arduino cho người bắt đầu Arduino Cheatsheet /* CẤU TRÚC CƠ BẢN CỦA SKETCH */ void setup() { /* Hàm gọi bắt đầu sketch Dùng để khởi tạo biến, cấu hình chân, gọi thư viện, Code setup chạy lần (khi khởi động reset board) */ } void loop() { // Nội dung loop() lặp lại liên tục } /* LỆNH RẺ NHÁNH */ /* Lệnh if else */ if (x < 5) // thực thi code x 10)// thực thi code x>10 { code } else { code } // thực thi code trường hợp lại /* Lệnh switch case */ switch (var) { // thực thi case có giá trị var case 1: {source code} break; case 2: {source code} break; default: {source code} } /* CÁC KIỂU VÒNG LẶP */ /* Vòng lặp while */ while (x < 5) { code }; /* Thực code x dịch phảii | or ~ not /* Thực thi với trỏ */ &reference: // lấy địa biến mà trỏ trỏ tới IoT Maker Viet Nam *dereference:// lấy giá trị biến mà trỏ trỏ tới /* HẰNG SỐ VÀ KIỂU DỮ LIỆU */ 123 Số thập phân 0b0111 Số nhị phân 0173 Số Octal - base 0x7B Số thập lục phân base 16 123U Số nguyên không dấu 123L Số ngun có dấu bytes 123UL Số ngun khơng dấu 4bytes 123.0 Số thực 1.23e6 Số thực dùng số mũ ex: 1.23*10^3 = 1230 /*PHẠM VI CỦA KIỂU DỮ LIỆU */ boolean true | false char -128 - 127, 'a' '$' etc unsigned char - 255 byte - 255 int -32768 32767 unsigned int 65535 word - 65535 long -2147483648 2147483647 unsigned long - 4294967295 float -3.4028e+38 - 3.4028e+38 double -3.4028e+38 - 3.4028e+38 void i.e., no return value /* KHAI BÁO BIẾN */ int a; int a = 0b01111011, b = 0123, c = 1, d; float fa = 1.0f; double da = 1.0; char *pointer; char *other_pointer = NULL; * * * /** BUILT-IN FUNCTIONS Pin Input/Output Digital I/O - pins 0-13 A0-A5 */ pinMode(pin,[INPUT, OUTPUT, INPUT_PULLUP]) /* Thiết lập cấu hình chân */ int a = digitalRead(pin_6); /* Đọc giá trị pin_6 gán cho a */ digitalWrite(pin_5, [HIGH, LOW]) /* Cài Arduino cho người bắt đầu 179/188 đặt mức HIGH/LOW cho pin_5 */ int a = analogRead(pin) /* Đọc giá trị pin gán cho a, pin từ A0 >A5 */ hóa tấ ngắt */ interrupts() /* Cho phép tái ngắt sau dùng noInterrupts() */ analogWrite(pin, value) /* PWM ngõ - pins 10 11 * ESP8266: pin 16, range = 1023, 1KHz default */ /* Đặt giá trị PWM cho pin */ analogWriteRange(new_range) /* ESP8266: thay đổi RANGE PWM output */ analogWriteFreq(new_frequency) /* ESP8266: Tần số PWM output */ / *************************************** ********** * THƯ VIỆN PHỔ BIẾN * /* ADVANCED I/O */ tone(pin, freq_Hz) /* Tạo sóng vuông tần số freq_Hz với duty cycle=50% */ tone(pin, freq_Hz, duration_ms) /* Tạo sóng vng tần số freq_Hz, duration mili giây */ noTone(pin) /* Ngừng việc tạo sóng vng dùng tone() */ shiftOut(dataPin, clockPin,[MSBFIRST, LSBFIRST], value) /* Dịch byte, lần dịch bit, dịch từ bit cao */ unsigned long pulseIn(pin,[HIGH, LOW]) /* Trả (ms) xung HIGH/LOW chân pin */ /* CHỨC NĂNG NGẮT */ attachInterrupt(interrupt, func, mode) /* Thiết lập chức ngắt chân digital */ /* interrupt: số ngắt (thường chân sử dụng chức ngắt) func : hàm gọi ngắt xảy (lưu ý : hàm khơng có tham số đầu vào kiểu trả về) mode : gồm chế độ LOW,CHANGE, RISING, FALLING Ngắt kích hoạt chân ngắt mode tương ứng */ detachInterrupt(interrupt) /* Vơ hiệu hóa ngắt interrupt */ noInterrupts() /* Vô hiệu *************************************** **********/ / *************************************** ********** * Serial * *Thư viện giao tiếp với PC thông qua RX/TX* *************************************** **********/ begin(long speed) /* Thiết lập giao tiếp serial-UART với tốc độ speed */ end() /* Vơ hiệu hóa giao tiếp serial */ int available() /* Trả số bytes có sẵn để đọc */ int read() /* đọc liệu đến từ serial (trả byte liệu từ serial -1 liệu khơng có */ flush() /* Chờ q trình truyền liệu serial hồn tất */ print(data) /* In serial port liệu data (với kiểu liệu thiết lập */ println(data) /* Tương tự print(data) sau in serial -port, trỏ xuống dòng */ write(byte) 180/188 /* Gửi liệu value/string/array đến serial port */ SerialEvent() /* Hàm gọi có liệu đến từ chân RX */ / *************************************** ********** * Servo.h * * Thư viện hỗ trợ điều khiển động servo * *************************** **********************/ attach(pin, [min_uS, max_uS]) /* Thiết lập chân kết nối với servo độ rộng xung pin : Chân kết nối với servo [min_uS, max_uS] : Độ rộng xung tính theo us tương ứng với góc xoay từ đến 180 */ write(angle) /* Ghi liệu góc xoay cho động angle từ 0~180 */ writeMicroseconds(uS) /* Viết giá trị để điều khiển góc quay cho servo, giá trị từ 700 ~ 2300 */ int read() /* Đọc giá trị góc xoay (0 đến 180 độ) */ bool attached() /* Trả true biến servo kết nối đến pin */ detach() /* Gỡ bỏ biến servo khỏi chân kết nối */ / ***************************************** ******** * Wire.h * * Dùng giao tiếp I2C * ************************* ************************/ IoT Maker Viet Nam begin() /* Master khởi tạo thư viện Wire với giao tiếp I2C */ begin(addr) /* Slave tham gia vào kết nối i2C, addr bits địa slave */ requestFrom(address, count, stop) /* Master yêu cầu số byte từ slave: address: 7bits địa slave count: Số lượng byte master yêu cầu stop: Kiểu boolean, true, master tín hiệu stop sau u cầu giải phóng bus I2C, false, master gửi yêu cầu restart để giữ kết nối */ beginTransmission(addr) /* Gửi tín hiệu bắt đầu, truyền liệu đến slave có địa addr */ send(byte) /* Gửi liệu (1 byte)đến slave */ send(char * string) /* Gửi liệu (string) đến slave */ send(byte * data, size) /* Gửi liệu (1 mảng ) với số byte size */ endTransmission() /* Gửi tín hiệu kết thúc truyền liệu tới slave */ int available() /* Trả số byte availabe sau đọc read() */ byte receive() /* truy xuất đến byte truyền từ slave đến master truyền chiều ngược lại nhận requestFrom Trả byte nhận */ onReceive(handler) /* Hàm handler gọi slave nhận liệu */ onRequest(handler) Arduino cho người bắt đầu /* Handler gọi master yêu cầu liệu */ C - Cheatsheet /* CẤU TRÚC CƠ BẢN */ Viết thích dịng dùng // ex: x++ ; // tăng x đơn vị /* */ Viết thích nhiều dịng ex : /************************* * Chú thích viết * * nhiều dòng * ************************/ /* CẤU TRÚC CHƯƠNG TRÌNH */ #include //include thư viện chuẩn C #include "iLib.h"// include thư viện tạo người dùng int global_var; //biến dùng chương trình /* Khai báo hàm bắt đầu chương trình C với kiểu trả integer Đối số arg kiểu int truyền vào hàm */ int main (int arg){ float local_var ; // Biến dùng hàm main Lệnh Lệnh n ; return 0; //chương trình thực thành cơng } /*KIỂU DỮ LIỆU VÀ PHẠM VI */ boolean true | false char -128 - 127, 'a' '$' etc unsigned char - 255 byte - 255 int -32768 32767 unsigned int - 65535 word - 65535 long -2147483648 - 2147483647 unsigned long - 4294967295 float -3.4028e+38 - 3.4028e+38 double -3.4028e+38 - 3.4028e+38 void i.e., no return value /* ĐẶT TÊN BIẾN */ /* Đặt tên */ int x; // Một biến int x = 1; // Biến khai báo khởi tạo float x, y, z; // Nhiều biến kiểu liệu const int x = 88; // Biễn tĩnh, không ghi int tenBien1ok; // Đặt tên biến int ten_bien_nay_ok; /* Đặt tên sai */ int 2001_tensai; // Vì số đầu int ten-sai; // 181/188 Dấu '-' alphanumberic int while; // Sai, dùng từ khóa vịng lặp while /* HẰNG SỐ VÀ KIỂU DỮ LIỆU */ 123 Số thập phân 0b0111 Số nhị phân 0173 Số Octal - base 0x7B Số thập lục phân base 16 123U Số ngun khơng dấu 123L Số ngun có dấu bytes 123UL Số nguyên không dấu 4bytes 123.0 Số thực 1.23e6 Số thực dùng số mũ ex: 1.23*10^3 = 1230 /* định nghĩa số a kiểu nguyên, có giá trị */ const int a = 1; /* Định nghĩa số x kiểu thực, có giá trị 4.0 */ const float x = 4; /* Định nghĩa số c kiểu integer có giá trị 49 */ const c = ‘1’; // Kí tự mã ASCII 49 /* Định nghĩa str số kiểu trỏ, trỏ tới chuỗi “Cheasheet C” */ const char * str = “Cheasheet C”; /* KHAI BÁO BIẾN */ /* Khai báo biến a kiểu nguyên không gán giá trị */ int a; /* khai báo a kiểu binary, b kiểu base8, c kiểu số nguyên, d kiểu số nguyên không gán giá trị */ int a = 0b01111011, b = 0123, c = 1, d; /* Khai báo biến fa thuộc kiểu số thực float */ float fa = 1.0f; /* Khai báo biến da thuộc kiểu số thực double */ double da = 1.0; /* Khai báo biến trỏ trỏ đến vùng nhớ không xác định */ char *pointer; /* Khai báo biến trỏ trỏ NULL (0)*/ char *other_pointer = NULL; /* CHUỖI KÍ TỰ */ /* Chuỗi bao gồm kí tự kết thúc chuỗi \0 (null) */ char str1[8] = {'A','r','d','u','i','n','o','\0'}; /* Trình biên dịch tự động thêm kí tự \0 vào cuối chuỗi */ char str2[8] = {'A','r','d','u','i','n','o'}; /* Khai báo chuỗi ,không khai báo số phần tử gán giá trị chuỗi */ char str3[] = "Arduino"; /* Khai báo gán giá trị cho chuỗi */ char str4[8] = "Arduino"; 182/188 /* Các hàm xử lí chuỗi thường dùng */ /* Nối kí tự từ chuỗi source tiếp vào vị trí cuối chuỗi dest */ strcat(dest, source) /* Tìm vị trí xuất kí tự c source, trả trỏ tới vị trí null khơng tìm thấy c source */ strchr(source, c) /* Hàm trả độ dài chuỗi st */ strlen(st) /* copy thay kí tự chuỗi soure vào dest */ strcpy(dest, source) /* chép kí tự từ đầu đến n từ chuỗi source vào dest */ strncpy(dest, source, n) /* MẢNG */ /* Khai báo mảng chiều phần tử kiểu integer gán giá trị cho phần tử */ int myPins[] = {2, 4, 8, 3, 6}; /* Khai báo mảng chiều phần tử kiểu integer không gán giá trị */ int myInts[6]; myInts[0] = 42; // Gán giá trị 42 cho phần tử myInts[6] = 12; // LỖI ! số mảng từ đến /* Lấy giá trị phần tử thứ mảng myInts */ int c = myInts[2]; // Có thể dùng *(myInts + 2) /* Lấy địa phần tử thứ mảng myInts */ int c = &myInts[2]; // Có thể dùng int c = myInts + int /* Trả chiều dài mảng myInts */ int length = sizeof(myInts) / sizeof(myInts[0]); /* Khai báo mảng kiểu float, arr1 có phần tử, arr2 có 10 phần tử */ float arr1[5], arr2[10]; /* Khai báo mảng số nguyên arr có dịng, cột Tổng cộng có 10 phần tử */ int a[2][5]; /* KHỐI LỆNH VÀ CÁC LỆNH DÙNG TRONG VÒNG LẶP */ {} // bao gồm nhiều lệnh, thường sử dụng h àm /* Goto : chương trình nhảy đến nhãn (nhãn phải có mặt câu lệnh chứa goto) */ goto nhãn; /* Continue : Chỉ dùng lệnh có vịng lặp chuyển qua chu kì vịng lặp */ continue; /* /* Break : Dùng với vịng lặp khỏi vịng lặp nhất, dùng cấu trúc switch case để thoát khỏi case tương ứng */ break; /* /* Return */ IoT Maker Viet Nam /* Dùng cho hàm khơng có kiểu trả (void) */ return; /* Value số, biến, biểu thức gọi đến hàm khác để trả giá trị */ return ; /* LỆNH RẺ NHÁNH */ if (x < 5) // thực thi code x 10)// thực thi code x>10 { code } else { code } // thực thi code trường hợp lại switch (var) { // thực thi case có giá trị var case 1: break; case 2: break; default: } /* CÁC KIỂU VÒNG LẶP */ /* While: Thực code x dịch phảii | or ~ not /* THỰC THI VỚI CON TRỎ */ &reference: // lấy địa biến mà trỏ trỏ tới *dereference:// lấy giá trị biến mà trỏ trỏ tới /* khai báo biến trỏ kiểu int trỏ tới địa biến a */ int a = 5; int *pointer = &a; /* CÁC KÍ TỰ ĐIỀU KHIỂN VÀ KÍ TỰ ĐẶC BIỆT */ \n Nhảy xuống dòng canh cột \t Canh cột tab ngang \r Nhảy đầu hàng, không xuống hàng \a Tiếng kêu bip \\ In dấu \ \" In dấu " \' In dấu ' %%: In dấu % \b ~ backspace (xóa ký tự trước) /* HÀM VÀ CÁC VẤN ĐỀ LIÊN QUAN */ /* Khai báo prototype hàm max, có đối số đầu vào a b thuộc kiểu số nguyên, kết trả hàm kiểu số nguyên */ int max(int a, int b); /* Khai báo biến c giá trị trả hàm max */ int c = max(5,4); /* Khai báo prototype hàm khơng có đối số khơng có kiểu trả (void) */ void none(); 183/188 /* TYPEDEF- Định nghĩa kiểu liệu */ /* Định nghĩa kiểu unsigned char BYTE, khai báo biến a, b thuộc kiểu BYTE */ typedef unsigned char BYTE; BYTE a, b; /* KIỂU LIỆT KÊ - ENUMERATION (enum) */ /* khai báo kiểu liệu enum ngày tuần */ enum daysOfWeek { sunday, monday, tuesday, wednesday }; /* Tạo biến toDay thuộc daysOfWeek gán giá trị */ daysOfWeek toDay = wednesday; /* STRUCT - KIỂU DỮ LIỆU DO NGƯỜI DÙNG ĐỊNH NGHĨA */ /* Khai báo struct sinhVien */ struct sinhVien{ char tenSinhVien; char MSSinhVien; int tuoiSinhVien; }; /* Truy xuất đến thành phần MSSinhVien struct sinhVien */ sinhVien.MSSinhVien; /* Đổi tên struct sinhVien thành biến SINHVIEN */ typedef struct sinhVien SINHVIEN; /* Khai báo biến sinhVienA thuộc struct SINHVIEN */ SINHVIEN sinhVienA; /* CÁC LỆNH XỬ LÝ TẬP TIN (#include ) */ /* Khai báo biến trỏ đường dẫn file */ const char *filePath = "Đường/dẫn/file/document.txt"; /* Tạo biến trỏ thuộc kiểu FILE */ FILE *file; /* Mở file đường dẫn filePath đọc liệu */ file = fopen(filePath, "r");// Trả NULL thất bại /* Đóng file mở, trả thành công , ngược lại trả EOF */ fclose(file); /* Viết kí tự c lên file mở, trả EOF ghi thất bại, trả mã ASCII c thành công */ int fputc(int c, FILE *f); /* Viết chuỗi "hello" lên file mở */ int c = fputs("hello", file); /* Đọc (255-1) kí tự từ file mở, kết đọc 184/188 lưu vào mảng str, việc đọc bị dừng gặp kí tự '\n' EOL */ fgets(str, 255, file); /* Thay đổi vị trí trỏ đến file trỏ internal file position indicator lại đầu file */ int fseek(file, 0, SEEK_SET); /* Trả kích thước nội dung có file */ ftell(file); www.cheatography.com/ashlyn-black/cheatsheets/c-reference/ Lời kết IoT Maker Viet Nam Arduino cho người bắt đầu Các thành viên tham gia đóng góp Để hồn thiện nội dung sách có đóng góp thành viên sau: • Phạm Minh Tuấn (TuanPM) - Chủ biên • Trịnh Hoàng Đức - Kĩ sư thiết kế phần cứng IoT Maker Việt Nam • Trần Phúc Vinh - Thực tập sinh IoT Maker Việt Nam - Sinh viên Đại Học Bách Khoa, chuyên ngành kĩ thuật điện, khóa học 2014 • Phạm Thị Thu Hiền - Designer IoT Maker Việt Nam • Võ Trí Dũng - Thực tập sinh IoT Maker Việt Nam, sinh viên Đại Học Sài Gòn, chuyên ngành điện tử máy tính, khóa học 2014 • Nguyễn Minh Phương - Thực tập sinh IoT Maker Việt Nam, sinh viên Đại Học Sài Gòn, chuyên ngành điện tử máy tính , khóa học 2014 • Đặng Quang Trung - Thực tập sinh IoT Maker Việt Nam, sinh viên Đại Học Sài Gòn, chuyên ngành điện tử máy tính, khóa học 2014 • Lâm Nhật Quân Kĩ sư làm việc IoT Maker Việt Nam • Trần Thanh Lộc - Thực tập sinh IoT Maker Việt Nam - Sinh viên Đại Học Bách Khoa, chun ngành kỹ thuật máy tính, khóa học 2016 Lời kết Thật vui bạn đồng hành đến hết sách Mục đích sách 185/188 giúp người bắt đầu tìm hiểu Arduino có kiến thức hướng xác để nghiên cứu lập trình vi điều khiển cách nhanh chóng Hi vọng sách đến tay thật nhiều bạn đam mê lĩnh vực điện tử lập trình khơng mẻ tiềm Chúc bạn thành cơng đường mà chọn Mặc dù cố gắng để hoàn thành tốt nội dung cho sách, nhiên không tránh khỏi thiếu sót Các bạn đóng góp ý kiến để nội dung ebook hoàn thiện địa Github IoT Maker Viet Nam 186/188 Giấy phép sử dụng tài liệu creativecommons.org/licenses/by-nc-sa/4.0/ IoT Maker Viet Nam .. .Arduino cho người bắt đầu IoT Maker Viet Nam Mục lục Arduino cho người bắt đầu 3/188 Lời mở đầu Trong thời đại công nghệ phát triển vũ bão nay, mảng điện tử lập trình, việc dùng Arduino. .. nó, người phát triển Arduino cung cấp cho thư viện Hardware Abstraction Library (gọi tắt HAL) dành cho muốn tìm hiểu sâu cách mà Arduino hoạt động IoT Maker Viet Nam Arduino cho người bắt đầu. .. Serial monitor: Cho phép truyền nhận liệu board thông qua USB cable • Help: Cung cấp hướng dẫn để bắt đầu lập trình Arduino Web Editor IoT Maker Viet Nam Arduino cho người bắt đầu • 23/188 Preferences:

Ngày đăng: 28/06/2021, 08:29

Mục lục

    Đôi lời về tác giả

    Thuật ngữ hay sử dụng

    Giải thích code trong bài

    Giới thiệu nội dung

    Ai có thể sử dụng?

    Mục tiêu mang lại cho người đọc

    Kiến thức cơ bản

    Những board mạch Arduino trên thị trường

    Giới thiệu về vi điều khiển ATmega328

    Giới thiệu board IoT Maker UnoX và IoT Arduino STEM Kit

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan