#define buzzerPin 13
#define BT 12
int BTstate, sw1, sw2, i, j, ts, dieu_kien, dk[10];
byte ledPin[] = {52, 53, 50, 51, 48, 49, 46, 47, 44, 45}; // Mảng lưu vị trí các chân Digital
//mà các đèn LED sử dụng theo thứ tự từ 1->8.
byte IPin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // Mảng lưu vị trí các chân Digital
// 0 1 2 3 4 5 6 7 8 9
byte OPin[] = {23, 25, 27, 29, 31, 33, 35, 37, 39, 41}; // Mảng lưu vị trí các chân Digital
// 0 1 2 3 4 5 6 7 8 9
void setup() {
Serial.begin(9600);
pinMode(buzzerPin, OUTPUT);
pinMode(BT, INPUT_PULLUP);
for (int i = 0; i <= 9; i++)
{
pinMode(ledPin[i], OUTPUT); //Các chân LED là OUTPUT
pinMode(IPin[i], OUTPUT);
pinMode(OPin[i], INPUT_PULLUP);
digitalWrite(ledPin[i], LOW); //Mặc định các đèn LED sẽ tắt
digitalWrite(IPin[j], HIGH);
}
}
void loop()
{
if (ts == 0)
{
for (j = 0; j <= 9; j = j + 1)
{
digitalWrite(IPin[j], HIGH);
digitalWrite(ledPin[j], LOW);
dk[j] = 0;
}
}
BTstate = digitalRead(BT);
if (BTstate == LOW)//Nút nhấn được nhấn
{
if (ts == 0)
{
for (j = 0; j < 9; j = j + 2) // j =0->9
{
digitalWrite(IPin[j], LOW);//Kích hoạt tuần tự các chân "Chẵn"
delay(10);
for (i = 0; i <= 9; i = i + 1)//i = 0 -> 9
{
sw1 = digitalRead(OPin[i]);
if (sw1 == LOW)
{
if ((i % 2) == 0)//Đúng cổng chẵn
{ //Lấy số dư trong phép chia cho 2
//digitalWrite(ledPin[j], HIGH);//Đèn xanh sáng
//digitalWrite(ledPin[j + 1], LOW); //Đèn Đỏ Tắt
dk[j] = 2; //Vị trí kiểm tra "Đạt"
}
else
{
//digitalWrite(ledPin[j], LOW);//Đèn xanh Tắt
//digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dk[j] = 1; //Vị trí kiểm tra "Bị Lỗi nhầm vị trí"
}
ts = ts + 1;
}
}
digitalWrite(IPin[j], HIGH);//bật sáng tuần tự các chân SPin
delay(10);
}
//****************************************************************
for (j = 1; j <= 9; j = j + 2) // j =1,3,5,7,9
{
digitalWrite(IPin[j], LOW);//Kích hoạt tuần tự các chân "Lẻ"
delay(10);
for (i = 0; i <= 9; i = i + 1)//i = 0 -> 9
{
sw1 = digitalRead(OPin[i]);
if (sw1 == LOW)// phat hiện vị trí tương ứng
{
if ((i % 2) == 1)//Đúng cổng Lẻ
{
dk[j] = 2;
}
else
{
dk[j] = 1;
}
}
}
digitalWrite(IPin[j], HIGH);//bật sáng tuần tự các chân SPin
delay(10);
}
//****************************************************************
dieu_kien = 1;
for (j = 0; j < 9; j = j + 2) // j =1,3,5,7,9
{
Serial.print("dk[j] = ");
Serial.println(dk[j]);
Serial.print("dk[j+1] = ");
Serial.println(dk[j + 1]);
delay(100);
if ((dk[j] == 2) && (dk[j + 1] == 2))
{
digitalWrite(ledPin[j], HIGH);//Đèn xanh Sáng
digitalWrite(ledPin[j + 1], LOW); //Đèn Đỏ Tắt
}
if ((dk[j] == 1) && (dk[j + 1] == 1))
{
digitalWrite(ledPin[j], LOW);//Đèn xanh Tắt
digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dieu_kien = 0;
}
if ((dk[j] == 0) && (dk[j + 1] == 0))
{
digitalWrite(ledPin[j], LOW);//Đèn xanh Tắt
digitalWrite(ledPin[j + 1], LOW); //Đèn Đỏ Tắt
}
if ((dk[j] == 0) && (dk[j + 1] == 1))
{
digitalWrite(ledPin[j], LOW);//Đèn xanh Tắt
digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dieu_kien = 0;
}
if ((dk[j] == 1) && (dk[j + 1] == 0))
{
digitalWrite(ledPin[j], LOW);//Đèn xanh Tắt
digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dieu_kien = 0;
}
if ((dk[j] == 0) && (dk[j + 1] == 2))
{
digitalWrite(ledPin[j], HIGH);//Đèn xanh Sáng
digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dieu_kien = 0;
}
if ((dk[j] == 2) && (dk[j + 1] == 0))
{
digitalWrite(ledPin[j], HIGH);//Đèn xanh Sáng
digitalWrite(ledPin[j + 1], HIGH); //Đèn Đỏ Sáng
dieu_kien = 0;
}
}
//****************************************************************
if (ts > 0)
{
if (dieu_kien == 1)
{
tone(buzzerPin, 400);
}
else
{
noTone(buzzerPin);
}
}
else
{
//noTone(buzzerPin);
}
}
}
else
{
ts = 0;
noTone(buzzerPin);
}
}
// Bật chuông khi kiểm tra cụm sản phẩm OK