Hướng dẫn lập trình PIC với Arduino Giảng viên: Triệu Việt Linh Hà Nội, năm 2021 Mục lục LỜI NÓI ĐẦU 7 Hour 5. Học kiến thức cơ bản về C 8 Làm việc với biến 8 Khai báo biến 8 Xác định giá trị cho biến 9 Hiểu các kiểu dữ liệu 10 Định tính biến 11 Phạm vi của biến 12 Sử dụng toán tử 12 Các toán tử toán học chuẩn 13 Sử dụng toán tử phức hợp 14 Thứ tự thực hiện các phép toán 14 Khám phá các hàm của Arduino 15 Sử dụng đầu ra nối tiếp 15 Làm việc với thời gian 17 Thực hiện các phép toán nâng cao 17 Tạo số ngẫu nhiên 18 Sử dụng thao tác với bit 19 Tổng kết 19 Hour 6. Các lệnh có cấu trúc 20 Làm việc với Câu lệnh if 20 Nhóm nhiều câu lệnh 21 Sử dụng các câu lệnh khác 23 Sử dụng câu lệnh else if 24 Hiểu các điều kiện so sánh 25 So sánh số 25 So sánh Boolean 26 Tạo điều kiện kép 27 Yêu cầu kiểm tra tình trạng 27 3 Tóm lược 29 Hour 7. Vòng lặp lập trình 30 Hiểu các vòng lặp 30 Sử dụng vòng lặp while 31 Sử dụng vòng lặp do-while 32 Sử dụng cho các vòng lặp 34 Sử dụng mảng trong vòng lặp của bạn 35 Tạo Mảng 35 Sử dụng vòng lặp với mảng 36 Xác định kích thước của một mảng 37 Sử dụng nhiều biến 38 Vòng lặp làm tổ 38 Tóm lược 41 2. Giới thiệu 42 2.1 Phương pháp phát triển phần mềm 42 2.2 Phần cứng được hỗ trợ 43 3. Cài đặt phần mềm 45 3.1 Cài đặt lần đầu 46 3.2 Cập nhật lên phiên bản mới 47 5. Bắt đầu với Logic bậc thang 49 5.1 Đầu vào và đầu ra bit đơn 50 5.2 Thực hiện các phép toán Boolean 52 6. Đầu ra chốt 57 6.1 Chốt với các thành phần rời rạc 57 6.2 Sử dụng lệnh Latch 59 7. Xung kích hoạt cạnh 62 7.1 Tạo một bảng tin được kích hoạt cạnh 64 8. Nhập từ bàn phím 65 8.1 Kết nối phần cứng 66 8.2 Phần mềm 68 4 9. Thời gian trễ sử dụng 70 9.1 Tạo ra độ trễ khi bật 70 9.2 Chuyển đổi Debouncing 72 9.3 Tạo độ trễ khi tắt máy 73 Hình 28. Độ trễ tắt làm cho đầu ra vẫn hoạt động trong một khoảng thời gian cố định sau khi đầu vào bị loại bỏ. 73 9.4 Tạo xung thời lượng cố định 74 10. Tạo ra các dạng sóng lặp lại 76 10.1 Tạo xung thủ công 76 10.2 Sử dụng lệnh timerCycle() 77 11.1. Bộ đếm lên 79 11.3 Bộ đếm lên / xuống 81 11.4 Gỡ lỗi ứng dụng dựa trên bộ đếm 82 12 Dịch chuyển và xoay dữ liệu nhị phân 84 12.1 Tạo và sử dụng sổ đăng ký Shift 84 12.2 Rotaing Data 87 13 Làm việc với Analogue Signals 91 13.1 Kiểm soát độ sáng của đèn LED bằng PWM 91 13.2 Kiểm soát tốc độ và hướng của động cơ 91 14 Kiểm soát vị trí bằng Servos 94 15 So sánh các giá trị tương tự 95 15.1 So sánh các giá trị tương tự dựa trên phần mềm 95 15.2 Một ứng dụng so sánh đơn giản 96 16 Lập trình danh sách lệnh 98 17 Sơ đồ khối chức năng 99 17.2 Xây dựng hệ thống làm việc 99 17.2 Ứng dụng 1: Một báo động đơn giản 100 17.3 Ứng dụng 2: Báo động bằng nhấp nháy “ Armed “ LED 101 18 Biểu đồ hàm tuần tự 105 18.1 Tạo chuỗi 105 18.2 Phân nhánh và hội tụ 108 5 19 Phát triển các ứng dụng dựa trên SFC định thời 110 19.1 Chuyển đổi cơ sở thời gian 110 19.2. Ứng dụng 1: Điều khiển đèn giao thông 112 19.3. Ứng dụng 2: Màn hình ánh sáng chạy 114 20. Văn bản có cấu trúc 118 20.1 Sử dụng cấu trúc chương trình 119 21. Các khái niệm nâng cao 120 21.1. Cách phần mềm hoạt động 120 21.2 Sử dụng biến trong chương trình 121 21.3. Làm việc với các biến tùy chỉnh 123 21.4. Sử dụng các biến với mạch logic phức tạp 123 22. Lưu trữ và Logic dựa trên ngăn xếp 124 22.1 Hoạt động lôgic khối 126 23. Xác định Phân bổ IO Tùy chỉnh 128 23.1 Phân bổ I / O được cấu hình sẵn 128 23.2 Nghiên cứu điển hình: Tạo Phân bổ IO Tùy chỉnh 128 24. Điểm mạnh và Hạn chế của Phần mềm 131 25. Tham chiếu lệnh 132 25.1 Cấu hình chung 132 25.2 Đầu vào / đầu ra kỹ thuật số một bit 132 25.3 Logic kết hợp 132 25.4 Đầu vào / đầu ra tín hiệu tương tự 132 25.5 So sánh các tín hiệu tương tự 133 25.6 Chốt 133 25.7 Bộ hẹn giờ 133 25.8 Xung kích hoạt cạnh 134 25.9 Bộ đếm 134 25.10 Dịch chuyển vị trí thanh ghi 135 25.11 Logic ngăn xếp và khối 135 Kết Luận 136 6 LỜI NÓI ĐẦU Tự động hóa, robot hóa là xu hướng của nhân loại ngày nay. Từ ngàn xưa, con người luôn ước ao có những cỗ máy để làm việc thay thế mình. Trong thời đại hiện nay, với sự phát triển mạnh mẽ của khoa học kỹ thuật, con người đã dần tạo ra những máy móc thông minh, giúp mình từ các công việc thường ngày đến những công việc khó khăn nguy hiểm. Các máy tự động, các robot thông minh, tự hành do con người tạo nên không chỉ tồn tại ở trái đất mà còn có mặt tại mặt trăng, sao hỏa, trong không gian. Đi cùng với nhịp điệu phát triển của khoa học kỹ thuật trên thế giới, người Việt Nam cũng đang rất nỗ lực trong nghiên cứu khoa học kỹ thuật, đặc biệt là trong lĩnh vực tự động hóa, robot hóa, phục vụ cho đời sống hàng ngày, cho công cuộc xây dựng và bảo vệ đất nước Việt Nam thân yêu. Sự nỗ lực đó đã giúp cho người Việt dần nắm bắt, làm chủ các công nghệ tiến tiến trên thế giới, từ xây cầu dây văng đến làm hầm Sài Gòn và hiện nay là thực hiện công trình tàu điện ngầm tại Việt Nam. Người Việt với sự cần cù sáng tạo và tình yêu quê hương đất nước mạnh mẽ, cùng vị trí địa lý chiến lược của quốc gia nhất định sẽ thực hiện thành công sự nghiệp công nghiệp hóa, hiện đại hóa của mình và nhất định trong tương lai gần sẽ bắt kịp các nước phát triển trong khu vực về khoa học và kỹ thuật. Sự ra đời của mạch Arduino thúc đẩy sự yêu thích, tìm tòi nghiên cứu, ứng dụng tự động hóa , robot hóa vào đời sống và công nghiệp. Với những ưu điểm riêng của mình, Arduino đã nhanh chóng nổi tiếng toàn thế giới và được giới học sinh, sinh viên, giới nghiên cứu, những người yêu thích kỹ thuật, những người thích làm đồ tự chế sử dụng rộng rãi. Tại Việt Nam, số lượng người sử dụng mạch Arduino ngày càng tăng. Để đáp ứng nhu cầu tìm hiểu Arduino, tài liệu này đã được biên soạn. Tài liệu gồm có 6 phần, chủ yếu đáp ứng nhu cầu tự học của các bạn mới bắt đầu tìm hiểu về Arduino. Tài liệu được viết một cách ngắn gọn, dễ hiểu, đi vào những vấn đề cốt lõi trong việc sử dụng Arduino cho cuộc sống. 7 Hour 5. Học kiến thức cơ bản về C Những gì bạn sẽ học trong chương này : • Cách lưu trữ dữ liệu phác thảo của bạn trong các biến • Cách sử dụng biến trong các phép toán • Cách xuất giá trị biến vào cổng nối tiếp Arduino • Cách sử dụng một số hàm Arduino C tích hợp sẵn Chương này trước tiên sẽ đi sâu vào kiến thức cơ bản về ngôn ngữ lập trình C, nền tảng của ngôn ngữ lập trình Arduino. Đầu tiên ta khám phá cách lưu trữ dữ liệu trong bản nháp của bạn bằng cách sử dụng các biến. Sau đó, ta thảo luận về cách thực hiện các phép toán số học đơn giản trong các bản nháp của bạn. Kết thúc chương bằng cách xem qua một số hàm phổ biến trong thư viện Arduino tiêu chuẩn mà bạn có thể sử dụng. Làm việc với biến Trong giờ thứ 2, “Khởi tạo môi trường lập trình Arduino,” ngôn ngữ lập trình Arduino cung cấp giao diện thann thiện với người sử dụng để viết chương trình cho cho vi điều khiển ATmega cơ bản trên Arduino. Một trong số những giao diện đó là cách dữ liệu được lưu trong bộ nhớ. Thay vì phải tham chiếu các vị trí bộ nhớ cụ thể để lưu trữ dữ liệu chương trình của bạn ( như bạn làm ở ngôn ngữ lập trình bậc thấp), ngôn ngữ lập trình Arduino sử dụng các biến đơn giản để đại diện cho các vị trí bộ nhớ để lưu trữ dữ liệu. Phần này thảo luận cách sử dụng các biến đó trong bản nháp Arduino để lưu trữ và khôi phục dữ liệu của bạn . Khai báo biến Vì ngôn ngữ lập trình Arduino được xây dựng trên ngôn ngữ lập trình C , nó sử dụng định dạng chuẩn của ngôn ngữ C để tạo và sử dụng các biến. Trong ngôn ngữ C, tạo biến gồm 2 bước: 1. Khai báo biến để sử dụng trong bản nháp. 2. Gán giá trị dữ liệu cho biến. Khi khai báo biến, trình biên dịch ngôn ngữ C lưu trữ tên biến, cùng với một số thông tin khác, trong một bảng nội. Bảng này cho phép trình biên dịch biết chương trình dùng biến nào và sử dụng bao niêu bộ nhớ khi bạn chạy chương trình. Tuy nhiên, khi bạn khai báo một biến, trình biên dịch vẫn chưa thực sự gán biến đó vào một vị trí cụ thể trong bộ nhớ hệ thống; phần đó sẽ đến sau. Để khai báo một biến, bạn chỉ cần xác định kiểu dữ liệu mà biến đó sẽ lưu trữ và tên biến trong một câu lệnh, như sau 8 datatype variablename; Phần datatype xác định loại dữ liệu mà biến sẽ lưu trữ. Ngôn ngữ lập trình C sử dụng cái được gọi là nhập nghiêm ngặt (strict typing) bắt buộc bạn phải khai báo loại dữ liệu mà mỗi biến sẽ chứa. Một khi bạn đã khai báo kiểu dữ liệu cho một biến, bạn chỉ có thể lưu trữ loại dữ liệu đó trong biến (tìm hiểu thêm ở phần “Hiểu các loại dữ liệu” phía sau). Phần variablename xác định nhãn mà bạn sẽ sử dụng để tham chiếu vị trí đó trong bộ nhớ từ bên trong bản nháp của bạn. Ví dụ, để khai báo một biến dữ liệu số nguyên, bạn sử dụng như sau: int pin; Bạn phải tuân theo một số quy tắc khi khai báo tên biến trong C: • Tên biến chỉ được chứa các chữ cái, số, dấu gạch dưới hoặc ký hiệu đô la. • Tên biến phải bắt đầu bằng một chữ cái. • Tên biến có phân biệt chữ hoa chữ thường. • Không có giới hạn cho độ dài tên biến. Vì không có giới hạn về độ dài của tên biến, bạn nên sử dụng các tên biến có ý nghĩa cho dữ liệu trong bản phác thảo của mình. Ví dụ, bạn sử dụng các tên biến như pin, blinkrate, speed sẽ tốt hơn là tên chung chung như A, B, C. Việc đó sẽ giúp việc kiểm tra lỗi dễ dàng hơn và nó giúp bạn nhớ những gì mỗi biến thực hiện nếu bạn phải quay lại bản nháp của mình vài tháng sau. Một phương pháp phổ biến khác cũng được các nhà phát triển Arduino sử dụng là một phương pháp được gọi là camelCase. CamelCase kết hợp hai hoặc nhiều từ trong một tên biến, viết hoa chữ cái đầu tiên của mỗi từ, ngoại trừ từ đầu tiên, như sau: int blinkRateSetting; Điều đó làm cho việc đọc và nhận ra tên biến gồm nhiều từ dễ dàng hơn một chút. Như bạn có thể mong đợi, mỗi tên biến mà bạn khai báo trong bản nháp của mình phải là duy nhất. Bạn không thể khai báo hai biến có cùng tên; nếu không, bạn sẽ nhận được thông báo lỗi trong cửa sổ bảng điều khiển IDE khi bạn cố gắng biên dịch bản nháp của mình. Xác định giá trị cho biến Phần thứ hai của quá trình là gán giá trị cho biến đã khai báo. Để gán giá trị cho một biến, bạn sử dụng toán tử gán, trong ngôn ngữ C là một dấu bằng: blinkRateSetting = 10;
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN - - ĐỒÁNI Đề tài: Hướng dẫn lập trình PIC với Arduino Giảng viên: Triệu Việt Linh Hà Nội, năm 2021 Mục lục LỜI NÓI ĐẦU Hour Học kiến thức C Làm việc với biến Khai báo biến .8 Xác định giá trị cho biến Hiểu kiểu liệu 10 Định tính biến 11 Phạm vi biến 12 Sử dụng toán tử 12 Các toán tử toán học chuẩn 13 Sử dụng toán tử phức hợp 14 Thứ tự thực phép toán 14 Khám phá hàm Arduino 15 Sử dụng đầu nối tiếp 15 Làm việc với thời gian .17 Thực phép toán nâng cao 17 Tạo số ngẫu nhiên 18 Sử dụng thao tác với bit .19 Tổng kết .19 Hour Các lệnh có cấu trúc 20 Làm việc với Câu lệnh if 20 Nhóm nhiều câu lệnh 21 Sử dụng câu lệnh khác 23 Sử dụng câu lệnh else if 24 Hiểu điều kiện so sánh 25 So sánh số 25 So sánh Boolean 26 Tạo điều kiện kép 27 Yêu cầu kiểm tra tình trạng 27 Tóm lược 29 Hour Vòng lặp lập trình .30 Hiểu vòng lặp 30 Sử dụng vòng lặp while .31 Sử dụng vòng lặp do-while 32 Sử dụng cho vòng lặp 34 Sử dụng mảng vòng lặp bạn 35 Tạo Mảng 35 Sử dụng vòng lặp với mảng .36 Xác định kích thước mảng 37 Sử dụng nhiều biến 38 Vòng lặp làm tổ 38 Tóm lược 41 Giới thiệu 42 2.1 Phương pháp phát triển phần mềm 42 2.2 Phần cứng hỗ trợ 43 Cài đặt phần mềm 45 3.1 Cài đặt lần đầu .46 3.2 Cập nhật lên phiên 47 Bắt đầu với Logic bậc thang 49 5.1 Đầu vào đầu bit đơn 50 5.2 Thực phép toán Boolean 52 Đầu chốt 57 6.1 Chốt với thành phần rời rạc 57 6.2 Sử dụng lệnh Latch 59 Xung kích hoạt cạnh 62 7.1 Tạo bảng tin kích hoạt cạnh 64 Nhập từ bàn phím 65 8.1 Kết nối phần cứng 66 8.2 Phần mềm 68 Thời gian trễ sử dụng 70 9.1 Tạo độ trễ bật 70 9.2 Chuyển đổi Debouncing 72 9.3 Tạo độ trễ tắt máy 73 Hình 28 Độ trễ tắt làm cho đầu hoạt động khoảng thời gian cố định sau đầu vào bị loại bỏ 73 9.4 Tạo xung thời lượng cố định .74 10 Tạo dạng sóng lặp lại 76 10.1 Tạo xung thủ công .76 10.2 Sử dụng lệnh timerCycle() .77 11.1 Bộ đếm lên 79 11.3 Bộ đếm lên / xuống 81 11.4 Gỡ lỗi ứng dụng dựa đếm 82 12 Dịch chuyển xoay liệu nhị phân 84 12.1 Tạo sử dụng sổ đăng ký Shift .84 12.2 Rotaing Data 87 13 Làm việc với Analogue Signals 91 13.1 Kiểm soát độ sáng đèn LED PWM 91 13.2 Kiểm soát tốc độ hướng động 91 14 Kiểm soát vị trí Servos 94 15 So sánh giá trị tương tự 95 15.1 So sánh giá trị tương tự dựa phần mềm .95 15.2 Một ứng dụng so sánh đơn giản 96 16 Lập trình danh sách lệnh 98 17 Sơ đồ khối chức .99 17.2 Xây dựng hệ thống làm việc 99 17.2 Ứng dụng 1: Một báo động đơn giản .100 17.3 Ứng dụng 2: Báo động nhấp nháy “ Armed “ LED .101 18 Biểu đồ hàm 105 18.1 Tạo chuỗi 105 18.2 Phân nhánh hội tụ .108 19 Phát triển ứng dụng dựa SFC định thời 110 19.1 Chuyển đổi sở thời gian 110 19.2 Ứng dụng 1: Điều khiển đèn giao thông 112 19.3 Ứng dụng 2: Màn hình ánh sáng chạy 114 20 Văn có cấu trúc .118 20.1 Sử dụng cấu trúc chương trình 119 21 Các khái niệm nâng cao 120 21.1 Cách phần mềm hoạt động .120 21.2 Sử dụng biến chương trình .121 21.3 Làm việc với biến tùy chỉnh .123 21.4 Sử dụng biến với mạch logic phức tạp .123 22 Lưu trữ Logic dựa ngăn xếp 124 22.1 Hoạt động lôgic khối .126 23 Xác định Phân bổ IO Tùy chỉnh 128 23.1 Phân bổ I / O cấu hình sẵn 128 23.2 Nghiên cứu điển hình: Tạo Phân bổ IO Tùy chỉnh 128 24 Điểm mạnh Hạn chế Phần mềm 131 25 Tham chiếu lệnh 132 25.1 Cấu hình chung 132 25.2 Đầu vào / đầu kỹ thuật số bit 132 25.3 Logic kết hợp 132 25.4 Đầu vào / đầu tín hiệu tương tự 132 25.5 So sánh tín hiệu tương tự 133 25.6 Chốt 133 25.7 Bộ hẹn 133 25.8 Xung kích hoạt cạnh 134 25.9 Bộ đếm 134 25.10 Dịch chuyển vị trí ghi 135 25.11 Logic ngăn xếp khối 135 Kết Luận 136 LỜI NĨI ĐẦU Tự động hóa, robot hóa xu hướng nhân loại ngày Từ ngàn xưa, người ln ước ao có cỗ máy để làm việc thay Trong thời đại nay, với phát triển mạnh mẽ khoa học kỹ thuật, người dần tạo máy móc thơng minh, giúp từ cơng việc thường ngày đến cơng việc khó khăn nguy hiểm Các máy tự động, robot thông minh, tự hành người tạo nên không tồn trái đất mà cịn có mặt mặt trăng, hỏa, không gian Đi với nhịp điệu phát triển khoa học kỹ thuật giới, người Việt Nam nỗ lực nghiên cứu khoa học kỹ thuật, đặc biệt lĩnh vực tự động hóa, robot hóa, phục vụ cho đời sống hàng ngày, cho công xây dựng bảo vệ đất nước Việt Nam thân yêu Sự nỗ lực giúp cho người Việt dần nắm bắt, làm chủ công nghệ tiến tiến giới, từ xây cầu dây văng đến làm hầm Sài Gòn thực cơng trình tàu điện ngầm Việt Nam Người Việt với cần cù sáng tạo tình yêu quê hương đất nước mạnh mẽ, vị trí địa lý chiến lược quốc gia định thực thành công nghiệp công nghiệp hóa, đại hóa định tương lai gần bắt kịp nước phát triển khu vực khoa học kỹ thuật Sự đời mạch Arduino thúc đẩy yêu thích, tìm tịi nghiên cứu, ứng dụng tự động hóa , robot hóa vào đời sống cơng nghiệp Với ưu điểm riêng mình, Arduino nhanh chóng tiếng toàn giới giới học sinh, sinh viên, giới nghiên cứu, người yêu thích kỹ thuật, người thích làm đồ tự chế sử dụng rộng rãi Tại Việt Nam, số lượng người sử dụng mạch Arduino ngày tăng Để đáp ứng nhu cầu tìm hiểu Arduino, tài liệu biên soạn Tài liệu gồm có phần, chủ yếu đáp ứng nhu cầu tự học bạn bắt đầu tìm hiểu Arduino Tài liệu viết cách ngắn gọn, dễ hiểu, vào vấn đề cốt lõi việc sử dụng Arduino cho sống Hour Học kiến thức C Những bạn học chương : • • • • Cách lưu trữ liệu phác thảo bạn biến Cách sử dụng biến phép toán Cách xuất giá trị biến vào cổng nối tiếp Arduino Cách sử dụng số hàm Arduino C tích hợp sẵn Chương trước tiên sâu vào kiến thức ngơn ngữ lập trình C, tảng ngơn ngữ lập trình Arduino Đầu tiên ta khám phá cách lưu trữ liệu nháp bạn cách sử dụng biến Sau đó, ta thảo luận cách thực phép toán số học đơn giản nháp bạn Kết thúc chương cách xem qua số hàm phổ biến thư viện Arduino tiêu chuẩn mà bạn sử dụng Làm việc với biến Trong thứ 2, “Khởi tạo mơi trường lập trình Arduino,” ngơn ngữ lập trình Arduino cung cấp giao diện thann thiện với người sử dụng để viết chương trình cho cho vi điều khiển ATmega Arduino Một số giao diện cách liệu lưu nhớ Thay phải tham chiếu vị trí nhớ cụ thể để lưu trữ liệu chương trình bạn ( bạn làm ngơn ngữ lập trình bậc thấp), ngơn ngữ lập trình Arduino sử dụng biến đơn giản để đại diện cho vị trí nhớ để lưu trữ liệu Phần thảo luận cách sử dụng biến nháp Arduino để lưu trữ khôi phục liệu bạn Khai báo biến Vì ngơn ngữ lập trình Arduino xây dựng ngơn ngữ lập trình C , sử dụng định dạng chuẩn ngôn ngữ C để tạo sử dụng biến Trong ngôn ngữ C, tạo biến gồm bước: Khai báo biến để sử dụng nháp Gán giá trị liệu cho biến Khi khai báo biến, trình biên dịch ngơn ngữ C lưu trữ tên biến, với số thông tin khác, bảng nội Bảng cho phép trình biên dịch biết chương trình dùng biến sử dụng bao niêu nhớ bạn chạy chương trình Tuy nhiên, bạn khai báo biến, trình biên dịch chưa thực gán biến vào vị trí cụ thể nhớ hệ thống; phần đến sau Để khai báo biến, bạn cần xác định kiểu liệu mà biến lưu trữ tên biến câu lệnh, sau datatype variablename; Phần datatype xác định loại liệu mà biến lưu trữ Ngôn ngữ lập trình C sử dụng gọi nhập nghiêm ngặt (strict typing) bắt buộc bạn phải khai báo loại liệu mà biến chứa Một bạn khai báo kiểu liệu cho biến, bạn lưu trữ loại liệu biến (tìm hiểu thêm phần “Hiểu loại liệu” phía sau) Phần variablename xác định nhãn mà bạn sử dụng để tham chiếu vị trí nhớ từ bên nháp bạn Ví dụ, để khai báo biến liệu số nguyên, bạn sử dụng sau: int pin; Bạn phải tuân theo số quy tắc khai báo tên biến C: • • • • Tên biến chứa chữ cái, số, dấu gạch ký hiệu đô la Tên biến phải bắt đầu chữ Tên biến có phân biệt chữ hoa chữ thường Khơng có giới hạn cho độ dài tên biến Vì khơng có giới hạn độ dài tên biến, bạn nên sử dụng tên biến có ý nghĩa cho liệu phác thảo Ví dụ, bạn sử dụng tên biến pin, blinkrate, speed tốt tên chung chung A, B, C Việc giúp việc kiểm tra lỗi dễ dàng giúp bạn nhớ biến thực bạn phải quay lại nháp vài tháng sau Một phương pháp phổ biến khác nhà phát triển Arduino sử dụng phương pháp gọi camelCase CamelCase kết hợp hai nhiều từ tên biến, viết hoa chữ từ, ngoại trừ từ đầu tiên, sau: int blinkRateSetting; Điều làm cho việc đọc nhận tên biến gồm nhiều từ dễ dàng chút Như bạn mong đợi, tên biến mà bạn khai báo nháp phải Bạn khơng thể khai báo hai biến có tên; không, bạn nhận thông báo lỗi cửa sổ bảng điều khiển IDE bạn cố gắng biên dịch nháp Xác định giá trị cho biến Phần thứ hai trình gán giá trị cho biến khai báo Để gán giá trị cho biến, bạn sử dụng toán tử gán, ngôn ngữ C dấu bằng: blinkRateSetting = 10; Mẹo: Kết thúc câu lệnh Trong ngôn ngữ C, bạn phải kết thúc hầu hết câu lệnh dấu chấm phẩy để trình biên dịch biết câu lệnh kết thúc câu lệnh khác bắt đầu Chúng ta kiểm tra câu lệnh không cần sử dụng dấu chấm phẩy cuối chương Đây bước thực gán biến vào vị trí nhớ Trình biên dịch tìm kiếm vị trí khả dụng nhớ đủ lớn để chứa kiểu liệu lưu trữ giá trị gán vào vị trí Bạn sử thực tắt cách khai báo biến gán giá trị cho câu lệnh: int blinkRateSetting = 10; Với phương pháp này, trình biên dịch định vị trí nhớ cho biến lưu trữ giá trị liệu bước Hiểu kiểu liệu Kiểu liệu mà bạn khai báo cho biến xác định độ lớn vùng nhớ mà hệ thống cần dự trữ để lưu trữ liệu Bạn sử dụng nhiều kiểu liệu khác ngơn ngữ lập trình Arduino Bảng 5.1 liệt kê kiểu liệu khác mà Arduino sử dụng để lưu trữ giá trị, yêu cầu dung lượng nhớ, giá trị tối đa mà chúng lưu giữ Kiểu liệu int long chứa giá trị số nguyên Kiểu float double lưu trữ giá trị số thập phân 10.5 –1430.443456 Kiểu liệu boolean Kích thước (Bytes) Khoảng giá trị Logic sai char -128 đến +127 byte đến 255 int -32,768 đến 32,767 word đến 65,535 long -2,147,483,648 đến 2,147,483,647 float -3.4028235E+38 đến +3.4028235E+38 double -3.4028235E+38 đến +3.4028235E+38 Bảng 5.1: Các kiểu liệu ARDUINO 10 Chú ý: Giá trị Số nguyên ( int ) Dấu phẩy động ( long ) Hãy cẩn thận bạn làm việc với số phác thảo Arduino Khi sử dụng số nguyên, phép toán bạn sử dụng dẫn đến giá trị số nguyên Vì vậy, chia cho giá trị Để giữ lại kết xác, bạn phải sử dụng giá trị dấu phẩy động Sau bạn xác định kiểu liệu cho biến, biến lưu trữ kiểu giá trị Ví dụ: bạn khai báo kiểu liệu float float percent; định dạng mà Arduino sử dụng để lưu trữ liệu xác định bạn khơng thể thay đổi Nếu bạn lưu trữ giá trị nguyên biến phần trăm, Arduino lưu trữ định dạng dấu phẩy động 1,0 Lưu trữ liệu ký tự ( strings) khác chút ngơn ngữ lập trình C Khi làm việc với giá trị ký tự, ngôn ngữ C chuyển đổi ký tự chuỗi thành giá trị nhị phân phương pháp mã hóa, chẳng hạn mã ASCII, sau lưu trữ giá trị kiểu liệu char Từng ký tự chuỗi lưu trữ theo thứ tự nhớ để đọc lại giá trị theo thứ tự để tái tạo giá trị chuỗi Để kết thúc chuỗi, C đặt ký tự null (số 0) làm byte cuối chuỗi Đây gọi chuỗi kết thúc null Bạn tìm hiểu thêm cách sử dụng chuỗi phác thảo Arduino sau Giờ thứ 8, “Làm việc với chuỗi” Định tính biến Bạn sử dụng định tính biến để sửa đổi cách trình biên dịch xử lý biến phác thảo Bộ định tính biến const cho trình biên dịch biết giá trị gán cho biến không thay đổi Giá trị loại gọi số Trong ngôn ngữ lập trình Arduino, số thường được viết tồn chữ in hoa: const float TAX = 0.07; Thư viện Arduino chứa số số khác xác định trước với giá trị thường sử dụng phác thảo Arduino, HIGH cho giá trị LOW cho giá trị Các số giúp việc đọc mã phác thảo dễ dàng theo dõi chút bạn sử dụng tên có ý nghĩa thay giá trị tối nghĩa Loại định tính biến khác từ khóa khơng dấu Từ khóa khơng dấu u cầu trình biên dịch khơng cần dấu giá trị; tất giá trị lưu trữ biến giá trị dương 11 Listing 41 Làm cho biến scanValue có sẵn cho nhiều thư viện (Source: File > Examples > plcLib > InputOutput > ServoSingle) Để thay cho cách tiếp cận trên, hướng dẫn plcLib tùy chọn trả lại giá trị scanValue cho biến người dùng xác định trước (chỉ xác điểm cụ thể chu kỳ quét) Nội dung biến người dùng xác định sử dụng làm 'đầu vào' cho lệnh plcLib, thay cho đầu vào đầu trực tiếp từ chân đặt tên Ví dụ sau minh họa số khả Listing 42 Trả lại scanValue cho biến người dùng xác định (Source: File > Examples > plcLib > Variables > LachCommandVariables) Những điều cần lưu ý việc lưu biến scanValue biến người dùng xác định (AUX1 = in (X1);), việc sử dụng tên biến thay cho tên pin lệnh plcLib khác 122 21.3 Làm việc với biến tùy chỉnh Khi đề cập đến tên X0, X1, Y0, AUX0, AUX1, danh sách trước bạn tự hỏi làm phần mềm 'biết' liệu bạn đề cập đến tên ghim hay nội dung biến người dùng xác định? Câu trả lời tất tên pin (X0, X1 Y0) xác định bên phần mềm plcLib biến số nguyên có dấu, biến người dùng xác định chương trình (AUX0 AUX1) thuộc loại biến không dấu Phần mềm plcLib thực có hai phiên lệnh trình biên dịch chọn phiên thích hợp dựa kiểu biến cung cấp (đây gọi tải hàm) Chỉ cần nhớ định biến kiểu số nguyên người dùng xác định số nguyên không dấu (16-bit) dài không dấu (32-bit) để tránh nhầm lẫn biến người dùng tên pin 21.4 Sử dụng biến với mạch logic phức tạp 123 Listing 43 Giải logic phức tạp với biến người dùng (Source: File > Examples > plcLib > Variables > ComplexLogic) Ví dụ trước tiên giải nhánh mạch logic sau lưu trữ (hoặc 'đầu ra') kết tạm thời cho biến người dùng xác định - out (AUX0) ; (Dịng bỏ qua hồn tồn cách viết lại dịng trước AUX0 = andNotBit (X1) ;.) Sau đó, nhánh thứ hai giải kết từ nhánh HOẶC với kết tạm thời trước - orBit(AUX0) ; Một giải pháp thay cho cách tiếp cận 'biến người dùng' thảo luận áp dụng lệnh logic khối, thảo luận phần 22 Lưu trữ Logic dựa ngăn xếp Phiên 1.0 phần mềm plcLib bổ sung khả tạo sử dụng ngăn xếp dựa phần mềm để lưu trữ tạm thời truy xuất giá trị bit đơn Khả kết hợp với lệnh logic khối, để đơn giản hóa giải pháp mạng phức tạp dựa đại số Boolean - không cần tạo biến người dùng riêng lẻ để lưu trữ tạm thời, thảo luận trước Ngăn xếp vùng nhớ đặc biệt sử dụng để lưu trữ truy xuất liệu tạm thời thông tin lưu trữ cách đẩy vào ngăn xếp sau truy xuất cách bật từ ngăn xếp Thông tin lưu trữ gần ln thơng tin xóa đầu tiên, đó, ngăn xếp hoạt động kho lưu trữ cuối vào trước Hình 55 Sử dụng ngăn xếp làm nơi lưu trữ liệu cuối vào trước xuất trước Một phép tương tự hữu ích để hỗ trợ lưu trữ truy xuất liệu dựa ngăn xếp chồng tấm, đại diện cho phần thông tin Việc lưu trữ liệu tương đương với việc thêm vào đầu chồng, điều làm cho 'chồng' tăng cao Ngược lại, thông tin truy xuất cách loại bỏ Đĩa thêm gần đĩa cũ Bước viết phác thảo dựa ngăn xếp sử dụng lệnh Stack để tạo đối tượng ngăn xếp (Ví dụ: lệnh Stack stack1; tạo ngăn xếp gọi stack1, có khả chứa tối đa 32 số bit đơn.) Các giá trị thêm vào xóa khỏi ngăn xếp cách sử dụng phương thức push () pop () phương thức trước đối tượng ngăn xếp tạo Bản phác thảo sau minh họa việc sử dụng ngăn xếp để lưu trữ sau lấy loạt giá trị bit đơn 124 Listing 44 Đẩy bật giá trị từ ngăn xếp phần mềm bit (Source: File > Examples > plcLib > Stack > PushPop) Khả lưu trữ kết tính tốn tạm thời ngăn xếp sử dụng để đơn giản hóa giải pháp mạng logic phức tạp Có sẵn tùy chọn để kết hợp nhánh song song chuỗi cách sử dụng phép toán logic AND OR, thảo luận phần 125 22.1 Hoạt động lôgic khối Một mạng logic bao gồm hai nhánh song song giải cách tính tốn nhánh trước tiên, sau lưu kết trung gian vào ngăn xếp Nhánh thứ hai sau giải kết hợp với kết trước đó, sử dụng phương thức orBlock () đối tượng ngăn xếp (cũng loại bỏ kết trước khỏi ngăn xếp) Hình 56 Phép tốn Block-OR sử dụng để kết hợp nhánh song song với kết tính tốn lưu trữ trước ngăn xếp Bản phác thảo sau thể cách tiếp cận Listing 45 Performing a logical OR of two parallel switch branches using Block OR instruction (Source: File > Examples > plcLib > Stack > OrBlock) 126 Một kỹ thuật tương tự áp dụng với kết nối nối tiếp nhóm chuyển mạch, kết hợp cách sử dụng Khối AND Hình 57 Một khối AND sử dụng để giải mạng phức tạp bao gồm phần tử nối tiếp Ví dụ sau tính tốn kết nhóm chuyển đổi bên trái, lưu trữ dạng kết trung gian ngăn xếp Khối bên phải sau giải kết hợp với kết trước cách sử dụng phương thức andBlock () đối tượng ngăn xếp 127 Danh sách 46 Logic AND hai nhóm chuyển đổi chuỗi sử dụng lệnh Block AND (Nguồn: File> Examples> plcLib> Stack> AndBlock) Phần thảo luận phương pháp tạo phân bổ đầu vào / đầu tùy chỉnh, cấu hình tiêu chuẩn khơng phù hợp 23 Xác định Phân bổ IO Tùy chỉnh Trong số trường hợp, cấu hình đầu đầu vào mặc định không phù hợp Phân bổ I / O tùy chỉnh phù hợp cần thêm đầu vào đầu ra, phần cứng tùy chỉnh sử dụng quy ước đặt tên pin khác ưu tiên 23.1 Phân bổ I / O cấu hình sẵn Phiên 1.2 thư viện PLC cung cấp loạt tệp I / O tùy chỉnh để phù hợp với nhiều loại phần cứng Các tệp cấu hình sau có sẵn từ phần menu Tệp> Ví dụ> Tùy chỉnh • • • • • • • • Arduino Uno Mega với cấu hình pin mặc định (Uno, Mega) Điều khiển PLCs (ControllinoMaxiPLC, ControllinoMegaPLC, ControllinoMiniPLC) Tấm chắn công nghiệp Ardbox PLCs (ArdboxAnalogPLC, ArdboxPNPPLC, ArdboxRelayPLC, ArdboxTCHPLC) Tấm chắn công nghiệp M-Duino PLCs (MDuino19RelayPLC, MDuino21PLC, MDuino38RelayPLC, MDuino42PLC, MDuino57RelayPLC, MDuino58PLC) Seedstudio Grove shields for Uno and Mega (GroveUno, GroveMega) TinkerKit shields for Uno and Mega (TinkerkitUno, TinkerkitMega) Velleman I/O Shield (VellemanIOShield) Use of custom pin names and user defined variable names (CustomIO) Nếu cấu hình cung cấp khơng phù hợp, bạn cần phải tạo cấu hình riêng từ đầu, thảo luận 23.2 Nghiên cứu điển hình: Tạo Phân bổ IO Tùy chỉnh Phần trình bày việc tạo ánh xạ IO tùy chỉnh cho Tấm chắn đầu vào / đầu Velleman cho Arduino Hình 58 Tấm chắn Đầu vào / Đầu Velleman cho Arduino cung cấp loạt đầu vào đầu hữu ích 128 Mô-đun cung cấp tổng cộng mười tám kết nối IO, xếp sáu đầu vào tương tự, sáu đầu vào kỹ thuật số sáu đầu kỹ thuật số dựa rơle Các chi tiết khác kết nối chi tiết dây bên có sẵn sách hướng dẫn biểu liệu Nhiệm vụ chọn quy ước đặt tên phù hợp cho đầu vào đầu ra, đồng thời xác định kết nối chân liên quan • Đầu vào tương tự tiếp tục sử dụng tên có A0 – A5 • Đầu vào kỹ thuật số cấp phát tên D0 – D5, liên kết với chân Arduino 2, 3, 4, 5, • Đầu rơ le gọi R0 – R5, sử dụng chân 8, 9, 10, 11, 12 13 Hình 59 Ánh xạ IO cho chắn IO Velleman Arduino Bản phác thảo sau bắt đầu cách vô hiệu hóa định nghĩa tên pin mặc định (X0, X1, , Y0, Y1, ) cách sử dụng lệnh #define noPinDefs, sau định tên pin bắt buộc dạng chuỗi số nguyên 129 Liệt kê 47 Tạo ánh xạ đầu vào / đầu Velleman IO Shield (Nguồn: File> Examples> plcLib> CustomIO> VellemanIOShield) Hàm customIO () sử dụng (thay cho hàm setupPLC () tiêu chuẩn) để xác định hướng liệu cho tất đầu vào đầu hiển thị phần trích xuất chương trình sau (có sẵn cách nhấp vào tab IO phác thảo) Các điểm sau cần lưu ý từ ví dụ • Tên cho đầu vào kỹ thuật số đầu chuyển tiếp phải xác định toàn cầu, cách xác định chúng bên phần setup () { } loop () { }, làm cho chúng có sẵn để sử dụng đâu sketch • Tên ghim phân bổ khơng thay đổi định nghĩa số biến • Phần mềm plcLib yêu cầu tên pin phải xác định theo kiểu số nguyên có dấu (tức 'int' thay 'unsigned int'), lý thảo luận trước đó, phần Sử dụng biến chương trình 130 24 Điểm mạnh Hạn chế Phần mềm Phần mềm plcLib cung cấp miễn phí cho phép phát triển chương trình kiểu PLC đơn giản phần cứng tương thích với Arduino chi phí thấp Do đó, cung cấp điểm đầu vào hợp lý cho người muốn phát triển ứng dụng phần mềm theo định hướng điều khiển sử dụng Arduino cho mục đích giáo dục liên quan Các lệnh viết dạng phần mở rộng cho ngơn ngữ lập trình C / C ++ sử dụng cú pháp lệnh tương thích C / C ++ Các chương trình thiết kế sơ đồ bậc thang, sơ đồ khối chức năng, biểu đồ chức văn có cấu trúc, phải nhập vào Arduino IDE định dạng văn bản, thường gọi danh sách hướng dẫn Tuy nhiên, trình trở nên dễ dàng thực hành hỗ trợ sẵn có ví dụ Mặc dù cú pháp lệnh không giống với nhà sản xuất cụ thể nào, cần dễ dàng chuyển giao kiến thức có hệ thống so sánh hoạt động tính định với tiêu chuẩn thích hợp (IEC 61131) Các điểm sau hữu ích định có sử dụng giải pháp dựa plcLib tình cụ thể hay khơng • • • • Cách tiếp cận logic bậc thang đặc biệt hiệu triển khai hệ thống dễ dàng biểu diễn sơ đồ bậc thang, sơ đồ khối hệ thống dựa trình tự Các hệ thống thường liên quan đến việc thực song song số tác vụ đáng kể, mạnh cụ thể Đối với hệ thống khác biểu diễn dễ dàng cách sử dụng lưu đồ tương tự, phương pháp lập trình truyền thống hiệu Trong số trường hợp, sử dụng kết hợp cách tiếp cận này, sử dụng văn có cấu trúc Chu kỳ quét chắn chậm lại nhiều tác vụ song song thêm vào Cần cẩn thận để đảm bảo thời gian đáp ứng hệ thống đủ cho hệ thống kiểm soát Trong số trường hợp, hệ thống yêu cầu số lần vượt qua chu kỳ quét để hồn thành phép tính phức tạp kết trung gian 'trục trặc' xảy nhanh chóng thời điểm Ngồi ra, kết đầu cập nhật bước chu kỳ quét (không phần cuối) Bạn nên kiểm tra chương trình cách cẩn thận để đảm bảo kết trung gian khơng ảnh hưởng đến hoạt động xác hệ thống Nói chung, bạn nên tránh sử dụng lệnh delay () chương trình logic bậc thang, điều tạm dừng chu kỳ quét khoảng thời gian trễ (gỡ lỗi phần mềm ngoại lệ, mục đích cố tình làm chậm chu kỳ quét) Nếu hoạt động dựa thời gian bắt buộc xem xét sử dụng lệnh hẹn timerOn (), timerOff (), timerPulse () timerCycle (), lệnh sử dụng phương pháp điều khiển ngắt không ảnh hưởng đến chu kỳ quét 131 25 Tham chiếu lệnh Trang liệt kê tất lệnh hỗ trợ phần mềm plcLib 25.1 Cấu hình chung Lệnh setupPLC(); Mơ tả Định cấu hình cài đặt PLC Ví dụ setupPLC(); Phần Định cấu hình phần cứng 25.2 Đầu vào / đầu kỹ thuật số bit Lệnh in(input); out(output); inNot(input); outNot(output); Mô tả Đọc đầu vào kỹ thuật số Kết đầu kỹ thuật số Đọc đầu vào kỹ thuật số đảo ngược Đầu tín hiệu ngược sang kỹ thuật số đầu Ví dụ in(X0); out(Y0); inNot(X0); outNot(Y0); Phần Đầu vào / đầu bit đơn Đầu vào / đầu bit đơn Đầu vào / đầu bit đơn Đầu vào / đầu bit đơn 25.3 Logic kết hợp Lệnh andBit(input); orBit(input); xorBit(input); andNotBit(input); orNotBit(input); Mô tả Logical AND với đầu vào kỹ thuật số Logical OR với đầu vào kỹ thuật số Logical XOR với đầu vào kỹ thuật số Logical AND với đầu vào kỹ thuật số đảo ngược Logical OR với đầu vào kỹ thuật số đảo ngược Ví dụ in(X0); andBit(X1); out(Y0); in(X0); orBit(X1); out(Y0); in(X0); xorBit(X1); out(Y0); in(X0); andNotBit(X1); out(Y0); in(X0); orNotBit(X1); out(Y0); Phần Thực phép toán Boolean Thực phép toán Boolean Thực phép toán Boolean Thực phép toán Boolean Thực phép toán Boolean 25.4 Đầu vào / đầu tín hiệu tương tự Lệnh inAnalog(input); Mơ tả Đọc đầu vào tương tự Ví dụ inAnalog(X0); Phần Làm việc với tín hiệu tương tự 132 outPWM(output); outServo(output); Xuất dạng sóng outPWM(Y0); PWM Xuất servo outServo(Y0); Làm việc với tín hiệu tương tự Làm việc với tín hiệu tương tự 25.5 So sánh tín hiệu tương tự Lệnh compareGT(input); compareLT(input); Mô tả So sánh đầu vào tương tự với giá trị tương tự thứ hai, trả giá trị trước lớn So sánh đầu vào tương tự với giá trị tương tự thứ hai, trả giá trị trước nhỏ Ví dụ inAnalog(X0); compareGT(X1); out(Y0); Phần So sánh giá trị tương tự inAnalog(X0); compareLT(X1); out(Y0); So sánh giá trị tương tự 25.6 Chốt Lệnh latch(latch_output, reset_input); Mô tả Chốt giá trị đầu vào kỹ thuật số trước atchKey(set_key, reset_key, output); Chốt đầu kỹ thuật latchKey('1', '2', Y0); Kết đầu số dựa mục nhập bàn phím Chốt (đặt) đầu in(X0); set(Y0); Kết đầu kỹ thuật số giá trị trước true set(latch_output); reset(latch_output); Xóa (hủy đặt) đầu chốt giá trị trước true Ví dụ in(X0); X1); Phần latch(Y0, Kết đầu in(X0); reset(Y0); Kết đầu Ví dụ in(X0); timerOn(TIMER0, 2000); out(Y0) Phần Sản xuất dạng sóng lặp lại in(X0); timerOff(TIMER0, 2000); out(Y0) in(X0); timerPulse(TIMER0, 2000); out(Y0); Sản xuất dạng sóng lặp lại Sản xuất dạng sóng lặp lại 25.7 Bộ hẹn Lệnh timerOn(timer_variable, delay_ms); Mô tả Tạo đầu bị trễ sau đầu vào bật timerOff(timer_variable, Trì hỗn tắt đầu delay_ms); sau đầu vào bị xóa timerPulse(timer_variable, Tạo xung độ pulse_ms); rộng cố định kích hoạt 133 đầu vào ngắn gọn timerCycle(low_variable, Tạo dạng in(X0); low_ms, high_variable, sóng xung lặp timerCycle(AUX0, high_ms); lại, bật 900, AUX1, 100); out(Y0); Sản xuất dạng sóng lặp lại 25.8 Xung kích hoạt cạnh Lệnh Pulse pulse_name; Mơ tả Tạo đối tượng xung pulse_name.inClock(); Kết nối tín hiệu đầu vào với đối tượng xung pulse_name.rising(); Đọc cạnh tăng dạng sóng xung pulse_name.falling(); Đọc cạnh rơi dạng sóng xung Ví dụ Pulse pulse1; in(X0); pulse1.inClock(); Phần Xung kích hoạt cạnh Xung kích hoạt cạnh pulse1.rising(); out(Y0); pulse1.falling(); out(Y1); Xung kích hoạt cạnh Xung kích hoạt cạnh 25.9 Bộ đếm Lệnh counter_name(preset _value [, direction]); counter_name.count Up(); counter_name.count Down(); counter_name.preset( ); counter_name.clear() ; counter_name.upper Q(); counter_name.lower Q(); counter_name.count( ); counter_name.preset Value(); Mơ tả Tạo cấu hình đối tượng đếm Đếm lên, số đếm nhỏ giá trị đặt trước Đếm ngược, số đếm lớn Đặt số lượng nội thành giá trị đặt trước, kích hoạt đầu Q Đặt số lượng nội thành 0, kích hoạt đầu Q thấp Bằng số lượng bên giá trị đặt trước, không Bằng số đếm bên 0, ngược lại Trả giá trị đếm bên Trả giá trị đặt trước Ví dụ Counter ctr1(5); Counter ctr2(10,1); in(X0); ctr1.countUp(); in(X0); ctr1.countDown(); in(X1); ctr1.preset(); Phần Đếm Bộ đếm Đếm Bộ đếm Đếm Bộ đếm Đếm Bộ đếm in(X2); ctr1.clear(); ctr1.upperQ(); out(Y0); Đếm Bộ đếm Đếm Bộ đếm ctr1.lowerQ(); out(Y0); Serial.println(ctr1.c ount()); Serial.println(ctr1.p resetValue()); Đếm Bộ đếm Đếm Bộ đếm Đếm Bộ đếm 134 25.10 Dịch chuyển vị trí ghi Lệnh Shift register_name([start_value]); register_name.inputBit(); register_name.shiftLeft(); register_name.shiftRight(); register_name.reset(); register_name.bitValue(bit_posi tion); register_name.value(); Mơ tả Tạo cấu hình đối tượng ghi shift Đặt bit đầu vào nối tiếp dựa đầu vào trước Di chuyển liệu sang trái chỗ, cạnh lên đầu vào trước Di chuyển liệu sang phải nơi, cạnh lên đầu vào trước Đặt lại giá trị ghi dịch chuyển nội đầu vào trước Trả giá trị bit ghi dịch chuyển vị trí định Trả giá trị ghi shift dạng số ngun khơng dấu Ví dụ Shift shift1(); Shift shift2(0x8888); in(X0); shift1.inputBit(); in(X0); shift1.inputBit(); Phần Dịch chuyển xoay liệu nhị phân Dịch chuyển xoay liệu nhị phân Dịch chuyển xoay liệu nhị phân in(X2); Dịch chuyển shift1.shiftRight( xoay ); liệu nhị phân in(X3); shift1.reset(); Dịch chuyển xoay liệu nhị phân shift1.bitValue(0 ); out(Y0); Dịch chuyển xoay liệu nhị phân Serial.println(shi ft1.value()); delay(200); Dịch chuyển xoay liệu nhị phân 25.11 Logic ngăn xếp khối Lệnh Stack stack_name; stack_name.push(); stack_name.pop(); Mô tả Tạo ngăn xếp 32 cấp, bit Đẩy scanValue, biểu thị dạng số bit đơn, lên ngăn xếp Cập nhật scanValue với giá trị bit đơn bị xóa khỏi ngăn xếp Ví dụ Stack stack1; stack1.push(); stack1.pop(); Phần Logic ngăn xếp khối Logic ngăn xếp khối Logic ngăn xếp khối 135 Kết Luận Như vậy, với đề tài đồ án : Hướng dẫn lập trình PIC với Arduino, nhóm thực hiểu vấn đè thiết kế lập trình số loại bo mạch Arduino Ngoài cung cấp kiến thức phần mềm ứng dụng thiết kế mạch phần cứng Nhưng điều quan trọng nói đến tạo cho em kỹ mềm than, khả tư làm việc độc lập Với nỗ lực việc tìm hiểu nghiên cứu linh kiện, thiết bị cần thiết cho đề tài, cừng với vận dụng kiến thức học vào công việc thiết kế, lắp đặt, giúp đỡ, hướng dẫn nhiệt nhiệt tình thầy giáo Triệu Việt Linh, nhóm em hồn thành đề tài đồ án Do lần thành viên nhóm làm đề tài đồ án, cộng với kiến thức nhiều hạn chế, chúng em thấy đề tài thực cịn nhiều sai sót, khiếm khuyết Chúng em tự mong ủng hộ giúp đỡ thầy giáo để đè tài chúng em thực hồn thiện có thêm nhiều cải tiến đáng kể ứng dụng tốt thực tiễn 136 ... long -2,147,4 83, 648 đến 2,147,4 83, 647 float -3. 4028 235 E +38 đến +3. 4028 235 E +38 double -3. 4028 235 E +38 đến +3. 4028 235 E +38 Bảng 5.1: Các kiểu liệu ARDUINO 10 Chú ý:... biến thư viện Arduino tiêu chuẩn mà bạn sử dụng Làm việc với biến Trong thứ 2, “Khởi tạo môi trường lập trình Arduino, ” ngơn ngữ lập trình Arduino cung cấp giao diện thann thiện với người sử dụng... tương tự 133 25.6 Chốt 133 25.7 Bộ hẹn 133 25.8 Xung kích hoạt cạnh 134 25.9 Bộ đếm 134 25.10 Dịch chuyển vị trí ghi 135 25.11 Logic