Đếm số lần nhấn button với led 7 đoạn

Nội dung chính cần nắm

Hôm nay chúng ta sẽ học cách đếm số lần nhấn 1 button và hiển thị bằng led 7 đoạn. Led 7 đoạn thực chất chỉ là gồm nhiều đèn led nhỏ hơn được sắp xếp lại với nhau. Đây là một giải pháp hiển thị khá rẻ, tiết kiệm năng lượng và bền. 1 led 7 đoạn có giá chỉ vài ngàn đồng. Tuy nhiên nếu điều kiện cho phép, bạn nên sử dụng màn hình LCD để đơn giản hóa việc điều khiển. Tham khảo cách sử dụng loại màn hình này tại bài viết Đọc nhiệt độ - độ ẩm và xuất ra màn hình LCD.

Giới thiệu led 7 đoạn

led 7

Phần cứng

Lắp mạch

Lập trình

// Đối với Led7 đơn chúng ta sẽ không sử dụng thư viện SevSeg như Led 7 tứ 
const int segmentPins[8] = {6,10,9,3,4,5,7,8};  //quản lý việc hiển thị LED 7 đoạn DP,G-A (dấu chấm)

int buttonPin = 2;  // khai báo chân digital kết nối đến button

int i=0;

const byte numberal[10] = { // Chúng ta sẽ dùng kiểu mảng để khai báo 9 trạng thái của led (0-9) bằng mã nhị phân
        B11111100,  // Quy ước 1 sáng 0 tắt => các vị trí F-A sẽ sáng, G tắt, DP tắt. Led hiển thị số 0
        B01100000,  // tương tự với mã này ta sẽ được số 1
        B11011010,  // 2
        B11110010,  // 3
        B01100110,  // 4
        B10110110,  // 5
        B10111110,  // 6
        B11100000,  // 7
        B11111110,  // 8
        B11100110,  // 9
};
void setup() {   //thiết lập các chức năng chân

  for (int vitri = 0; vitri < 8; vitri++)   {
    pinMode(segmentPins[vitri], OUTPUT);
    digitalWrite(segmentPins[vitri], HIGH);  
  }
  
  pinMode(buttonPin, INPUT); // PinMode để nhận tín hiệu đầu vào từ Button

  attachInterrupt(0, tang, RISING); // Thêm một Interrupt tại chân digital 2
  // Tham khảo thêm tại http://arduino.vn/reference/attachinterrupt
  
  Serial.begin(9600); // Bật Serial ở mức baudrate 9600
  
  Sodawrite(0); //Đầu tiên là xuất số 0
}

void loop() {}

void tang(){     
  //Chỉ đếm từ 0 --> 9
  i = ++i % 10; //Xem thêm tại http://arduino.vn/reference/Increment-Decrement
  Sodawrite(i); //Xuất ra đèn Module LED 7 đoạn
}

void Sodawrite(int number) {
  number = constrain(number,0,9); 
  Serial.println(number); //Xuất giá trị hiện tại
  boolean isBitSet;

  for(int segment=0; segment < 8; segment++) { // Có 1 byte 8bit nên chạy từ bit 0 --> 7
    isBitSet = bitRead(numberal[number], segment);
    isBitSet = !isBitSet; // Do chúng ta sử dụng LED 7 đoạn chung cực dương nên phải có dòng này.
    digitalWrite(segmentPins[segment], isBitSet);
  }

}

Khi phải điều khiển nhiều led 7 đoạn, người ta không dùng cách như trên bởi sẽ tốn rất nhiều chân điều khiển. Thay vào đó, một kĩ thuật hiển thị khác ứng dụng sự lưu ảnh của mắt gọi là "Quét led". Arduino.vn sẽ hướng dẫn các bạn kĩ thuật này trong một bài viết khác.

lên
16 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Hướng dẫn cài đặt và sử dụng từ A-Z cho Orange Pi Lite - Cài Wiring OP + NodeJS và tiếp cận công cụ Node-RED cho dự án Iot

Mục đích: Đây là loạt bài viết A-Z hướng dẫn các bạn cài đặt và sử dụng Orange Pi Lite để phát triển dự án Iot. 

Chủ đề: Hướng dẫn cài Wiring OP + NodeJS và tiếp cận công cụ Node-RED trên Orange Pi Lite, thử nghiệm một ví dụ cơ bản trên các chân GPIOs bằng cách kéo thả cực thú vị của Node-RED wink

lên
8 thành viên đã đánh giá bài viết này hữu ích.

Làm dự án xe với module điều khiển động cơ L293D

Chắc hẵn từ lúc mới đầu nghiên cứu Arduino đến nay bạn đã từng có suy nghĩ muốn làm một dự án nho nhỏ nào đó để thỏa lòng đam mê hay tò mò của mình và dự án được đa số bạn thích thú hướng đến có lẽ là xe, xe điều khiển, xe dò đường... hay là một dự án to bự như kBot của admin Ngô Huỳnh Ngọc Khánh (ksp) ^^. Vậy làm thế nào để có thể điều khiển được các bánh xe, servo, động cơ bước cho "chiến xa" trong khi board arduino chỉ cho phép bạn xuất các tín hiệu điện HIGH, LOW! Ở bài này mình xin giới thiệu đến các bạn một công cụ cực chất đó là shield điều khiển động cơ l293d, giúp bạn dễ dàng trong việc xử lý các thao tác điều khiển độc lập các motor của mình, nào ta bắt đầu thôi :)   

lên
54 thành viên đã đánh giá bài viết này hữu ích.