Advertisement
Guest User

Untitled

a guest
Mar 27th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.77 KB | None | 0 0
  1. //***************************************************************//
  2. //  Name    : Stagevalot, kirkkaat takavalot                     //
  3. //  Author  : Jussi Kemppinen                                    //
  4. //  Date    : 26.3.2015                                          //
  5. //  Version : 0.2                                                //
  6. //  Notes   : 74HC595 siirtorekisteriohjaus valoille             //
  7. //                                                               //
  8. //***************************************************************//
  9.  
  10. //Kirjastot//
  11. #include <TrueRandom.h>
  12. //Kirjastot//
  13.  
  14. //LatchPin//
  15. int latchPin = 8;
  16. //ClockPin//
  17. int clockPin = 12;
  18. //DataPin//
  19. int dataPin = 11;
  20.  
  21. //Pinnien määritys//
  22. int flashPin = 6;
  23. int stroboPin = 5;
  24. int chaosPin = 4;
  25. int kittPin = 3;
  26. int shiftPin = 7;
  27. int snakePin = 9;
  28. int sensorPin = A2;
  29. //Pinnien määritys//
  30.  
  31. //Säätömuuttujat//
  32. int sensorValue = 0;
  33. int outputValue = 0;
  34. //Säätömuuttujat//
  35.  
  36.  
  37. byte data = 0;
  38.  
  39. //Knight Rider -array//
  40. int ledOn2[]={1,2,4,8,16,32,64,128,0,0,0,0, 0, 0, 0,  0, 0, 0, 0,0,0,0,0,128,64,32,16,8,4,2,1};
  41. int ledOn1[]={0,0,0,0, 0, 0, 0,  0,1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,  0, 0, 0, 0,0,0,0,0};
  42. //Knight Rider-array//
  43.  
  44. byte randomByte2;
  45. byte randomByte1;
  46. byte snake2 = B00000000;
  47. byte snake = B00000011;
  48.  
  49. void setup() {
  50.  
  51. //Pinnikonfiguraatiot//  
  52.   pinMode(latchPin, OUTPUT);
  53.   pinMode(clockPin, OUTPUT);
  54.   pinMode(dataPin, OUTPUT);
  55.   pinMode(flashPin, INPUT_PULLUP);  
  56.   pinMode(stroboPin, INPUT_PULLUP);
  57.   pinMode(chaosPin, INPUT_PULLUP);
  58.   pinMode(kittPin, INPUT_PULLUP);
  59.   pinMode(shiftPin, INPUT_PULLUP);
  60.   pinMode(snakePin, INPUT_PULLUP);
  61.   pinMode(A2, INPUT);
  62. //Pinnikonfiguraatiot//
  63.  
  64. //Aloita sarjayhteys debuggausta varten//
  65.   Serial.begin(9600);
  66. //Aloita sarjayhteys debuggausta varten//
  67.  
  68. }
  69.  
  70. void loop() {
  71.  
  72. //Kaikki LEDit päälle nappia painettaessa//  
  73.  if (digitalRead(flashPin) == LOW)
  74.    {
  75.     digitalWrite(latchPin, 0);
  76.     shiftOut(dataPin, clockPin, B11111111);
  77.     shiftOut(dataPin, clockPin, B11111111);
  78.     digitalWrite(latchPin, 1);  
  79.    }
  80. //Kaikki LEDit päälle nappia painettaessa//
  81.  
  82. //Puolet LEDeistä päälle ==> shift//
  83.  else if (digitalRead(shiftPin) == LOW)
  84.    {
  85.      speed();
  86.      digitalWrite(latchPin, 0);
  87.      shiftOut(dataPin, clockPin, B10101010);
  88.      shiftOut(dataPin, clockPin, B10101010);
  89.      digitalWrite(latchPin, 1);
  90.      delay(outputValue);
  91.      digitalWrite(latchPin, 0);
  92.      shiftOut(dataPin, clockPin, B01010101);
  93.      shiftOut(dataPin, clockPin, B01010101);
  94.      digitalWrite(latchPin, 1);
  95.      delay(outputValue);    
  96.    }
  97. //Puolet LEDeistä päälle ==> shift//
  98.  
  99. //Vilkuta kaikkia LEDejä halutulla nopeudella//
  100.  else if (digitalRead(stroboPin) == LOW)
  101.   {
  102.     speed();
  103.     digitalWrite(latchPin, 0);
  104.     shiftOut(dataPin, clockPin, 255);
  105.     shiftOut(dataPin, clockPin, 255);
  106.     digitalWrite(latchPin, 1);
  107.     delay(outputValue);
  108.     digitalWrite(latchPin, 0);
  109.     shiftOut(dataPin, clockPin, 0);
  110.     shiftOut(dataPin, clockPin, 0);
  111.     digitalWrite(latchPin, 1);
  112.     delay(outputValue);
  113.   }
  114. //Vilkuta kaikkia LEDejä halutulla nopeudella//
  115.  
  116. //Knight Rider -animaatio halutulla nopeudella/säädöllä//
  117.  else if (digitalRead(kittPin) == LOW)
  118.  {
  119.   for (int i = 0; i < 31; i++)
  120.   {
  121.     speed();
  122.     digitalWrite(latchPin, LOW);
  123.     shiftOut(ledOn2[i]);
  124.     shiftOut(ledOn1[i]);
  125.     digitalWrite(latchPin, HIGH);
  126.     delay(outputValue);
  127.   }
  128.  }
  129. //Knight Rider -animaatio halutulla nopeudella/säädöllä//
  130.  
  131. //Snake, säädettävä//
  132.   else if (digitalRead(snakePin) == LOW)
  133.   {
  134.     speed();
  135.     digitalWrite(latchPin, LOW);
  136.     shiftOut(dataPin, clockPin, snake2);
  137.     shiftOut(dataPin, clockPin, snake);
  138.     digitalWrite(latchPin, HIGH);
  139.     delay(outputValue);  
  140.   }
  141. //Snake, säädettävä//
  142.  
  143. //Kaaos-efekti. Random seed otetaan potikasta/kohinasta portissa//
  144.   else if (digitalRead(chaosPin) == LOW)
  145.   {
  146.     speed();
  147.     randomByte2 = TrueRandom.randomByte();
  148.     randomByte1 = TrueRandom.randomByte();
  149.     digitalWrite(latchPin, LOW);
  150.     shiftOut(randomByte2);
  151.     shiftOut(randomByte1);
  152.     digitalWrite(latchPin, HIGH);
  153.     delay(outputValue);
  154.   }  
  155. //Kaaos-efekti. Random seed otetaan potikasta/kohinasta portissa//
  156.      
  157.  
  158. //Jos nappeja ei paineta, sammutetaan kaikki LEDit//
  159.  else
  160.  {
  161.    digitalWrite(latchPin, 0);
  162.    shiftOut(dataPin, clockPin, 0);
  163.    shiftOut(dataPin, clockPin, 0);
  164.    digitalWrite(latchPin, 1);
  165.   }
  166. //Jos nappeja ei paineta, sammutetaan kaikki LEDit//
  167.  
  168. }
  169.  
  170. void shiftOut(byte dataOut)
  171. {
  172.   // Shift out 8 bits LSB first,
  173.   // on rising edge of clock
  174.   boolean pinState;
  175.   //clear shift register ready for sending data
  176.   digitalWrite(dataPin, LOW);
  177.   digitalWrite(clockPin, LOW);
  178.   // for each bit in dataOut send out a bit
  179.   for (int i=0; i<=7; i++)
  180.   {
  181.     //set clockPin to LOW prior to sending bit
  182.     digitalWrite(clockPin, LOW);
  183.     // if the value of DataOut and (logical AND) a bitmask
  184.     // are true, set pinState to 1 (HIGH)
  185.     if ( dataOut & (1<<i) )
  186.       {
  187.         pinState = HIGH;
  188.       }
  189.     else
  190.       {
  191.         pinState = LOW;
  192.       }
  193.   //sets dataPin to HIGH or LOW depending on pinState
  194.   digitalWrite(dataPin, pinState);
  195.   //send bit out on rising edge of clock
  196.   digitalWrite(clockPin, HIGH);
  197.   }
  198.  
  199. //stop shifting out data
  200. digitalWrite(clockPin, LOW);
  201. }
  202.  
  203. // the heart of the program
  204. void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  205.   // This shifts 8 bits out MSB first,
  206.   //on the rising edge of the clock,
  207.   //clock idles low
  208.  
  209.   //internal function setup
  210.   int i=0;
  211.   int pinState;
  212.   pinMode(myClockPin, OUTPUT);
  213.   pinMode(myDataPin, OUTPUT);
  214.  
  215.   //clear everything out just in case to
  216.   //prepare shift register for bit shifting
  217.   digitalWrite(myDataPin, 0);
  218.   digitalWrite(myClockPin, 0);
  219.  
  220.   //for each bit in the byte myDataOut�
  221.   //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  222.   //This means that %00000001 or "1" will go through such
  223.   //that it will be pin Q0 that lights.
  224.   for (i=7; i>=0; i--)  {
  225.     digitalWrite(myClockPin, 0);
  226.  
  227.     //if the value passed to myDataOut and a bitmask result
  228.     // true then... so if we are at i=6 and our value is
  229.     // %11010100 it would the code compares it to %01000000
  230.     // and proceeds to set pinState to 1.
  231.     if ( myDataOut & (1<<i) ) {
  232.       pinState= 1;
  233.     }
  234.     else { 
  235.       pinState= 0;
  236.     }
  237.  
  238.     //Sets the pin to HIGH or LOW depending on pinState
  239.     digitalWrite(myDataPin, pinState);
  240.     //register shifts bits on upstroke of clock pin  
  241.     digitalWrite(myClockPin, 1);
  242.     //zero the data pin after shift to prevent bleed through
  243.     digitalWrite(myDataPin, 0);
  244.   }
  245.  
  246.   //stop shifting
  247.   digitalWrite(myClockPin, 0);
  248. }
  249.  
  250.  
  251. //blinks both registers based on the number of times you want to
  252. //blink "n" and the pause between them "d"
  253. //starts with a moment of darkness to make sure the first blink
  254. //has its full visual effect.
  255. void blinkAll_2Bytes(int n, int d) {
  256.   digitalWrite(latchPin, 0);
  257.   shiftOut(dataPin, clockPin, 0);
  258.   shiftOut(dataPin, clockPin, 0);
  259.   digitalWrite(latchPin, 1);
  260.   delay(200);
  261.   for (int x = 0; x < n; x++) {
  262.     digitalWrite(latchPin, 0);
  263.     shiftOut(dataPin, clockPin, 255);
  264.     shiftOut(dataPin, clockPin, 255);
  265.     digitalWrite(latchPin, 1);
  266.     delay(d);
  267.     digitalWrite(latchPin, 0);
  268.     shiftOut(dataPin, clockPin, 0);
  269.     shiftOut(dataPin, clockPin, 0);
  270.     digitalWrite(latchPin, 1);
  271.     delay(d);
  272.   }
  273. }
  274.  
  275. // SÄÄTÖNUPPIEN FUNKTIOT //
  276.  
  277. void speed()
  278. {
  279.   sensorValue = analogRead(sensorPin);
  280.   outputValue = map(sensorValue, 0, 1023, 0, 500);
  281.  
  282.   // Debuggaukseen //
  283.   Serial.print("Sensor = " );
  284.   Serial.print(sensorValue);
  285.   Serial.print("\t Output =");
  286.   Serial.println(outputValue);
  287.  
  288.   // Jos liikaa, vaihda //
  289.   delay(2);
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement