Results for "led đơn"
Arduino giao tiếp với Button (phần 3):Một nút nhấn điều khiển 2 led đơn theo từng chế độ

Nội dung

  • Sau đây là ví dụ về điều khiển 2 led đơn bằng 1 nút nhấn.

  • Ở chế độ này thì gồm có 4 thao tác khác nhau. Ban đầu ở chế độ 1 chưa nhấn gì thì cả 2 led tắt, ở chế độ 2 khi nhấn nút led 1 sáng/led 2 tắt, ở chế độ 3 khi nhấn nút led 1 tắt/led 2 sáng, và ở chế độ cuối khi nhấn nút thì cả 2 led đều sáng rồi cứ tiếp tục 4 thao tác lặp đi lặp lại.


Về phần cứng

  1. Board mạch Arduino
  2. Nút nhấn (1 cái)
  3. Điện trở 10k ohm (1 cái) và 220 ohm(2 cái)
  4. Led đơn(2 cái)

Sơ đồ lặp mạch





Lập trình



    int switch = 5;              // nút nhấn được kết nối với pin 5

    int led1 = 8;

    int led2 = 9;

    int val;                         // đọc trạng thái pin
    int val2;                       // đọc trạng thái bị trì hoãn
    int buttonState;           // giữ trạng thái nút
    int mode = 0;              // led sẽ sáng ở chế độ nào

void setup () 
{
      pinMode(switch, INPUT);    // đặt nút nhấn làm ngỏ vào
      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      buttonState = digitalRead(switch);   // đọc trạng thái ban đầu
}

void loop ()
{
      val = digitalRead(switch);      // đọc giá trị đầu vào và lưu trữ nó trong val
      delay(10);                         // 10 mili giây là thời gian chờ
      val2 = digitalRead(switch);     // đọc lại đầu vào để kiểm tra xem có bị trả lại không
      if (val == val2) // make sure we got 2 consistant readings!
        {                 
        if (val != buttonState) // trạng thái nút đã thay đổi!
            {          
             if (val == LOW)// kiểm tra xem nút có được nhấn hay không
             {                
                     if (Mode == 0) 
                      {          
                       Mode = 1;               
                      }
               else 
               {
                     if (Mode == 1) 
                      {        
                       Mode = 2;           
                      } 
               else 
               {
                    if (Mode == 2) 
                      {      
                       Mode = 3;           
                      } 
               else 
                {
                    if (Mode == 3) 
                      { 
                       Mode = 0;          
                      }
                }
                }
                }
               }
           }
        buttonState = val;                // lưu trạng thái mới trong biến của chúng tôi
      }

      //Thiết lập các chế độ
      if (Mode == 0) 
        {                           
          digitalWrite(led1, LOW);
          digitalWrite(led2, LOW);
        }

      if (Mode == 1) 
        { 
          digitalWrite(led1, HIGH);
          digitalWrite(led2, LOW);
        }

      if (Mode == 2) 
        { 
          digitalWrite(led1, LOW);
          digitalWrite(led2, HIGH);
        }
      if (Mode == 3)  
        { 
          digitalWrite(led1, HIGH);
          digitalWrite(led2, HIGH);
        }    
}

Mô phỏng

Gồm có 4 chế độ xác lập trong lập trình:

  • Ở chế độ ban đầu thì cả 2 led đều ở mức thấp nên cả 2 đều tắt.

Chế độ 1



  • Ở chế độ 2, khi nhấn nút led 1 sáng, led 2 tắt.

Chế độ 2



  • Ở chế độ 3, khi nhấn nút led 1 tắt, led 2 sáng.

Chế độ 3



  • Ở chế độ cuối, khi nhấn nút thì cả 2 led đều ở mức cao nên cả 2 đều sáng.




Chúc các bạn thành công ở bài này! 

thitech Thứ Tư, 23 tháng 5, 2018
Pic16F887 - Điều khiển 1 led đơn bằng 2 button .

Giới thiệu :

 Hôm nay mình sẽ hướng dẫn các bạn cách điều khiển 1 led đơn bằng 2 button đơn giản ( 1 button làm led sáng , 1 button làm led tắt ) sử dụng vi điều khiển pic 16f887 . Mời các bạn theo dõi !!!

Chuẩn bị :

Pic16f887 .
Led đơn ( màu sắc tùy ý ) .
Trở : 1 con  (  để bảo vệ led ( tùy theo màu sắc led )
         1 con (1k-10k)
1 button ( 2 pin )

Lắp mạch :


 Code :

#include <16f887.h>
#fuses noprotect, nowdt, nolvp, hs, put
#use delay(clock=20Mhz)
#define bt1 pin_B0
#define bt2 pin_B1
void main()
{
  set_tris_D(0x00);
  set_tris_B(0xff);
   while(TRUE)
   {
     if(!input(bt1))
      {
        do{}
        while (!input(bt1));//chống rung cho button
        output_high(pin_D0);
     }
     if(!input(bt2))
      {
        do{}
        while (!input(bt2));
        output_low(pin_D0);
     }
   }
}

Kết quả :



Có gì thắc mắc các bạn cứ nhận xét bên dưới bài viết nhé ^^ ,
Chúc các bạn thành công .

thitech Thứ Ba, 22 tháng 5, 2018
Pic16F887 - Điều khiển 2 led đơn bằng 1 button .

Giới thiệu :

 Hôm nay mình sẽ hướng dẫn các bạn cách điều khiển 2 led đơn bằng button đơn giản sử dụng vi điều khiển pic 16f887 . Mời các bạn theo dõi !!!

Chuẩn bị :

Pic16f887 .
2 Led đơn ( màu sắc tùy ý ) .
Trở : 2 con  (  để bảo vệ led ( tùy theo màu sắc led )
         1 con (1k-10k)

Lắp mạch :


 Code :

#include <16f887.h>
#fuses noprotect, nowdt, nolvp, hs, put
#use delay(clock=20Mhz)
#define button pin_B0
int8 i; // khai báo biến i
void main()
{
   set_tris_D(0x00);//khởi tạo port D xuất mức thấp
   set_tris_B(0xff);//khởi tạo port B xuất mức cao
   while(TRUE)//vòng lặp
   {
   i=0;//cho ban đầu i=0
      if(!input(button))// kiểm tra trạng thái button
      {
        do{}// chống rung
         while (!input(button));// bấm rồi nhả ra mới tăng giá trị biến i
         i++;
         if(i==4)// nếu i=4 cho i quay về 0
         {
           i=0;
         }
        delay_ms(5);
        if(i==0)
        {
          output_low(pin_D0);
          output_low(pin_D1);
        }
         if(i==1)
        {
          output_high(pin_D0);
          output_low(pin_D1);
        }
         if(i==2)
        {
          output_high(pin_D1);
          output_low(pin_D0);
        }
         if(i==3)
        {
          output_high(pin_D0);
          output_high(pin_D1);
        }
      }
   }

}

Kết quả :

Có gì thắc mắc các bạn cứ nhận xét bên dưới bài viết nhé ^^ ,
Chúc các bạn thành công .

thitech
Pic16F887 - Điểu khiển 1 led đơn bằng button .

Giới thiệu :

 Hôm nay mình sẽ hướng dẫn các bạn cách điều khiển 1 led đơn bằng button đơn giản sử dụng vi điều khiển pic 16f887 . Mời các bạn theo dõi !!!

Chuẩn bị :

Pic16f887 .
Led đơn ( màu sắc tùy ý ) .
Trở : 2 con ( 1 để bảo vệ led ( tùy theo màu sắc led ) 2 để hạn dòng vào pic ( 1k-10k)).

Lắp mạch :

 Code :

#include <16f887.h>
#fuses noprotect, nowdt, nolvp, hs, put
#use delay(clock=20Mhz)
#define led pin_D0// khai báo chân led
#define button pin_B0// khai báo chân button
void main()
{
 set_tris_D(0x00);// khởi tạo port D xuất mức thấp
 set_tris_B(0xff); // khởi tạo port B xuất mức cao
   while(TRUE)
   {
      if(input(button)==0)// nếu ngõ vào chân button là mức thấp thì xuất mức cao chân led
      {// lưu ý là khi nhấn nút phải giữ led mới sáng
       output_high(led);
      }
      else
      {
      output_low(led);// ngược lại mức thấp .
      }
   }

}

Kết quả :

 Khi chưa nhấn nút thì led tắt .

Khi nhấn giữ thì led sáng .
Chúc các bạn thành công .

thitech
Pic16F887 - Led trái tim .

Giới thiệu :

Hôm nay mình sẽ giới thiệu các bạn cách điều khiển 1 dãy led đơn hiển thị hiệu ứng theo hình trái tim ❤ sử dụng pic16f887 . Mời các bạn theo dõi ☺

Chuẩn bị :

Led đơn  : 32 con ( màu sắc tùy ý ) .
Trở : 32 con ( tùy màu sắc led mà chọn ) .
Pic 16F887 .

Lắp mạch :


Code :

#include <16F887.H>
#FUSES NOWDT,PUT,NOPROTECT,NOLVP,INTRC_IO
#USE DELAY(CLOCK=8M)
UNSIGNED INT32 I,X,Y,J,CD,DC,F,K;
VOID SANGHET()
{ SET_TRIS_B(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);

      OUTPUT_B(0XFF); OUTPUT_C(0XFF);OUTPUT_D(0XFF);OUTPUT_A(0XFF);
      DELAY_MS(1000);
      OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);
      DELAY_MS(1000);
    
}
VOID SANGDUOI()
{SET_TRIS_b(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);
  X=0X00000000;
  FOR(I=0;I<32;I++)
   {
      X=(X<<1)+0X01;
      OUTPUT_B(X);
      OUTPUT_C(X>>8);
      OUTPUT_D(X>>16);
      OUTPUT_A(X>>24);
      DELAY_MS(100);
   }
   FOR(I=0;I<32;I++)
   { X=(X>>1);
   OUTPUT_B(X);
   OUTPUT_C(X>>8);
   OUTPUT_D(X>>16);
   OUTPUT_A(X>>24);
   DELAY_MS(100);
   }
}
 VOID SANGXENKE1()
   {
   for(I=0;I<2;I++)
   {
     SET_TRIS_b(0X00);SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);
     OUTPUT_B(0XAA); OUTPUT_C(0XAA);OUTPUT_D(0XAA);OUTPUT_A(0XAA); DELAY_MS(300);
     OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);DELAY_MS(100);
     OUTPUT_B(0X55); OUTPUT_C(0X55);OUTPUT_D(0X55);OUTPUT_A(0X55); DELAY_MS(300);
     OUTPUT_B(0X00); OUTPUT_C(0X00);OUTPUT_D(0X00);OUTPUT_A(0X00);DELAY_MS(100);
  
   }
   }
VOID SANGCAP()
  { SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);X=0X00000000;Y=0X0000;
   FOR (I=0;I<16;I++)
   { 
     X=(X<<1)+0X0001; Y=(Y>>1)+0X8000;
    OUTPUT_B(X); OUTPUT_A(Y>>8);
    OUTPUT_C(X>>8);OUTPUT_D(Y);
    DELAY_MS(500);
   } 
  } 
VOID SANGCAP1()
  { SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);X=0X00000000;Y=0X0000;
    FOR(I=0;I<16;I++)
  {
     X=(X>>1)+0X8000; Y=(Y<<1)+0X0001;
     OUTPUT_C(X>>8);OUTPUT_D(Y);
     OUTPUT_B(X);OUTPUT_A(Y>>8);
     DELAY_MS(300);
  }
  } 
VOID sangdon2()

{   CD=0X00000000;
   FOR ( J=16;J>0;J--)
   {
      DC=0X00000003;
      FOR(I=0;I<J;I++)
     {
       Y=CD+DC;
      OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24); DELAY_MS(100);
      DELAY_MS(100);
      DC=(DC<<2);
     }
     CD=Y;
   }
}
VOID sangdon1()

{   CD=0X00000000;
   FOR ( J=32;J>0;J--)
   {
      DC=0X00000001;
      FOR(I=0;I<J;I++)
     {
       Y=CD+DC;
      OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24); DELAY_MS(40);
      DELAY_MS(100);
      DC=(DC<<1);
     }
     CD=Y;
   }
}
VOID SANG1()
   { X=0X00000001;J=0X80000000;
      FOR(I=0;I<32;I++)
       {
         Y=X;
         OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(Y>>16);  OUTPUT_A(Y>>24);
         DELAY_MS(100);
         X=(X<<1);
       }
      FOR (I=0;I<32;I++)
      {
         F=J;
         OUTPUT_B(F);  OUTPUT_C(F>>8); OUTPUT_D(F>>16);  OUTPUT_A(F>>24);
         DELAY_MS(100);
         J=J>>1;
      }     
   }
VOID SANGNUA()
{CD=0X00000000;DC=0X00000000;
  FOR(I=16;I>0;I--)
   {X=0X0001;J=0X8000;
     FOR (K=0;K<I;K++)
      {
         Y=CD+X ; F=DC+J;
         OUTPUT_B(Y);  OUTPUT_C(Y>>8); OUTPUT_D(F);  OUTPUT_A(F>>8);
         DELAY_MS(100);
         X=(X<<1);J=(J>>1);
      }
     CD=Y ; DC=F;
   }
}
        
      
VOID MAIN()
{ SET_TRIS_B(0X00); SET_TRIS_C(0X00);SET_TRIS_D(0X00);SET_TRIS_A(0X00);
  WHILE (TRUE)
{
SANGHET();
SANGDUOI();
SANGXENKE1();
SANGCAP();
SANGCAP1();
SANGDON1();
SANGDON2();
SANG1();
SANGNUA();
}
}

Thành quả : 


Cũng khá đơn giản phải không nào ^^ Nếu các bạn có thắc mắc gì về bài viết thì hãy nhận xét bên dưới nhé !

thitech
Pic16F887- Điều khiển led chớp tắt .

Giới thiệu :

Hôm nay mình sẽ giới thiệu cho các bạn cách điều khiển 1 led đơn chớp tắt bằng vi điều khiển PIC16F887 . Đây là 1 số thông tin về pic16f887: Wiki Datasheet Sơ đồ chân

Chuẩn bị : 

Pic16F887.
1 led đơn ( đỏ ) .
Trở ( 330 ).

Lắp mạch : 



Code : (dùng  CCS C lập trình )

#include <16f887.h>  // khai báo thư viện pic 16f887
#FUSES NOWDT, HS, PUT, NOLVP, NOPROTECT
#use delay(clock=20M)//xung clock
void main()
{
   set_tris_D(0x00);// khởi tạo port D xuất mức 0 
   while(TRUE)//vòng lặp
   {
      output_high(pin_D0);   // xuất mức cao tại chân D0
      delay_ms(500);         // delay 500 mili s
      output_low(pin_D0);   // xuất mức thấp tại chân D0
      delay_ms(500);      
   }

}

Thành quả : 

Rất đơn giản đúng không nào ! Chúc các bạn thực hiện thành công .

thitech
Arduino giao tiếp với Button (Phần 2): Dùng 1 button để đổi trạng thái của led

Nội dung

  • Dùng button để hoán đổi trạng thái của led.
  • Trạng thái ban đầu led tắt,bắt đầu nhấn nút lần thứ 1 thì led bật,rồi nhấn nút lần thứ 2 thì led tắt cứ tiếp tục cho những lần kế tiếp cho việc lặp lại sáng tắt như vậy.

Về phần cứng

  1. Board mạch Arduino
  2. Button(nút nhấn) 1 cái
  3. Led đơn
  4. Điện trở 10k và 220 Ohm 

Sơ đồ lắp mạch






Lập trình

     byte led = 13; // nối led vào chân 13
     byte button = 2; // nối led vào chân 2
     byte ledStatus = LOW; // trạng thái của led
void setup()
{
       pinMode(led, OUTPUT);
       pinMode(button, INPUT);
       digitalWrite(led, LOW); //ban đầu led tắt
}
void loop()
{
         if (digitalRead(button) == LOW) // nếu nút được nhấn
         {
          while (digitalRead(button) == LOW); // chờ nút nhấn buông

          ledStatus = !ledStatus; // đảo trạng thái led từ LOW -> HIGH
          digitalWrite(led, ledStatus);
          }
}


Mô phỏng

    Ở mô phỏng 1,Ban đầu trạng thái là tắt khi ấn nút và thả ra vào lần 1 thì led sáng 


Mô phỏng 1





   Tiếp tục ở mô phỏng 2 ấn nút và thả ra lần 2 thì led sẽ tắt và cứ thế lặp đi lặp lại liên tục sáng/tắt khi thao tác

Mô phỏng 2



Chúc các bạn thành công!

thitech
Arduino - Giao tiếp với Button (Phần 1): Bật tắt led bằng 2 nút nhấn

Nội dung

   Xác định trạng thái của nút nhấn từ đó chúng ta có thể dùng các button để điều khiển bật tắt đèn led
Từ đó ta cho ra được ví dụ đơn giản về việc điều khiển led bật/tắt bằng 2 nút nhấn.

Yêu cầu phần cứng

  1.   Board mạch Arduino
  2.   Button(nút nhấn) 2 cái
  3.   Led đơn
  4.   Điện trở 220 Ohm

Lắp đặt mạch



Lập trình

     int button1 = 6;
     int button2 = 7;
     int led = 13;

     void setup() 
     {
      pinMode(button1, INPUT);  //Cài đặt chân D6 ở trạng thái đọc dữ liệu
      pinMode(button2, INPUT);  //Cài đặt chân D7 ở trạng thái đọc dữ liệu
      pinMode(led,OUTPUT); // Cài đặt chân D13 dưới dạng OUTPUT
     }

void loop() 
{
     int nutnhan1 = digitalRead(button1);    //Đọc trạng thái button
     int nutnhan2 = digitalRead(button2);    //Đọc trạng thái button

     if (nutnhan1 == HIGH)  // Nếu mà button bị nhấn
      { 
      digitalWrite(led,HIGH); // Đèn led sáng
      } 

      if (nutnhan2 == HIGH) // Nếu mà button bị nhấn
      { 
      digitalWrite(led,LOW);//Đèn led tắt
      }
}


Mô phỏng






    Khi bạn ấn nút nhấn 1 thì led sẽ sáng và ngược lại.




   Khi ấn nút nhấn 2 thì led sẽ tắt.





   Chúc các bạn thành công!

thitech Thứ Hai, 21 tháng 5, 2018
Arduino - Điều khiển led đơn qua giao tiếp serial giữa Arduino và PC .
Thư viện Serial được dùng trong việc giao tiếp giữa các board mạch với nhau (hoặc board mạch với máy tính hoặc với các thiết bị khác). Tất cả các mạch Arduino đều có ít nhất 1 cổng Serial (hay còn được gọi là UART hoặc USART). Giao tiếp Serial được thực hiện qua 2 cổng digital 0 (RX) và 1 (TX) hoặc qua cổng USB tới máy tính. Vì vậy, nếu bạn đang sử dụng các hàm của thư viện Serial này, bạn không thể sử dụng các chân digital 0 và digital 1 để làm việc khác được!
Bạn có thể sử dụng bảng Serial monitor có sẵn trong Arduino IDE để giao tiếp với Arduino qua giao thức Serial. Kích vào biểu tượng Serial Monitor (hình kính lúp bên góc phải trên cùng ) hoặc nhấn tổ hợp phím Ctrl+Shift+M để mở bảng Serial Monitor, sau đó bạn kích chuột vào bảng chọn như hình dưới để chọn baudrate giống với baudrate được dùng trong quá trình lập trình của bạn. Mặc định là 9600.
Sau đây là 1 ví dụ đơn giản về việc điều khiển 1 led đơn tắt mở qua giao tiếp Serial giữa máy tính và arduino .

Nội dung :

Đọc dữ liệu nhập từ monitor .
Điều khiển led đơn .

Chuẩn bị :

Arduino Uno.
1 led đơn bất kì ( Đỏ ) .
Trở 330 .

Lắp mạch : 

Lập trình :

String x="";// khai báo biến x dạng chuỗi 
// do kí tự nhập từ bàn phím mang giá trị theo bảng mã ASCII
void setup() {
  Serial.begin(9600);
  pinMode(11,OUTPUT);// khai báo ngõ ra chân 11
  Serial.println("nhap trang thai led ( on or off ) :");
  //xuất ra monitor câu lệnh 
}

void loop() { 
   while(Serial.available()>0)//nếu có dữ liệu truyền tới thì vào làm các lệnh sau
  {
     x = Serial.readString();//gán dữ liệu truyền tới vào chuỗi x
     Serial.println(x);
    if(x == "on" ){ //nếu x = on thì chân 11 xuất mức cao => led sáng 
      digitalWrite(11,HIGH);
    }
    if(x == "off" ){//nếu x = off thì chân 11 xuất mức thấp  => led tắt  
      digitalWrite(11,LOW);
    }
  }
}

Tổng kết : 

Hi vọng sau bài viết này các bạn có thể hình dung được rõ hơn về chuẩn giao tiếp serial . Do kiến thực giới hạn nên nếu bài viết có sai sót gì mong các bạn góp ý.

thitech Chủ Nhật, 20 tháng 5, 2018