[ĐLĐK] Bài 02: GIỚI THIỆU VỀ BOARD THÍ NGHIỆM & LẬP TRÌNH ARDUINO



Nội dung thực hành
a. Lập trình điều khiển LED đơn
            Kết quả đạt được:
                        - Khi mới cấp điện(Reset), các 8 led chớp tắt 5 lần
                        - Sau đó thực hiện chu kỳ vô tân gồm: dịch 1 led từ trái sang phải (DO -> D7), trì hoàn 0.5s
                                    + Hiệu ứng 1: Các led dịch từ trái sang phải
                                    + Hiệu ứng 2: Các led sáng dần từ phải sang trái
                                    + Hiệu ứng 3: Các led sáng dần từ trái sang phải
BUOI_2_CAU_A_CODE_2_1
// khai bao chan vao ra
const char PinOut[] = {22,23,24,25,26,27,28,29};
//=====
void setup(){
  for(int i = 0; i< 8 ; i++)
  pinMode(PinOut[i], OUTPUT);
  blink(5);//ham chop tat led 5 lan

}

//====
void loop(){
  shiftLeft(); // ham dich trai Led
  delay(500); // ham delay 1S = 1000ms
  shiftRight();
  delay(500);
  LeftToRight();
  delay(500);

}
//
// ham ddua 1 byte ra 8 led
void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
// ham blink 8 lED
void blink(char n){
  for(int i=0;i<n;i++){
    ShiftOut(0xff); // cho tat ca cac led sang
    delay(500); // tri hoan thoi gian 500ms
    ShiftOut(0x00);//cho tat ca cac led tat
    delay(500);
  }
}
//ham dich led tu phai sang trai
void shiftLeft(){
  char dat = 0x01;
  for(int i=0;i<8;i++){
    ShiftOut(dat);
    delay(500);
    dat = dat<<1; // dich tai 1 bit
  }
}
void shiftRight(){
  char dat = 0x80;
  for(int i=0;i<8;i++){
    ShiftOut(dat);
    delay(500);
    dat = ((dat>>1)&(0x7F)); // dich phai 1 bit
  }
}
void LeftToRight(){
  char dat = 0x80;
  for(int i=0;i<8;i++){
    ShiftOut(dat);
    delay(500);
    dat = (dat>>1); // dich phai 1 bit
  }
}
b. Lập trình điều khiến LED 7 đoạn
            Kết quả đạt được:
                        - Khi mới cấp điện(Reset), led 7 đoạn hiển thị 0000
                        - Khi KI tác động: số đếm trên led 7 đoạn tăng 1 đơn vị
                        - Khi K2 tác động: số đếm trên led 7 đoạn giảm 1 đơn vị
                        - Khi K3 tác động: số đếm trên led 7 đoạn reset về 0000
                        - Khi mới cấp điện(Reset), led 7 đoạn hiển thị 0000
                        - Khi KI tác động: số đếm trên led 7 đoạn tăng 1 đơn vị và dừng đếm
                        - Khi K2 tác động: số đếm trên led 7 đoạn giảm 1 đơn vị và dừng đếm
                        - Khi K3 tác động: số đếm trên led 7 tự động tăng với chu kỳ T = ls (giây)
                        - Khi K4 tác động: số đếm trên led 7 tự động giảm với chu kỳ T= ls (giây)

BUOI_2_CAU_B_CODE_2_2
// khai bao chan vao ra
const char PinOut[] = {22,23,24,25,26,27,28,29};
const char ctr[] = {37,36,35,34};
#define K1 44
#define K2 46
#define K3 43
#define K0 42
#define COM 33
// khai bao bang ma led 7 doan
const unsigned char code7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
// khai bao bien
char leddat[4] = {4,3,2,1}; // vung nho du lieu can hien thi
char index; // nho vi tri led dang quet
// khai bao bien chuong trinh
int Status=0,Interval=0;
int counter = 0;
/// ddinh nghia ham con
// ham cap nhat gia tri hien thi
 void toDisp(int counter){
  leddat[3] = counter/1000;
  leddat[2] = (counter%1000)/100;
  leddat[1] = ((counter%1000)%100)/10;
  leddat[0] = counter%10;
 }
// ham dua 1 byte ra 8 led
void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
// daon chuong trinh khoi dong
void setup(){
  for(int i=0;i<8;i++) pinMode(PinOut[i],OUTPUT);
  for(int i=0;i<4;i++) pinMode(ctr[i],OUTPUT);
  pinMode(COM,OUTPUT); digitalWrite(COM,LOW);
  pinMode(K1,INPUT_PULLUP);
  pinMode(K2,INPUT_PULLUP);
  pinMode(K3,INPUT_PULLUP);
}
 // chuong trinh chinh
 void loop(){
  // doc va xua ly phim an
if(digitalRead(K0)==0)
{
counter++; Status=0;
}
if(digitalRead(K1)==0)
{
counter--; Status=1;
}
if(digitalRead(K2)==0) Status=2;
if(digitalRead(K3)==0) Status=3;
if(Interval++>20)
{
Interval=0;
if(Status==2) counter++;
if(Status==3) counter--;
}

  toDisp(counter);
  Scanled();
  delay(5);
 }
 //===
 void Scanled(){
  char ch;
  ch = leddat[index];
  ShiftOut(code7seg[ch]); // xuat du lieu ra led
  // control led
  digitalWrite(ctr[index],LOW);
  digitalWrite(ctr[index == 0?3:(index-1)],HIGH);
  // tang vi tri led
  index++;
  if(index>=4)index = 0;

 }

c. Lập trình đọc tín hiệu analog
            Kết quả đạt được:
                        - Khi mới cấp điện(Reset), các 8 led chớp tắt 5 lần
                        - Sau đó đọc tín hiệu analog từ các biến trở và xuất giá trị PWM ra các LED RGB
Bài tập thực hành
            + BT1.4: Viết chương trình đọc giá trị biến trở VR1 và hiển thị ra LED 7 đoạn.
BUOI_2_BT_1.4
const char PinOut[] = {22,23,24,25,26,27,28,29};
const char ctr[] = {37,36,35,34};
// KHAI BAO CHAN VAO RA
#define VR1 A3
#define VR2 A2
#define VR3 A4
#define PHOTO A1
#define COM 33
char leddat[4] = {4,3,2,1}; // vung nho du lieu can hien thi
char index; // nho vi tri led dang quet
// khai bao bien chuong trinh
int Status=0,Interval=0;
unsigned int counter = 0;
const unsigned char code7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 unsigned int val1,val2,val3;
 void toDisp(int counter){
  leddat[3] = counter/1000;
  leddat[2] = (counter%1000)/100;
  leddat[1] = ((counter%1000)%100)/10;
  leddat[0] = counter%10;
 }
void setup()
  {
  for(int i=0;i<8;i++) pinMode(PinOut[i],OUTPUT);
  for(int i=0;i<4;i++) pinMode(ctr[i],OUTPUT);
  pinMode(COM,OUTPUT); digitalWrite(COM,LOW);
  }
 void loop(){
val1 = analogRead(VR1);
counter=val1;
  toDisp(counter);
  Scanled();
  delay(5);
 }


void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
void Scanled(){
  char ch;
  ch = leddat[index];
  ShiftOut(code7seg[ch]); // xuat du lieu ra led
  // control led
  digitalWrite(ctr[index],LOW);
  digitalWrite(ctr[index == 0?3:(index-1)],HIGH);
  // tang vi tri led
  index++;
  if(index>=4)index = 0;

 }
            + BT1.5: Viết chương trình đọc giá trị cảm biến LM35 và hiển thị ra LED 7 đoạn.
BUOI_2_BT_1.5
const char PinOut[] = {22,23,24,25,26,27,28,29};
const char ctr[] = {37,36,35,34};
// KHAI BAO CHAN VAO RA
#define VR1 A3
#define VR2 A2
#define VR3 A4
#define PHOTO A1
#define LM35 A0
#define COM 33
char leddat[4] = {4,3,2,1}; // vung nho du lieu can hien thi
char index; // nho vi tri led dang quet
// khai bao bien chuong trinh
int Status=0,Interval=0;
int counter = 0;
const unsigned char code7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 int val1,val2,val3;
 void toDisp(int counter){
  leddat[3] = counter/1000;
  leddat[2] = (counter%1000)/100;
  leddat[1] = ((counter%1000)%100)/10;
  leddat[0] = counter%10;
 }
void setup()
  {
  for(int i=0;i<8;i++) pinMode(PinOut[i],OUTPUT);
  for(int i=0;i<4;i++) pinMode(ctr[i],OUTPUT);
  pinMode(COM,OUTPUT); digitalWrite(COM,LOW);
 
  }
 void loop(){
val1 = analogRead(LM35);
counter=val1;
  toDisp(counter);
  Scanled();
  delay(5);
 }


void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
void Scanled(){
  char ch;
  ch = leddat[index];
  ShiftOut(code7seg[ch]); // xuat du lieu ra led
  // control led
  digitalWrite(ctr[index],LOW);
  digitalWrite(ctr[index == 0?3:(index-1)],HIGH);
  // tang vi tri led
  index++;
  if(index>=4)index = 0;

 }
            + BT1.6*: Viết chương trình đọc giá trị biến trở VR1, VR2, VR3, cảm biến LM35 và hiển thị ra LED 7 đoạn (việc lựa chọn giá trị hiển thị được thực hiện bằng phím K0), cụ thể:
BUOI_2_BT_1.6
const char PinOut[] = {22,23,24,25,26,27,28,29};
const char ctr[] = {37,36,35,34};
#define K1 44
#define K2 46
#define K3 43
#define K0 42
#define LEDR 13
#define LEDB 11
#define LEDG 12
// KHAI BAO CHAN VAO RA
#define VR1 A3
#define VR2 A2
#define VR3 A4
#define PHOTO A1
#define LM35 A0
#define COM 33
char leddat[4] = {4,3,2,1}; // vung nho du lieu can hien thi
char index; // nho vi tri led dang quet
// khai bao bien chuong trinh
int Status=0,Interval=0;
int counter = 0;
const unsigned char code7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 int val1=0,val2=0,val3=0,val4,val5;
 void toDisp(int counter){
  leddat[3] = counter/1000;
  leddat[2] = (counter%1000)/100;
  leddat[1] = ((counter%1000)%100)/10;
  leddat[0] = counter%10;
 }

void setup() {
  // put your setup code here, to run once:
for(int i=0;i<8;i++) pinMode(PinOut[i],OUTPUT);
  for(int i=0;i<4;i++) pinMode(ctr[i],OUTPUT);
  pinMode(COM,OUTPUT); digitalWrite(COM,LOW);
  pinMode(K1,INPUT_PULLUP);
  pinMode(K2,INPUT_PULLUP);
  pinMode(K3,INPUT_PULLUP);
  pinMode(K0,INPUT_PULLUP);
 
}

void loop() {
   
  if(digitalRead(K0)==0) {
    delay(5);Status++;}
if(Status>5) Status=1;  
   
  // put your main code here, to run repeatedly:
switch (Status)
{
    case 1:
    { analogWrite(LEDG,0);
      analogWrite(LEDB,0);
      analogWrite(LEDR,255);
        val1 = analogRead(VR1);
        toDisp(val1);
        Scanled();
        delay(5);
       break;
         
      
    }
    case 2:
    {   analogWrite(LEDG,255);// Blue
      analogWrite(LEDB,0);
      analogWrite(LEDR,0);
        val1=0;
        val2 = analogRead(VR2);
        toDisp(val2);
        Scanled();
        delay(5);
         break;
       
     
      
    }
    case 3:
    { analogWrite(LEDG,0);
      analogWrite(LEDB,255);
      analogWrite(LEDR,0);
        val2=0;
        val3 = analogRead(VR3);       
        toDisp(val3);
        Scanled();
        delay(5);
        break;
    }
    case 4:
    {  
      analogWrite(LEDG,0);
      analogWrite(LEDB,0);
      analogWrite(LEDR,0);
       val3=0;
    
        val4 = analogRead(LM35);
       
        toDisp(val4);
        Scanled();
        delay(5);
        break;
    }
   
   
}
}
void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
void Scanled(){
  char ch;
  ch = leddat[index];
  ShiftOut(code7seg[ch]); // xuat du lieu ra led
  // control led
  digitalWrite(ctr[index],LOW);
  digitalWrite(ctr[index == 0?3:(index-1)],HIGH);
  // tang vi tri led
  index++;
  if(index>=4)index = 0;

 }
            Kết quả đạt được:
            - Khi K0 ấn lần thứ 1, LED 7 đoạn hiển thị giá trị của VR1
            - Khi K0 ấn lần thứ 2, LED 7 đoạn hiển thị giá trị của VR2
            - Khi K0 ấn lần thứ 3, LED 7 đoạn hiển thị giá trị của VR3
            - Khi K0 ấn lần thứ 4, LED 7 đoạn hiển thị giá trị của cảm biến LM35
            - Khi K0 ấn lần thứ 5, quay về lần thứ

BUOI_2_CAU_C_CODE_2_3
const char PinOut[] = {22,23,24,25,26,27,28,29};
// KHAI BAO CHAN VAO RA
#define VR1 A3
#define VR2 A2
#define VR3 A4
#define LEDR 13
#define LEDG 11
#define LEDB 12

// KHAI BAO BIEN CHUONG TRINH
 int val1,val2,val3;

 void setup(){
  pinMode(LEDR,OUTPUT);
  pinMode(LEDG,OUTPUT);
  pinMode(LEDB,OUTPUT); 

  analogWrite(LEDR,0);
  analogWrite(LEDG,0);
  analogWrite(LEDB,0);
  for(int i = 0; i< 8 ; i++)
  pinMode(PinOut[i], OUTPUT);
  blink(5);//ham chop tat led 5 lan
 }
 //
  void loop(){
// DOC BIEN TRO VR1 => XUAT LA LED RED
    val1 = analogRead(VR1);
    val1 = map(val1,0,1024,0,225);
    analogWrite(LEDR,val1);

// DOC BIEN TRO VR2 => XUAT LA LED GREEN
    val2 = analogRead(VR2);
    val2 = map(val2,0,1024,0,225);
    analogWrite(LEDG,val2);
   
// DOC BIEN TRO VR3 => XUAT LA LED BLUE
    val3 = analogRead(VR3);
    val3 = map(val3,0,1024,0,225);
    analogWrite(LEDB,val3);
    delay(200);
   
  }
  void blink(char n){
  for(int i=0;i<n;i++){
    ShiftOut(0xff); // cho tat ca cac led sang
    delay(500); // tri hoan thoi gian 500ms
    ShiftOut(0x00);//cho tat ca cac led tat
    delay(500);
  }
}
void ShiftOut(char dat){
  for (int i=0;i<8;i++){
    if(dat&0x01)digitalWrite(PinOut[i],HIGH);
    else digitalWrite(PinOut[i],LOW);
    dat=dat>>1;
  }
}
d. Giao tiếp và hiển thị trên LCD 16x2
            Kết quả đạt được:
            - Đọc trạng thái phím ấn và hiên thị ra dòng thứ 1
            - Đọc giá trị cảm biến nhiệt độ và cảm biến ánh sáng hiển thị dòng 2


Không có nhận xét nào

Được tạo bởi Blogger.