Đế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
18 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

Cánh tay robot 4 bậc tự do - Điều khiển bằng máy tính dùng LABVIEW

Thông qua các phương tiện thông tin trên các diễn đàn Internet và các trung tâm học tập thực hành, cho thấy nhu cầu học tập và nghiên cứu cũng như tự mày mò tìm hiểu về nhiều lĩnh vực trong ngành điện điện tử nói chung và ngành tự động hóa nói riêng là rất cao. Hiện nay trong các nhà máy có các dây chuyền sản xuất, có rất nhiều các tay máy hoạt động. Robot công nghiệp đã có mặt trong sản xuất từ nhiều năm trước, ngày nay robot công nghiệp được dùng ở nhiều lĩnh vực sản xuất. đó là xuất phát từ những ưu điểm mà robot đó đã được chọn và đúc kêt lại trong quá trình sản xuất, robot có những tính năng mà con người không thể có được, khả năng làm việc ổn định,làm việc trong môi trường độc hại. Do đó việc đầu tư nghiên cứu, chế tạo ra những loại robot phục vụ cho công cuộc tự động hóa sản xuất là rất cần thiết cho hiện tại và trong tương lai.

lên
18 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Giới thiệu cảm biến ánh sáng và cách lập trình

Cảm biến ánh sáng sử dụng quang trở có khả năng thay đổi điện trở theo cường độ ánh sáng chiếu vào. Tín hiệu xuất ra của cảm biến là digital HIGH (5V) và LOW tượng trưng cho các trạng thái bật, tắt thiết bị điện tự động mà bạn không cần phải thao tác vào !

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

Shortcut01 – Truyền thông số giữa hai module RF 315Mhz

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley.

Mục đích bài viết: Hướng dẫn cách truyền các truyền và nhận giá trị từ cảm biến hoặc một biến số thay đổi giữa hai mạch 315Mhz (433Mhz) cool

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