Energia - Bài 4: Xử Lý Chuỗi Qua Các Ví Dụ | Học ARM
Có thể bạn quan tâm
Tiếp tục sau bài LED và bài ADC và các giao tiếp gửi nhận dữ liệu thì việc xử lý chuỗi trong các ứng dụng IOT là vô cùng quan trọng trong quá trình truyền nhận dữ liệu. Mình chia sẻ một số ví dụ để các bạn có thể biết được cách để xử lý chuỗi nhận được từ các thiết bị khác.
Hiển thị chuỗi và dữ liệu
Trong ví dụ này ta sẽ tìm hiểu về cách in ra dữ liệu, chuyển đổi các kiểu dữ liệu sang kiểu chuỗi, nối 2 chuỗi để hiển thị thông tin
/* String constructors Ví dụ tạo chuỗi và in ra các kiểu dữ liệu chuyển đổi created 27 July 2010 modified 30 Aug 2011 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ void setup() { // Khai báo cổng COM: Serial.begin(9600); // In ra dòng giới thiệu: Serial.println("\n\nString Constructors:"); Serial.println(); } void loop() { // Sử dụng chuỗi không đổi: String stringOne = "Hello String"; Serial.println(stringOne); // In ra dòng "Hello String" // Chuyển kiểu dữ liệu từ char sang String: stringOne = String('a'); Serial.println(stringOne); // In "a" // Chuyển đổi chuỗi hằng(constant string) sang chuỗi đối tượng(String object) để phục vụ cho nối chuỗi: String stringTwo = String("This is a string"); Serial.println(stringTwo); // In ra "This is a string" // Nối 2 chuỗi: stringOne = String(stringTwo + " with more"); // In ra dòng "This is a string with more": Serial.println(stringOne); // Sử dụng số nguyên ko đổi: stringOne = String(13); Serial.println(stringOne); // In "13" // In giá trị dưới dạng số thập phân stringOne = String(analogRead(A0), DEC); // In ra giá trị ADC hiện có đọc được từ chân A0 Serial.println(stringOne); // In giá trị dưới dạng số HEX stringOne = String(45, HEX); // In ra giá trị "2d", tương ứng với số thập phân là 45: Serial.println(stringOne); // In giá trị dưới dạng số nhị phân stringOne = String(255, BIN); // In ra "11111111" tương ứng với số thập phân 255 Serial.println(stringOne); // In thời gian stringOne = String(millis(), DEC); // In giá trị hiện tại lấy từ hàm millis(): Serial.println(stringOne); while(true); }Cắt chuỗi
Ví dụ này dùng để cắt các dữ liệu thừa không cần thiết
/* Ví dụ về cắt chuỗi created 27 July 2010 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ void setup() { Serial.begin(9600); Serial.println("\n\nString substring():"); } void loop() { // Khai báo chuỗi String stringOne = "Content-Type: text/html"; String stringTwo; Serial.println(stringOne); // Cắt chuỗi chỉ lấy chuỗi từ vị trí 19 trở đi, kết quả là html stringTwo = stringOne.substring(19); Serial.println(stringTwo); // Cắt chuỗi chỉ lấy chuỗi từ vị trí từ 14 tới 18 kết quả là text stringTwo = stringOne.substring(14,18); Serial.println(stringTwo); while(true); }So sánh chuỗi
Ở ví dụ này chúng ta sẽ làm quen với các cách so sánh chuỗi khác nhau, so sánh chuỗi với số, chuỗi với chuỗi,..
/* So sánh chuỗi created 27 July 2010 modified 2 Apr 2012 by Tom Igoe Hardware Required: * Tiva C LaunchPad This example code is in the public domain. */ String stringOne, stringTwo; void setup() { // Cấu hình cổng serial Serial.begin(9600); stringOne = String("this"); stringTwo = String("that"); // In thông báo intro Serial.println("\n\nComparing Strings:"); Serial.println(); } void loop() { // So sánh chuỗi 1 với this nếu bằng thì in ra kết quả if (stringOne == "this") { Serial.println("StringOne == \"this\""); } // So sánh chuỗi 1 và chuỗi 2 nếu khác nhau thì in ra kết quả if (stringOne != stringTwo) { Serial.println(stringOne + " =! " + stringTwo); } // So sánh 2 chuỗi khác nhau 1 ký tự in hoa stringOne = "This"; stringTwo = "this"; if (stringOne != stringTwo) { Serial.println(stringOne + " =! " + stringTwo); } // Cách so sánh khác sử dụng equals() if (stringOne.equals(stringTwo)) { Serial.println(stringOne + " equals " + stringTwo); } else { Serial.println(stringOne + " does not equal " + stringTwo); } // So sánh chuỗi bỏ qua ký tự viết hoa, chỉ kiểm tra nội dung if (stringOne.equalsIgnoreCase(stringTwo)) { Serial.println(stringOne + " equals (ignoring case) " + stringTwo); } else { Serial.println(stringOne + " does not equal (ignoring case) " + stringTwo); } // So sánh chuỗi và số stringOne = "1"; int numberOne = 1; if (stringOne.toInt() == numberOne) { Serial.println(stringOne + " = " + numberOne); } // So sánh 2 chuỗi lưu giá trị số stringOne = "2"; stringTwo = "1"; if (stringOne >= stringTwo) { Serial.println(stringOne + " >= " + stringTwo); } // So sánh độ dài chuỗi stringOne = String("Brown"); if (stringOne < "Charles") { Serial.println(stringOne + " < Charles"); } if (stringOne > "Adams") { Serial.println(stringOne + " > Adams"); } if (stringOne <= "Browne") { Serial.println(stringOne + " <= Browne"); } if (stringOne >= "Brow") { Serial.println(stringOne + " >= Brow"); } // Sử dụng hàm compareTo() để so sánh và sắp xếp chữ theo thứ tự ABC stringOne = "Cucumber"; stringTwo = "Cucuracha"; if (stringOne.compareTo(stringTwo) < 0 ) { Serial.println(stringOne + " comes before " + stringTwo); } else { Serial.println(stringOne + " comes after " + stringTwo); } delay(10); while (true) { } }Thay thế chuỗi
Ví dụ này dùng để thay thế, sửa đổi nội dung của chuỗi
/* String replace() created 27 July 2010 modified 2 Apr 2012 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ void setup() { // Cấu hình Serial: Serial.begin(9600); // Gửi thông tin intro: Serial.println("\n\nString replace:\n"); Serial.println(); } void loop() { String stringOne = "<HTML><HEAD><BODY>"; Serial.println(stringOne); // Sử dụng hàm replace() để thay đổi nội dung của chuỗi // Đầu tiên tạo chuỗi copy chuỗi hiện có. String stringTwo = stringOne; // Sau đó thực hiện thay thế < bằng </: stringTwo.replace("<", "</"); // In chuỗi gốc: Serial.println("Original string: " + stringOne); // Sau đó in chuỗi đã thay đổi: Serial.println("Modified string: " + stringTwo); // Ngoài ra còn có thể dùng hàm replace() với kí tự: String normalString = "bookkeeper"; Serial.println("normal: " + normalString); String leetString = normalString; leetString.replace('o', '0'); leetString.replace('e', '3'); Serial.println("l33tspeak: " + leetString); while(true); }Tính độ dài chuỗi
Trong ví dụ này sẽ thực hiện chờ lệnh gửi từ máy tính xuống, đếm chiều dài lệnh gửi là bao nhiêu và in ra giá trị
/* String length() Examples of how to use length() in a String. Mở Serial từ máy tính và gõ lệnh để quan sát created 1 Aug 2010 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ String txtMsg = ""; //Chuỗi lưu giá trị gửi từ máy tính int lastStringLength = txtMsg.length(); // Độ dài trước đó của chuỗi void setup() { // Cấu hình serial: Serial.begin(9600); while (!Serial) { ; // Đợi kết nối } // Gửi intro: Serial.println("\n\nString length():"); Serial.println(); } void loop() { // Thêm dữ liệu nhận được vào String: while (Serial.available() > 0) { char inChar = Serial.read(); txtMsg += inChar; } // In ra chiều dài chuỗi nếu có thay đổi if (txtMsg.length() != lastStringLength) { Serial.println(txtMsg); Serial.println(txtMsg.length()); // Nếu chuỗi có độ dài hơn 140 in thông báo cảnh báo: if (txtMsg.length() < 140) { Serial.println("That's a perfectly acceptable text message"); } else { Serial.println("That's too long for a text message."); } lastStringLength = txtMsg.length(); } }Xuất chữ in hoa và in thường
Ví dụ này thực hiện chuyển toàn bộ chữ hoa thành chữ thường và ngược lại
/* Chuyển chuỗi từ chữ hoa sang chữ thường created 27 July 2010 modified 2 Apr 2012 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ void setup() { // Cấu hình Serial Serial.begin(9600); // Gửi lệnh intro: Serial.println("\n\nString case changes:"); Serial.println(); } void loop() { // Biến chữ thường thành chữ hoa: String stringOne = "hello"; Serial.println(stringOne); stringOne.toUpperCase(); Serial.println(stringOne); // Biến chữ hoa thành chữ thường String stringTwo = "HELLO"; Serial.println(stringTwo); stringTwo.toLowerCase(); Serial.println(stringTwo); // do nothing while true: while(true); }Lấy chỉ số index
/* In vị trí kí tự trong chuỗi created 27 July 2010 modified 2 Apr 2012 by Tom Igoe Hardware Required: * TIVA C LaunchPad This example code is in the public domain. */ void setup() { // Cấu hình Serial: Serial.begin(9600); // Gửi intro: Serial.println("\n\nString indexOf() and lastIndexOf() functions:"); Serial.println(); } void loop() { // Hàm indexOf() sẽ trả lại vị trí của kí tự String stringOne = "<HTML><HEAD><BODY>"; int firstClosingBracket = stringOne.indexOf('>'); Serial.println("The index of > in the string " + stringOne + " is " + firstClosingBracket); stringOne = "<HTML><HEAD><BODY>"; int secondOpeningBracket = firstClosingBracket + 1; int secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket ); Serial.println("The index of the second > in the string " + stringOne + " is " + secondClosingBracket); // Có thể dùng hàm indexOf() để tìm chuỗi Strings: stringOne = "<HTML><HEAD><BODY>"; int bodyTag = stringOne.indexOf("<BODY>"); Serial.println("The index of the body tag in the string " + stringOne + " is " + bodyTag); stringOne = "<UL><LI>item<LI>item<LI>item</UL>"; int firstListItem = stringOne.indexOf("<LI>"); int secondListItem = stringOne.indexOf("item", firstListItem + 1 ); Serial.println("The index of the second list item in the string " + stringOne + " is " + secondClosingBracket); // Hàm lastIndexOf() đưa ra vị trí cuối cùng của kí tự trong chuỗi: int lastOpeningBracket = stringOne.lastIndexOf('<'); Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket); int lastListItem = stringOne.lastIndexOf("<LI>"); Serial.println("The index of the last list item in the string " + stringOne + " is " + lastListItem); // Hàm lastIndexOf() cũng có thể dùng để tìm chuỗi: stringOne = "<p>Lorem ipsum dolor sit amet</p><p>Ipsem</p><p>Quod</p>"; int lastParagraph = stringOne.lastIndexOf("<p"); int secondLastGraf = stringOne.lastIndexOf("<p", lastParagraph - 1); Serial.println("The index of the second last paragraph tag " + stringOne + " is " + secondLastGraf); while(true); }Tạm kết
Thế là đã xong các ví dụ xử lý với chuỗi, thế ứng dụng cụ thể của những cách xử lý này trong một dự án cụ thể thế nào các bạn theo dõi ở các bài tiếp theo nhé
Từ khóa » Tách Chuỗi String Trong Arduino
-
Tách Dữ Liệu Từ Chuỗi Trong Arduino | Cộng đồng Arduino Việt Nam
-
Xử Lý Chuỗi Trong Arduino | Cộng đồng Arduino Việt Nam
-
Tách Chuỗi Trong Arduino Cực Dễ - Ngôi Nhà IoT - YouTube
-
Tách Chuỗi Trong Arduino - Programming - Dạy Nhau Học
-
Bài 6 Hưỡng Dẫn Tự Học ESP8266. Phần 2 Xử Lý String Cho ...
-
String Là Gì? Chi Tiết Các Hàm Trong String. - Lập Trình Arduino
-
Chuyển String Sang Mảng Char Arduino - ĐIỆN TỬ TƯƠNG LAI
-
So Sánh Chuỗi Trong Arduino - Học Tốt
-
C Cơ Bản: Hàm Strtok - DevIOT
-
Arduino - Chuỗi - Dongthoigian .net
-
Hướng Dẫn Xử Lý Chuỗi Trong Lập Trình Vi điều Khiển (P2) - TAPIT
-
Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study
-
Xử Lý Chuỗi Trong C - Freetuts