byte transmit[12] = { 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5 } ; //define our transmit pin byte mask [12] = { 1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8 }; //my bit mask byte data = 0; //value to transmit, binary byte bitDelay = 100; byte pullPinOne[12] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 } ; byte pullPinTwo[12] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 } ; byte pullPinThree[12] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } ; int i; void setup() { for (i=0; i<12; i++) { pinMode(transmit[i],OUTPUT); pinMode(pullPinOne[i], OUTPUT); pinMode(pullPinTwo[i], OUTPUT); pinMode(pullPinThree[i], OUTPUT); } Serial.begin(9600); } void loop() { if (Serial.available() > 0) { data = Serial.read(); for (i = 0; i<12; i++) { if (data & mask[i]){ // if bitwise AND resolves to true digitalWrite(transmit[i],HIGH); // send 1 digitalWrite(pullPinOne[i], HIGH); digitalWrite(pullPinTwo[i], HIGH); digitalWrite(pullPinThree[i], LOW); } else { //if bitwise and resolves to false digitalWrite(transmit[i],LOW); // send 0 digitalWrite(pullPinOne[i], HIGH); digitalWrite(pullPinTwo[i], HIGH); digitalWrite(pullPinThree[i], LOW); } delayMicroseconds(bitDelay); //delay } Serial.println(data,BIN); } }