#define dataPin 5 /* Q7 */
#define clockPin 18 /* CP */
#define latchPin 19 /* PL */
int data;
#define numBits 8 /* Set to 8 * number of shift registers */
#define button 32
byte relayState = 0;
byte arraytobien[] = {0, 0, 0, 1, 0, 1, 0, 1};
byte bientoarray[] = {0, 0, 0, 0, 0, 0, 0, 0};
byte result = 0;
int data_devices_btn = 0b01001000;
void IRAM_ATTR isr() {
//đọc giá trị nút nhấn test
// digitalWrite(latchPin, LOW); //chuyển sang chế độ ghi
// digitalWrite(latchPin, HIGH); //chuyển sang chế độ dịch
// data |= shiftIn(dataPin, clockPin, LSBFIRST); // Đọc dữ liệu từ IC
// Serial.printf("giá trị: %d\n",data);
// int bitPosition = 0;
// for (int i = 0; i < numBits; ++i) {
// if ((data >> i) & 0x01) {
// bitPosition = i+1 ;
// }
// }
// Serial.printf("Bit thứ: %d\n",bitPosition);
//đọc giá trị nút nhấn test
}
void check_bien_to_aray() {
for (int i = 0; i < 8; i++) {
bientoarray[i] = (result >> (7 - i)) & 1;
}
// In ra mảng để kiểm tra kết quả
for (int i = 0; i < 8; i++) {
Serial.printf("Bit array thứ %d: %d\n",i,bientoarray[i]);
}
}
void check_aray_to_bien(){
for(int i = 0; i < numBits; i++) {
result = (result << 1) | arraytobien[i];
}
Serial.printf("Kết quả mảng: %d\n",result);
}
void setup() {
Serial.begin(115200);
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(button, INPUT_PULLUP);
attachInterrupt(button, isr, FALLING);
}
void loop() {
check_bien_to_aray();
check_aray_to_bien();
for (int i = 0; i < numBits; i++) {
if (((data_devices_btn >> (numBits - 1 - i)) & 1) == 1)
{
if (arraytobien[i] == 0) { // chỉ đảo giá trị từ 0 sang 1
arraytobien[i] = 1;
}
else {
arraytobien[i] = 0;
}
Serial.printf("Biến thứ %d bị đảo: %d\n",i,arraytobien[i]);
}
else {
arraytobien[i] = (result >> (numBits - 1 - i)) & 1;
Serial.printf("Biến thứ %d không bị đảo: %d\n",i,arraytobien[i]);
}
}
// result = ~result;
// Serial.printf("giá trị sau khi đảo: %d\n",result);
delay(5000);
// check_aray_to_bien();
// check_bien_to_aray();
// delay(5000);
// update_data_devices_fb(1,true);
// delay(1000);
// update_data_devices_fb(2,true);
// delay(1000);
// update_data_devices_fb(3,true);
// delay(1000);
// update_data_devices_fb(8,true);
// delay(1000);
// update_data_devices_fb(1,false);
// delay(1000);
// update_data_devices_fb(2,false);
// delay(1000);
// update_data_devices_fb(3,false);
// delay(1000);
// update_data_devices_fb(8,false);
// delay(1000);
}
void update_data_devices_fb (byte relayNumber, bool state) {
if (state == true) {
relayState |= (1 << (relayNumber - 1));
} else {
relayState &= ~(1 << (relayNumber - 1));
}
Serial.printf("Bit relay: %d\n",relayState);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
sr1:PL
sr1:CP
sr1:D4
sr1:D5
sr1:D6
sr1:D7
sr1:Q7_N
sr1:GND
sr1:Q7
sr1:DS
sr1:D0
sr1:D1
sr1:D2
sr1:D3
sr1:CE
sr1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
sw1:1
sw1:2
sw1:3
sw2:1
sw2:2
sw2:3
sw3:1
sw3:2
sw3:3
sw4:1
sw4:2
sw4:3
sw5:1
sw5:2
sw5:3
sw6:1
sw6:2
sw6:3
sw7:1
sw7:2
sw7:3
sw8:1
sw8:2
sw8:3
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
btn7:1.l
btn7:2.l
btn7:1.r
btn7:2.r
btn8:1.l
btn8:2.l
btn8:1.r
btn8:2.r
btn9:1.l
btn9:2.l
btn9:1.r
btn9:2.r
btn10:1.l
btn10:2.l
btn10:1.r
btn10:2.r
r1:1
r1:2
led1:A
led1:C