#define latchPin 26 // ST_CP is pin 12 of 74hc595
#define clockPin 25 // SH_CP is pin 11 of 74hc595
#define dataPin 27 // DS is pin 14 of 74hc595
//byte led1 = 0b111111111; //ตัวแปรให้ led สบายทั้งหมดด้วยใช้เลขฐานสอง
//byte led2 = 0b000000000;
int ledDisp[] = {0x00,0x80,0xC0,0xF0,0xF8}; //ตัวเลขฐานสิบหกของวิธีที่ 1
// int led[] = {0, 128, 192, 240, 248};
// int led[] = {0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001
// } ; //เก็บตัวเลขฐาน
int tmp = 0;
void setup() {
Serial.begin(115200);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin , OUTPUT);
}
// void loop() {
// /* digitalWrite(latchPin, LOW); //(เริ่มต้มการส่งข้อมูล) ต้องให้ latch เป็น LOW แล้วให้กลับมาเป็น HIGH เพื่อ จบ
// shiftOut(dataPin,clockPin,MSBFIRST,ledDisp[i]); // LSBFIRST ให้ขวาไปซ้าย MSBFIRST ให้ซ้ายไปขวา
// digitalWrite(latchPin, HIGH); //(ให้จบการส่งข้อมูล)
// */
// // for (int i = 0; i < 8; i++){ //วิธีที่ 1 การใช้เลขฐาน
// // digitalWrite(latchPin, LOW);
// // shiftOut(dataPin,clockPin,MSBFIRST,ledDisp[i]);
// // digitalWrite(latchPin, HIGH);
// // delay(1000);
// // }
// // for (int i = 0; i < 8; i++){ // วิธีที่ 2 ด้วยการใช้ << กับ >>
// // digitalWrite(latchPin, LOW);
// // shiftOut(dataPin,clockPin,MSBFIRST,1 << i); //HIGH = 1 ,LOW = 0
// // digitalWrite(latchPin, HIGH);
// // delay(300);
// // }
// // for (int i = 0; i < 8; i++){ //วิธีที่ 3 เก็บตัวเลขฐานสอง
// // digitalWrite(latchPin, LOW);
// // shiftOut(dataPin,clockPin,LSBFIRST,led[i]);
// // digitalWrite(latchPin, HIGH);
// // delay(300);
// // }
// // for (int j = 0; j < 8; j++){
// // digitalWrite(latchPin, LOW); // hold latchPin low while transmitting
// // shiftOut(dataPin, clockPin, LSBFIRST, led[j]); // shift out the byte digitalWrite(latchPin, HIGH); // latchPin high when done
// // digitalWrite(latchPin, HIGH);
// // delay(300);
// // }
// // digitalWrite(latchPin, LOW);
// // digitalWrite(dataPin, HIGH);
// // digitalWrite(clockPin, HIGH);
// // digitalWrite(latchPin, HIGH);
// // delay(1000);
// // digitalWrite(latchPin, LOW);
// // digitalWrite(dataPin, LOW);
// // digitalWrite(clockPin, HIGH);
// // digitalWrite(latchPin, HIGH);
// // delay(1000);
// // digitalWrite(latchPin, LOW);
// // shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000); // 0xff // เรียงขา 0b 76543210
// // digitalWrite(latchPin, HIGH);
// // delay(500);
// // digitalWrite(latchPin, LOW);
// // shiftOut(dataPin, clockPin, LSBFIRST, 0b00001100); // 0xff // เรียงขา 0b 76543210
// // digitalWrite(latchPin, HIGH);
// // delay(500);
// // digitalWrite(latchPin,LOW); //สั่งให้ latchPin เป็น LOW เพื่อเริ่มส่งข้อมูล
// // digitalWrite(dataPin,HIGH); //ส่ง bit แรกออกไปเป็น HIGH
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 1
// // digitalWrite(dataPin,LOW); //ส่ง bit ที่ 2 ออกไปจะไปแทนที่ bit แรก และบิตแรกจะถูก shift ออกไป 1 ตำแหน่ง (ส่ง LOW ออกไป)
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 01
// // digitalWrite(dataPin,HIGH); //ส่ง bit ที่ 3 ออกไปจะไปแทนที่ bit แรก ส่วนบิตที่ 2 จะถูก shift ออกไป 1 ตำแหน่ง และบิตแรกสุดจะออกไปอีก 1 ตำแหน่ง
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 101
// // digitalWrite(dataPin,LOW); //ส่ง low
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 0101
// // digitalWrite(dataPin,HIGH);
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 1 0101
// // digitalWrite(dataPin,HIGH);
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 11 0101
// // digitalWrite(dataPin,HIGH);
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 111 0101
// // digitalWrite(dataPin,LOW);
// // digitalWrite(clockPin,HIGH); //ส่ง clock high
// // digitalWrite(clockPin,LOW); //ส่ง clock low ข้อมูลปัจจุบัน : 0111 0101
// // digitalWrite(latchPin,HIGH);
// }
void shiftOutTwoBytes(uint8_t data1, uint8_t data2) {
// Shift out the first byte (data1)
shiftOut(dataPin, clockPin, LSBFIRST, data1);
// Shift out the second byte (data2)
shiftOut(dataPin, clockPin, LSBFIRST, data2);
// Latch the data to the output pins of the shift registers
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}
void loop() {
shiftOutTwoBytes(B10000000, B00000001);
delay(500);
shiftOutTwoBytes(B01000000, B00000010);
delay(500);
shiftOutTwoBytes(B00100000, B00000100);
delay(500);
shiftOutTwoBytes(B00010000, B00001000);
delay(500);
shiftOutTwoBytes(B00001000, B00010000);
delay(500);
shiftOutTwoBytes(B00000100, B00100000);
delay(500);
shiftOutTwoBytes(B00000010, B01000000);
delay(500);
shiftOutTwoBytes(B00000001, B10000000);
delay(500);
}