uint8_t outputPins[8] = {PIN4_bm, PIN5_bm, PIN6_bm, PIN7_bm, PIN3_bm, PIN2_bm, PIN1_bm, PIN0_bm}; uint8_t* pinPortsOut[8] = {&PORTA.OUT, &PORTA.OUT, &PORTA.OUT, &PORTA.OUT, &PORTB.OUT, &PORTB.OUT, &PORTB.OUT, &PORTB.OUT}; uint8_t* pinPortsDir[8] = {&VPORTA.DIR, &VPORTA.DIR, &VPORTA.DIR, &VPORTA.DIR, &VPORTB.DIR, &VPORTB.DIR, &VPORTB.DIR, &VPORTB.DIR}; void initiatePinModes(){ for(int pinNum = 0; pinNum<8; pinNum++){ *pinPortsDir[pinNum] |= outputPins[pinNum]; } } void writeBit(uint8_t srcValue, uint8_t bitPosition){ if((srcValue & (1 << bitPosition))){ *pinPortsOut[7-bitPosition] |= outputPins[7-bitPosition]; } else{ *pinPortsOut[7-bitPosition] &= ~outputPins[7-bitPosition]; } } void writeOutput(uint8_t value){ for(int pinNum = 0; pinNum<8; pinNum++){ writeBit(value, pinNum); } } void setup() { initiatePinModes(); } void loop() { for(uint8_t i = 0; i < 64; i+=1){ writeOutput(i); delay(5); } }