İlker Çam & Berrak Şişman
int datapin = 2; int clockpin = 3; int latchpin = 4; byte data = 0; void setup() { // Set the three SPI pins to be outputs: pinMode(datapin, OUTPUT); pinMode(clockpin, OUTPUT); pinMode(latchpin, OUTPUT); Serial.begin(9600); Serial.println("Ready to read..."); } void loop() { if(Serial.available() > 0){ int readFromSerial = Serial.parseInt(); Serial.println("Readed From Input"); Serial.println(readFromSerial); readIntAsBinary(readFromSerial); } } void readIntAsBinary(int number){ int tmp = number; int counter; for(int i = 0;i<=7;i++){ shiftWrite(i, LOW); delay(10); } do{ int b = tmp%2; Serial.println(b); tmp/=2; shiftWrite(counter++, b==0 ? LOW : HIGH); delay(20); }while(tmp>0); for(;counter<=7;counter++){ shiftWrite(counter,LOW); delay(20); } } void shiftWrite(int desiredPin, boolean desiredState) { bitWrite(data,desiredPin,desiredState); shiftOut(datapin, clockpin, MSBFIRST, data); digitalWrite(latchpin, HIGH); digitalWrite(latchpin, LOW); } void oneAfterAnother() { int index; int delayTime = 100; // Time (milliseconds) to pause between LEDs // Make this smaller for faster switching for(index = 0; index <= 7; index++) { shiftWrite(index, HIGH); delay(delayTime); } for(index = 7; index >= 0; index--) { shiftWrite(index, LOW); delay(delayTime); } } /* oneOnAtATime() This function will step through the LEDs, lighting one at at time. */ void oneOnAtATime() { int index; int delayTime = 100; // Time (milliseconds) to pause between LEDs // Make this smaller for faster switching // step through the LEDs, from 0 to 7 for(index = 0; index <= 7; index++) { shiftWrite(index, HIGH); // turn LED on delay(delayTime); // pause to slow down the sequence shiftWrite(index, LOW); // turn LED off } } /* pingPong() This function will step through the LEDs, lighting one at at time, in both directions. */ void pingPong() { int index; int delayTime = 100; // time (milliseconds) to pause between LEDs // make this smaller for faster switching // step through the LEDs, from 0 to 7 for(index = 0; index <= 7; index++) { shiftWrite(index, HIGH); // turn LED on delay(delayTime); // pause to slow down the sequence shiftWrite(index, LOW); // turn LED off } // step through the LEDs, from 7 to 0 for(index = 7; index >= 0; index--) { shiftWrite(index, HIGH); // turn LED on delay(delayTime); // pause to slow down the sequence shiftWrite(index, LOW); // turn LED off } } /* randomLED() This function will turn on random LEDs. Can you modify it so it also lights them for random times? */ void randomLED() { int index; int delayTime = 100; // time (milliseconds) to pause between LEDs // make this smaller for faster switching // The random() function will return a semi-random number each // time it is called. See http://arduino.cc/en/Reference/Random // for tips on how to make random() more random. index = random(8); // pick a random number between 0 and 7 shiftWrite(index, HIGH); // turn LED on delay(delayTime); // pause to slow down the sequence shiftWrite(index, LOW); // turn LED off } /* marquee() This function will mimic "chase lights" like those around signs. */ void marquee() { int index; int delayTime = 200; // Time (milliseconds) to pause between LEDs // Make this smaller for faster switching // Step through the first four LEDs // (We'll light up one in the lower 4 and one in the upper 4) for(index = 0; index <= 3; index++) { shiftWrite(index, HIGH); // Turn a LED on shiftWrite(index+4, HIGH); // Skip four, and turn that LED on delay(delayTime); // Pause to slow down the sequence shiftWrite(index, LOW); // Turn both LEDs off shiftWrite(index+4, LOW); } } /* binaryCount() Numbers are stored internally in the Arduino as arrays of "bits", each of which is a 1 or 0. Just like the base-10 numbers we use every day, The position of the bit affects the magnitude of its contribution to the total number: Bit position Contribution 0 1 1 2 2 4 3 8 4 16 5 32 6 64 7 128 To build any number from 0 to 255 from the above 8 bits, just select the contributions you need to make. The bits will then be 1 if you use that contribution, and 0 if you don't. This function will increment the "data" variable from 0 to 255 and repeat. When we send this value to the shift register and LEDs, you can see the on-off pattern of the eight bits that make up the byte. See http://www.arduino.cc/playground/Code/BitMath for more information on binary numbers. */ void binaryCount() { int delayTime = 1000; // time (milliseconds) to pause between LEDs // make this smaller for faster switching // Send the data byte to the shift register: shiftOut(datapin, clockpin, MSBFIRST, data); // Toggle the latch pin to make the data appear at the outputs: digitalWrite(latchpin, HIGH); digitalWrite(latchpin, LOW); // Add one to data, and repeat! // (Because a byte type can only store numbers from 0 to 255, // if we add more than that, it will "roll around" back to 0 // and start over). data++; // Delay so you can see what's going on: delay(delayTime); }