#define data_pin 2
#define latch_pin 3
#define clock_pin 4
#define LSBFIRST 0
#define MSBFIRST 1
byte data = B01100110;
byte ndata =~ data;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(data_pin, OUTPUT);
pinMode(latch_pin, OUTPUT);
pinMode(clock_pin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
on_off_leds(data);
delay(500);
on_off_leds(ndata);
delay(500);
}
void on_off_leds(byte data_val){
digitalWrite(latch_pin, LOW);
s_out(data_pin, clock_pin, LSBFIRST, data_val);
digitalWrite(latch_pin, HIGH);
}
/* shiftOut function own implementation*/
void s_out(uint8_t dataPin, uint8_t clockPin, uint8_t format, byte actual_data){
uint8_t bit_val;
if(format == LSBFIRST){
for(int8_t i = 0; i < 8; i++){
bit_val = (actual_data & (1 << i)) > 0; // si el bit en cualquier posicion es 1 entonces
// bit_val = true (1) sino false (0)
digitalWrite(clockPin, LOW);
digitalWrite(dataPin, bit_val);
delayMicroseconds(0.015);
digitalWrite(clockPin, HIGH);
delayMicroseconds(0.1);
}
}else if(format == MSBFIRST){
for(int8_t j = 7; j >= 0; j--){
bit_val = (actual_data & (1 << j)) > 0; // si el bit en cualquier posicion es 1 entonces
// bit_val = true (1) sino false (0)
//Serial.println(bit_val);
digitalWrite(clockPin, LOW);
digitalWrite(dataPin, bit_val);
delayMicroseconds(0.015);
digitalWrite(clockPin, HIGH);
delayMicroseconds(0.1);
}
}
}