Tiếp tục sau bài LED và các ví dụ với Energia thì mình giới thiệu với các bạn các ví dụ về lập trình ADC và Serial với TIVA C dùng Energia.
Mình lại tiếp tục đăng lại hình sơ đồ chân của TIVA dùng trong Energia
Đọc giá trị điện áp
Có một điểm lưu ý ở TIVA là độ phân giải của ADC là 12 bit hơn hẳn so với 10 bit của Arduino, đo đó cho chúng ta có thể đọc được giá trị chính xác hơn, trong ví dụ dưới thì chỉ vài dòng lệnh là ta đã có thể đọc được ADC giá trị điện áp một cách nhanh chóng.
Ví dụ sử dụng biến trở kết nối với chân A3 (chân số 18 của TIVA)
//Chuong trinh doc gia tri dien ap cua bien tro
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop()
{
// put your main code here, to run repeatedly:
int sensorValue = analogRead(A3);
//Chuyen gia tri tuong tu(0-4096 tuong ung voi dien ap la 0-3.3V)
float voltage = sensorValue * (3.3/4096.0);
//Xuat gia tri doc duoc len man hinh
Serial.println(voltage);
}
Đọc biến trở điều khiển độ sáng LED
Sau khi đã đọc được giá trị ADC từ biến trở thì ta thử sử dụng các giá trị này để lập trình điều khiển LED xem sao
Ở ví dụ này chuyển sang dùng chân A0(chân 29) và LED xanh chân 40
//Chuong trinh ket hop doc bien tro dieu khien chop tat LED
//Khai bao bien
const int analogInPin = A0;
const int analogOutPin = 40; //Blue LED
int sensorValue = 0;
int outputValue = 0;
void setup()
{
// put your setup code here, to run once:
//Cau hinh uart hien thi du lieu
Serial.begin(9600);
}
void loop()
{
// put your main code here, to run repeatedly:
//Doc gia tri bien tro
sensorValue = analogRead(analogInPin);
//Map gia tri nay voi nguong cua gia tri analog out
outputValue = map(sensorValue,0 , 4096,0,255);
//Thay doi gia tri cua analog out
analogWrite(analogOutPin, outputValue);
//In cac gia tri len may tinh
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.print(outputValue);
Serial.print("\n");
//Doi 10ms cho den vong lap tiep theo
delay(10);
}
In bảng mã ASCII
Tiếp tục với giao tiếp máy tính bằng cách in bảng mã ASCII ra màn hình máy tính thông qua terminal có sẵn từ Energia với tốc độ baud là 9600
/*
ASCII table
Prints out byte values in all possible formats:
* as raw binary values
* as ASCII-encoded decimal, hex, octal, and binary values
For more on ASCII, see http://www.asciitable.com and http://en.wikipedia.org/wiki/ASCII
created 2006
by Nicholas Zambetti
modified 9 Apr 2012
by Tom Igoe
modified 25 April 2013
by Sean Alvarado
---------------------------------------------------
Yêu cầu phần cứng:
* TIVA LaunchPad
This example code is in the public domain.
*/
void setup() {
//Mở cổng COM để giao tiếp với tốc độ baud 9600
Serial.begin(9600);
// In tiêu đề
Serial.println("ASCII Table ~ Character Map");
}
// Kí tự đầu tiên trong bảng mã ASCII '!' tương ứng với 33:
int thisByte = 33;
// Bạn có thể khai báo cách khác như
// int thisByte = '!';
void loop() {
// Bắt đầu in giá trị
Serial.write(thisByte);
Serial.print(", dec: ");
// In giá trị dưới dạng số thập phân đây là định dạng mặc định khi dùng
// Serial.print() và Serial.println(),
Serial.print(thisByte);
//Dòng lệnh bên dưới sẽ tương ứng là cách khác để in số thập phân
// Serial.print(thisByte, DEC);
Serial.print(", hex: ");
// In giá trị dưới dạng số thập lục phân
Serial.print(thisByte, HEX);
Serial.print(", oct: ");
// In giá trị dưới dạng số bát phân
Serial.print(thisByte, OCT);
Serial.print(", bin: ");
// In giá trị dưới dạng hệ số nhị phân
Serial.println(thisByte, BIN);
// Nếu giá trị cuối cùng là '~' hoặc 126 thì dừng lại:
if(thisByte == 126) { // bạn có thể sử dụng cách khác là (thisByte == '~') {
// Vòng lặp vô tận không làm gì cả
while(true) {
continue;
}
}
// In tiếp các kí tự tiếp theo
thisByte++;
}
Sự kiện với Serial
Sau khi đã in đươc giá trị lên máy tính thông qua terminal thì thử lập trình sự kiện với Serial, ở đây có thể xem như là ngắt UART, cứ có dữ liệu tới thông qua chân RX thì sẽ lưu giá trị lại
Trong ví dụ này sẽ thực hiện bắt dòng chữ mình gõ trên terminal, bạn có thể thấy khi mình gõ chữ Hello và ấn enter sẽ hiện ra ngay dòng chữ ở bên dưới.
Lưu ý là chọn newline ngay bên cạnh tốc độ baud 9600 nhé.
/*
Ví dụ về Serial Event
Khi có dữ liệu tới thì thêm dữ liệu vào chuỗi và khi
nhận được dấu xuống dòng '\n' (newline) thì sẽ in ra chuỗi
và dừng quá trình nhận đồng thời xóa chuỗi.
Chương trình này có thể được sử dụng để nhận tín hiệu GPS
Created 9 May 2011
by Tom Igoe
Modified 24 April 2013
by Sean Alvarado
-----------------------------------------
Hardware Required:
* TIVA LaunchPad
Lưu ý:
Chọn trong terminal hiển thị của Energia là newline
This example code is in the public domain.
*/
String inputString = ""; // Khai báo chuỗi lưu các data nhận được
boolean stringComplete = false; // biến thông báo nhận chuỗi thành công
void setup() {
// Thiết lập cổng COM giao tiếp tốc độ baud 9600
Serial.begin(9600);
// khai báo 200 byte cho inputString:
inputString.reserve(200);
}
void loop() {
// In chuỗi khi có một dòng mới
if (stringComplete) {
Serial.println(inputString);
// Xóa chuỗi:
inputString = "";
stringComplete = false;
}
}
/*
SerialEvent xảy ra khi có dữ liệu trên RX. Chương trình này
chạy mỗi khi có loop(), do đó nếu sử dụng delay trong hàm loop
sẽ tăng thời gian nhận phản hồi.
*/
void serialEvent() {
while (Serial.available()) {
// Nhận byte mới:
char inChar = (char)Serial.read();
// thêm byte này vào inputString:
inputString += inChar;
// Nếu có kí tự mới là newline, set cờ
if (inChar == '\n') {
stringComplete = true;
}
}
}
Bạn có thể thay đổi tốc độ baud 9600 thành 115200 hoặc các tốc độ khác qua dòng lệnh Serial.begin(x); với x là tốc độ baud
Tạm kết
Thế là mình đã giới thiệu xong 2 bài ADC và giao tiếp với máy tính, các bạn có thể thấy là nếu lập trình giống Arduino thì rất đơn giản và không phải mất thời gian để cấu hình nhiều như cách lập trình thông thường.