Trong bài này, vnMedian sẽ hướng dẫn các bạn cách xây dựng một bo mạch đo điện áp dùng Arduino để xử lý thông tin và xuất ra ngoài Led 7 đoạn.
Mạch đơn giản chỉ cần kết nối các chân của LED 7 đoạn với bo Arduino, thứ tự kết nối được mô tả trong mã nguồn.
Riêng LED 7 đoạn các bạn có thể mua tại công ty Thiên Minh (tme.vn). Nó có 13 chân để điều khiển.
Tín hiệu điện lấy vào lấy vào để đo sẽ đặt ở chân A1, mạch lấy tín hiệu đo là 1 mạch chia áp theo sơ đồ như sau. Tín hiệu đo sẽ lấy ngay chân ngoài của R1. Tín hiệu đưa vào chân A1 nằm giữa R1 và R2
![]() |
Thêm chú thích |
Với R1 = 1M, R2 = 100K.
Video Clip giới thiệu bài học
Đoạn mã nguồn sẽ như sau
#define LED1 10
#define LED2 11
#define LED3 12
#define LED4 13
#define SEG_A 7
#define SEG_B 8
#define SEG_C 2
#define SEG_D 3
#define SEG_E 4
#define SEG_F 5
#define SEG_G 6
#define DP 9
#define NUM_SAMPLES 10
#define DC A1
int sum = 0;
String n;
unsigned char sample_count = 0;
int number[10][7]=
{
//A,B,C,D,E,F,G
{0,0,0,0,0,0,1}, //num 0
{1,0,0,1,1,1,1}, //num 1
{0,0,1,0,0,1,0}, //NUM 2
{0,0,0,0,1,1,0}, //NUM 3
{1,0,0,1,1,0,0}, //NUM 4
{0,1,0,0,1,0,0}, //NUM 5
{0,1,0,0,0,0,0}, //NUM 6
{0,0,0,1,1,1,1}, //NUM 7
{0,0,0,0,0,0,0}, //NUM 8
{0,0,0,0,1,0,0}, //NUM 9
};
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(DP, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
String Vin= "0";
float vol=0.00;
if (sample_count < NUM_SAMPLES){
sum += analogRead(DC);
sample_count++;
}else{
vol = (float) 0.0048828125 * (sum/10);
vol = vol * 11.25;
int IntegerPart = (int) vol;
int decimalPart = 100 * (vol - IntegerPart + 0.005);
Vin = (String) IntegerPart;
if (Vin.length() < 2) Vin = '0'+Vin;
Vin = Vin + (String) decimalPart;
sample_count = 0;
sum = 0;
// hien thi ra led 7 doan
n = (String) Vin.charAt(0);
displayNum(LED1,n.toInt());
n = (String) Vin.charAt(1);
displayNum(LED2,n.toInt());
n = (String) Vin.charAt(2);
displayNum(LED3,n.toInt());
n = (String) Vin.charAt(3);
displayNum(LED4,n.toInt());
}
}
void displayNum(int l, int n){
_turnOff();
digitalWrite(SEG_A, number[n][0]);
digitalWrite(SEG_B, number[n][1]);
digitalWrite(SEG_C, number[n][2]);
digitalWrite(SEG_D, number[n][3]);
digitalWrite(SEG_E, number[n][4]);
digitalWrite(SEG_F, number[n][5]);
digitalWrite(SEG_G, number[n][6]);
if(l == LED2){
digitalWrite(DP,LOW);
}else{
digitalWrite(DP,HIGH);
}
digitalWrite(l,HIGH);
delay(5);
}
void _turnOff(){
digitalWrite(LED4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
#define LED2 11
#define LED3 12
#define LED4 13
#define SEG_A 7
#define SEG_B 8
#define SEG_C 2
#define SEG_D 3
#define SEG_E 4
#define SEG_F 5
#define SEG_G 6
#define DP 9
#define NUM_SAMPLES 10
#define DC A1
int sum = 0;
String n;
unsigned char sample_count = 0;
int number[10][7]=
{
//A,B,C,D,E,F,G
{0,0,0,0,0,0,1}, //num 0
{1,0,0,1,1,1,1}, //num 1
{0,0,1,0,0,1,0}, //NUM 2
{0,0,0,0,1,1,0}, //NUM 3
{1,0,0,1,1,0,0}, //NUM 4
{0,1,0,0,1,0,0}, //NUM 5
{0,1,0,0,0,0,0}, //NUM 6
{0,0,0,1,1,1,1}, //NUM 7
{0,0,0,0,0,0,0}, //NUM 8
{0,0,0,0,1,0,0}, //NUM 9
};
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(DP, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
String Vin= "0";
float vol=0.00;
if (sample_count < NUM_SAMPLES){
sum += analogRead(DC);
sample_count++;
}else{
vol = (float) 0.0048828125 * (sum/10);
vol = vol * 11.25;
int IntegerPart = (int) vol;
int decimalPart = 100 * (vol - IntegerPart + 0.005);
Vin = (String) IntegerPart;
if (Vin.length() < 2) Vin = '0'+Vin;
Vin = Vin + (String) decimalPart;
sample_count = 0;
sum = 0;
// hien thi ra led 7 doan
n = (String) Vin.charAt(0);
displayNum(LED1,n.toInt());
n = (String) Vin.charAt(1);
displayNum(LED2,n.toInt());
n = (String) Vin.charAt(2);
displayNum(LED3,n.toInt());
n = (String) Vin.charAt(3);
displayNum(LED4,n.toInt());
}
}
void displayNum(int l, int n){
_turnOff();
digitalWrite(SEG_A, number[n][0]);
digitalWrite(SEG_B, number[n][1]);
digitalWrite(SEG_C, number[n][2]);
digitalWrite(SEG_D, number[n][3]);
digitalWrite(SEG_E, number[n][4]);
digitalWrite(SEG_F, number[n][5]);
digitalWrite(SEG_G, number[n][6]);
if(l == LED2){
digitalWrite(DP,LOW);
}else{
digitalWrite(DP,HIGH);
}
digitalWrite(l,HIGH);
delay(5);
}
void _turnOff(){
digitalWrite(LED4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
Tag :
Lập trình Arduino,
Tự học Arduino