Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Servo.h>
- //Pin connected to ST_CP of 74HC595
- int latchPin = 8;
- //Pin connected to SH_CP of 74HC595
- int clockPin = 12;
- ////Pin connected to DS of 74HC595
- int dataPin = 11;
- int dlay = 20;
- //holders for infromation you're going to pass to shifting function
- byte data;
- byte dataArray[10];
- Servo myservo;
- int val;
- void setup() {
- //set pins to output because they are addressed in the main loop
- pinMode(latchPin, OUTPUT);
- Serial.begin(9600);
- myservo.attach(9);
- }
- int rotNum = 0;
- int encoder0PinALast = LOW;
- int n = LOW;
- void loop() {
- n = digitalRead(4);
- if ((encoder0PinALast == LOW) && (n == HIGH)) {
- if (digitalRead(7) == LOW) {
- rotNum--;
- delay(dlay);
- } else {
- rotNum++;
- delay(dlay);
- }
- }
- encoder0PinALast = n;
- if (rotNum > 99) {
- rotNum = 0;
- }
- if (rotNum < 0) {
- rotNum = 99;
- }
- shiftNumber(rotNum);
- val = rotNum; // reads the value of the potentiometer (value between 0 and 1023)
- val = map(val, 0, 99, 0, 180); // scale it to use it with the servo (value between 0 and 180)
- myservo.write(val); // sets the servo position according to the scaled value
- }
- void shiftNumber(int myInput) {
- //ground latchPin and hold low for as long as you are transmitting
- digitalWrite(latchPin, 0);
- //move 'em out
- int b = myInput % 10;
- int a = (myInput - b) / 10;
- int temp = a * 16 + b;
- shiftOut(dataPin, clockPin, temp);
- //return the latch pin high to signal chip that it
- //no longer needs to listen for information
- digitalWrite(latchPin, 1);
- }
- // the heart of the program
- void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
- // This shifts 8 bits out MSB first,
- //on the rising edge of the clock,
- //clock idles low
- //internal function setup
- int i = 0;
- int pinState;
- pinMode(myClockPin, OUTPUT);
- pinMode(myDataPin, OUTPUT);
- //clear everything out just in case to
- //prepare shift register for bit shifting
- digitalWrite(myDataPin, 0);
- digitalWrite(myClockPin, 0);
- //for each bit in the byte myDataOut�
- //NOTICE THAT WE ARE COUNTING DOWN in our for loop
- //This means that %00000001 or "1" will go through such
- //that it will be pin Q0 that lights.
- for (i = 7; i >= 0; i--) {
- digitalWrite(myClockPin, 0);
- //if the value passed to myDataOut and a bitmask result
- // true then... so if we are at i=6 and our value is
- // %11010100 it would the code compares it to %01000000
- // and proceeds to set pinState to 1.
- if ( myDataOut & (1 << i) ) {
- pinState = 1;
- }
- else {
- pinState = 0;
- }
- //Sets the pin to HIGH or LOW depending on pinState
- digitalWrite(myDataPin, pinState);
- //register shifts bits on upstroke of clock pin
- digitalWrite(myClockPin, 1);
- //zero the data pin after shift to prevent bleed through
- digitalWrite(myDataPin, 0);
- }
- //stop shifting
- digitalWrite(myClockPin, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement