TRƯỜNG ĐẠI HỌC KHOA HỌC HUẾ
KHOA ĐIỆN TỬ-VIỄN THÔNG
BÀI BÁO CÁO
THỰC HÀNH
CƠ SỞ ĐIỆN TỬ - VIỄN THÔNG II
Giáo Viên Hướng Dẫn:
NGUYỄN ĐỨC NHẬT QUANG
Sinh Viên Thực Hiện:
LÊ VĂN ĐÁ
LÊ CƠNG NGUN
LÊ CƠNG TRÌNH
TRẦN VIẾT KHÁNH
Nhóm:3
Lớp Điện Tử Viễn Thơng K37
1
Năm Học:2016-2017
2
BÀI 1 : ĐIỀU KHIỂN HOẠT ĐỘNG LED BẰNG MÁY TÍNH
I. Kết quả thực hiện:
1. Kết quả thực hành :
- Những kết quả làm được:
+ Thiết kế được giao diện bằng Visual studio 2010 trên PC.
+ Điều khiển được hoạt động của LED đơn ,Led RGB bằng lập trình trên Kit Ardunio Intel Gallileo
Gen 2.
+ Gộp code để điều khiển mã Morse .
+ Sáng dần, tắt dần, chạy vòng, sáng tuần tự, tắt tuần tự.
-Chưa làm được:
Khơng có.
2. Lưu đồ thuật toán :
a.Lưu đồ thuật toán trên Arduino:
3
Bắt Đầu
Khai báo giao tiếp cổng COM
khi báo các biến
Đọc dữ liệu nhận được từ cổng COM
Thiết lập trạng thái đàu của các Led đơn và Laze
Nhận các kí tự đặc biệt
Sai
Đúng
Tắt bật các Led đơn hoặc Led RBG
Nhận kí tự A-Z hoặc số
Sai
Đúng
Phát tín hiệu Laze theo mã morse
Tắt nguồn
4
Đúng
Kết thúc
Sai
b. Lưu đồ thuật toán Visual studio:
Bắt Đầu
Khai báo chọn cổng COM
Sai
Kiểm tra chọn cổng
Đúng
Tạo kết nối
Sai
Kiểm tra nút nhấn điều khiển LED
Gửi các kí tự đặc biệt qua cổng COM
Đúng
Sai
Kiểm tra nút nhấn gửi mã morse
5
Đúng
Gửi các kí tự trong ơ textbox qua cổng COM
Kết thúc
3. Thiết kế giao diện
6
7
II. Lập trình:
a. Code trên Arduino Intel Gallileo Gen 2:
byte rbg[]={6, 5, 3};
byte led[]={8,9,10,11,12};
int led1 = 8;
int led2 = 9;
int led3 = 10;
int led4 = 11;
int led5 = 12;
int Red = 6;
int Green =5;
int Blue = 3;
String dt;
void setup(){
// Khai báo giá trị ban đầu cho các chân điều khiển
for(int i=0; i<5; i++){
pinMode(led[i], OUTPUT);
}
for(int i=0; i<3; i++){
pinMode(rbg[i], OUTPUT);
}
for(int i=0; i<5; i++){
digitalWrite(led[i], LOW);
}
for(int i=0; i<3; i++){
analogWrite(rbg[i], 0);
}
Serial.begin(9600);
}
void loop(){
dt = Serial.readString(); // đọc giá trị nhận được.
8
if(dt == "cv"){ // chạy vòng bắt đầu bằng red, green, blue
for(int r=0; r<100; r++){
for(int l=0; l<4; l++){
analogWrite(rbg[l], 255);delay(20);
analogWrite(rbg[l], 0);delay(10);
}
}
}
if(dt=="sd") { // đèn red sáng dần
for(int lucdau=0;lucdau<255;lucdau++){
analogWrite(Red, lucdau);
delay(30);
}
}
if(dt=="td"){
for(int lucdau=255;lucdau>0;lucdau--){
analogWrite(Red, lucdau);
delay(30);
}
}
if(dt=="led1s"){// đèn led1 sáng
digitalWrite(led1, HIGH);
}
if(dt=="led1t") { // đèn led1 tắt
digitalWrite(led1, LOW);
}
if(dt=="led2s"){// đèn led2 sáng
digitalWrite(led2, HIGH);
}
if(dt=="led2t"){// đèn led2 tắt
digitalWrite(led2, LOW);
}
9
if(dt=="led3s"){// đèn led3 sáng
digitalWrite(led3, HIGH);
}
if(dt=="led3t"){// đèn led3 tắt
digitalWrite(led3, LOW);
}
if(dt=="led4s"){// đèn led4 sáng
digitalWrite(led4, HIGH);
}
if(dt=="led4t"){// đèn led4 tắt
digitalWrite(led4, LOW);
}
if(dt=="led5s"){// đèn led5 sáng
digitalWrite(led5, HIGH);
}
if(dt=="led5t"){// đèn led5 tắt
digitalWrite(led5, LOW);
}
if(dt=="5leds"){ // 5 led sáng cùng lúc
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
if(dt=="5ledt"){
// 5 led tắt cùng lúc
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
10
if(dt=="red"){// Red sáng
analogWrite(Red, 255);
}
if(dt=="green"){// Green sáng
analogWrite(Green, 255);
}
if(dt=="blue"){
// Blue sáng
analogWrite(Blue, 255);
}
if(dt=="rbgt"){ // Đèn RBG tắt
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 0);
}
if(dt == "do"){
analogWrite(Red, 255);
analogWrite(Green, 0);
analogWrite(Blue, 0);
}
if(dt == "xanh"){
analogWrite(Red, 0);
analogWrite(Green, 255);
analogWrite(Blue, 0);
}
if(dt == "xanhd"){
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 255);
}
11
if(dt == "rbgs"){ // RBG sáng
analogWrite(Red, 255);
analogWrite(Green, 255);
analogWrite(Blue, 255);
}
if(dt=="5ledsd")
// 5 led sáng dần
{ for(int i=0; i<5;i++)
{
digitalWrite(led[i], 1);delay(100);
}
}
if(dt=="5ledtd")
// 5 led tắt dần.
{ for(int i=0; i<5;i++)
{
digitalWrite(led[i], 0);delay(100);
}
}
/// Mã morse
if( dt == "A"){
cham();gach();
}
if( dt == "B"){
gach();cham();cham();cham();
}
if( dt == "C"){
gach();cham();gach();cham();
}
if( dt == "D"){
gach();cham();cham();
}
if( dt == "E"){
cham();
}
12
if( dt == "F"){
cham();cham();gach();cham();
}
if( dt == "G"){
gach();gach();cham();
}
if( dt == "H"){
cham();cham();cham();
}
if( dt == "I"){
cham();cham();
}
if( dt == "J"){
cham();gach();gach();gach();
}
if( dt == "K"){
gach();cham();gach();
}
if( dt == "L"){
cham();gach();cham();cham();
}
if( dt == "M"){
gach();gach();
}
if( dt == "N"){
gach();cham();
}
if( dt == "O"){
gach();gach();gach();
}
if( dt == "P"){
cham();gach();gach();cham();
}
13
if( dt == "Q"){
gach();gach();cham();gach();
}
if( dt == "R"){
cham();gach();cham();
}
if( dt == "S"){
cham();cham();cham();
}
if( dt == "T"){
gach();
}
if( dt == "U"){
cham();cham();gach();
}
if( dt == "V"){
cham();cham();cham();gach();
}
if( dt == "W"){
cham();gach();gach();
}
if( dt == "X"){
gach();cham();cham();gach();
}
if( dt == "Y"){
gach();cham();gach();gach();
}
if( dt == "Z"){
gach();gach();cham();cham();
}
if( dt == "1"){
cham();gach();gach();gach();gach();
}
14
if( dt == "2"){
cham();cham();gach();gach();gach();
}
if( dt == "3"){
cham();cham();cham();gach();gach();
}
if( dt == "4"){
cham();cham();cham();cham();gach();
}
if( dt == "5") {
cham();cham();cham();cham();cham();
}
if( dt == "6"){
gach();cham();cham();cham();cham();
}
if( dt == "7"){
gach();gach();cham();cham();cham();
}
if( dt == "8"){
gach();gach();gach();cham();cham();
}
if( dt == "9"){
gach();gach();gach();gach();cham();
}
if( dt == "0"){
gach();gach();gach();gach();gach();
}
}
15
// chương trình mã morse
void cham(){
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
delay(100);
}
void gach(){
digitalWrite(led1, HIGH);
delay(300);
digitalWrite(led1, LOW);
delay(300);
}
16
b. Code trong Visual studio
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
System.IO.Ports;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] ComList = SerialPort.GetPortNames();
Array.Sort(ComList);
cbxComList.Items.AddRange(ComList);
}
private void ktCom_Click(object sender, EventArgs e)
{
if (cbxComList.Text == "")
{
MessageBox.Show(" Vui lòng chọn cổng COM", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (serialPort.IsOpen)
{
serialPort.Close();
ktCom.Text = "Kết nối";
}
else
{
try
{
serialPort.PortName = cbxComList.Text;
serialPort.Open();
17
ktCom.Text = "Ngắt kết nối";
}
catch
{
MessageBox.Show("Không thể mở cổng COM" + serialPort.PortName,
"Lỗi",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void led1_Click(object sender, EventArgs e)
{
serialPort.Write("led1s"); // đèn led1 sáng.
}
private void led2_Click(object sender, EventArgs e)
{
serialPort.Write("led2s"); // đèn led2 sáng.
}
private void led3_Click(object sender, EventArgs e)
{
serialPort.Write("led3s"); // đèn led3 sáng.
}
private void led4_Click(object sender, EventArgs e)
{
serialPort.Write("led4s"); // đèn led4 sáng.
}
private void led5_Click(object sender, EventArgs e)
{
serialPort.Write("led5s"); // đèn led5 sáng.
}
private void reset5led_Click(object sender, EventArgs e)
{
serialPort.Write("5ledt"); // tất cả 5 led đều tắt.
}
private void red_Click(object sender, EventArgs e)
{
serialPort.Write("red"); // Red sáng.
}
private void green_Click(object sender, EventArgs e)
{
serialPort.Write("green"); // Green sáng.
}
private void blue_Click(object sender, EventArgs e)
{
serialPort.Write("blue"); // Blue sáng.
}
18
private void resetRBG_Click(object sender, EventArgs e)
{
serialPort.Write("rbgt"); // đèn RBG tắt.
}
private void mamorse_Click(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
if ((dulieu.Text == ""))
{
MessageBox.Show("Chưa có dữ liệu!", "Thông Báo");
}
else
{
serialPort.Write(dulieu.Text);
dulieu.Text = "";
}
}
else
{
MessageBox.Show("COM chưa mở.", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
private void sangdan_Click(object sender, EventArgs e)
{
serialPort.Write("sd"); // Red sáng dần.
}
private void modan_Click(object sender, EventArgs e)
{
serialPort.Write("td"); // Red tắt dần.
}
private void chayvong_Click(object sender, EventArgs e)
{
serialPort.Write("cv"); // chạy vòng.
}
private void stuantu_Click(object sender, EventArgs e)
{
serialPort.Write("5ledsd"); // 5 led sáng dần.
}
private void ttuantu_Click(object sender, EventArgs e)
{
serialPort.Write("5ledtd");// 5 led tắt dần.
}
}}
19
BÀI 2 : HIỂN THỊ LCD 16X2 THEO NỘI DUNG
NHẬP TỪ MÁY TÍNH
I. Kết quả thực hiện:
1. Kết quả thực hành :
- Những kết quả làm được:
+ Thiết kế được giao diện Visaul studio 2010 trên PC .
+ Hiển thị được chuỗi các kí tự nhập từ bàn phím bằng lập trình trên Kit Ardunio Intel Gallileo
Gen 2.
+ Khi vượt quá 16 ký tự tự độngxuống dòng, xuống dòng nguyên chữ, khi vượt quá 32 ký tự tự
động cuộn.
- Chưa làm được:
Khơng có
2. Lưu đồ thuật tốn :
a. Lưu đồ thuật toán Ardunio :
20
Bắt đầu
Khai báo giao tiếp cổng COM
Khai báo các biến
Sai
Đúng
Đọc dữ liệu từ cổng COM
Gán dữ liệu nhận được vào chuỗi
Hiển thị LCD
Tắt nguồn
Kết thúc
21
b. Lưu đồ thuật toán trong visual studio:
Bắt đầu
Sai
Sai
Đúng
Đúng
Khai báo chọn công COM
Kiểm tra chọn cổng
Tạo tuyến nối
Kiểm tra nút gửi dữ liệu qua cổng có đươc thực
hiện khơng
Gửi các ký tự trong ô textbox qua cổng COM
Kết thúc
22
3. Thiết kế giao diện:
23
II. Lập trình:
a. Code trên Arduino Intel Gallileo Gen 2:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // khai báo chân lcd
char a;
String chuoi_con,chuoi,b,c;
int i,j;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop()
{ if(Serial.available()>0)
// nếu có dữ liệu nhập vào.
{ delay(200);
lcd.clear(); // thì xóa dữ liệu cũ đi.
i=1;
chuoi=chuoi_con="";
// lúc đầu chuỗi bằng chuỗi con bằng rỗng.
while(Serial.available()>0) // nếu có dữ liệu nhập vào.
{ a=Serial.read();
// gán dữ liệu nhận được vào a.
chuoi_con+=a;
// dữ liệu bằng chuỗi con cộng với dữ liệu nhận được.
if(a==' ')
// so sánh dữ liệu nhận được với khoảng trống
{ chuoi+=chuoi_con;
// dữ liệu lúc này sẽ bằng chuỗi cộng với chuỗi con.
chuoi_con="";
}
if(i==17)
{ lcd.clear();
lcd.print(chuoi);
// in dữ liệu ở mảng chuỗi ra màn hình LCD
b=chuoi;
//dùng cho chạy chữ hàng 2
lcd.setCursor(0,1);
// đặt con trỏ ở vị trí cột dầu tiên ở hàng hai
lcd.print(chuoi_con);
// in dữ liệu ở mảng chuỗi con ra màn hình.
c=chuoi_con;
//dùng cho chạy chữ hàng 2
}
else if(i>17)
{ lcd.write(a);
// nếu dữ liệu lớn hơn 17 thì chuỗi con cộng với những ký tự
18 trở lên
c+=a;
//dùng cho chạy chữ hàng 2
24
}
else
lcd.write(a);
i++;
delay(100);
}
}
if(c.length()>16)
// so sánh độ dài chuỗi c với 16, nếu c>16 thì cuộn dịng.
{ for ( i = 0;i
{ if(Serial.available()>0) break;
lcd.clear();
lcd.print(b);
lcd.setCursor(0,1);
for (j=i;j
lcd.print(c.charAt(j));
// truy cập vào mảng ký tự chuỗi c, và cuộn theo độ dài
chuỗi c
delay(300);
}
}
}
25