Advertisement
Guest User

SickLights

a guest
Mar 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.58 KB | None | 0 0
  1. #include <Adafruit_NeoPixel.h>
  2. #include "SPI.h"
  3. #define NUM_LEDS 10
  4. #define PIN 3
  5. long initialMillis;
  6. String alliance;
  7. double spinDelay;
  8. boolean isCubeDetection;
  9. int command, morphState, morphCountRed, morphCountBlue, flashState;
  10. int spinCounter = 0;
  11. int spinAdvancer = 0;
  12. int drivetrainStart = 0;
  13. int drivetrainEnd = 20;
  14. int shooterLeftStart = 25;
  15. int shooterLeftEnd = 40;
  16. int shooterRightStart = 60;
  17. int shooterRightEnd = 75;
  18.  
  19. Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
  20.  
  21.  
  22. void setup() {
  23.   // put your setup code here, to run once:
  24.   Serial.begin(9600);
  25.   Serial.setTimeout(20);
  26.   strip.begin();
  27.   initialMillis = millis();
  28.  
  29.   //Sets all the lights on the robot to be purple by default.
  30.   for(int i = 0; i <= NUM_LEDS; i++) {
  31.     strip.setPixelColor(i, 100, 0, 100);
  32.   }
  33.  
  34.   strip.show();
  35.   morphState = 0;
  36.   morphCountRed = 100;
  37.   morphCountBlue = 100;
  38. }
  39.  
  40. void loop() {
  41.   // put your main code here, to run repeatedly:
  42.  
  43.   //Checks if there have been any new commands, and if so, reads it.
  44.   if(Serial.available()) {
  45.     command = Serial.read();
  46.     Serial.print("Data received: ");
  47.     Serial.print(command);
  48.     Serial.println();
  49.   }
  50.  
  51.   //Runs the correct methods if a command is received.
  52.   switch(command) {
  53.   case 1:
  54.     alliance = "RED";
  55.     break;
  56.   case 2:
  57.     alliance = "BLUE";
  58.     break;
  59.   case 3:
  60.     reverse();
  61.     break;
  62.   case 4:
  63.     spinDelay = 150;
  64.     spinUp;
  65.     break;
  66.   case 5:
  67.     spinDelay = 100;
  68.     spinUp();
  69.     break;
  70.   case 6:
  71.     spinDelay = 75;
  72.     spinUp();
  73.     break;
  74.   case 7:
  75.     spinDelay = 50;
  76.     spinUp();
  77.     break;
  78.   case 8:
  79.     isCubeDetection = true;
  80.     flash();
  81.     break;
  82.   case 9:
  83.     isCubeDetection = false;
  84.     flash();
  85.     break;
  86.   default:
  87.     sparkle();
  88.     break;
  89.   }
  90.  
  91.   //Constantly morphs between alliance color and purple, regardless of other commands on the lights.
  92.   if(alliance == "RED") {
  93.     for(int i = 0; i <= (drivetrainEnd - drivetrainStart + 1); i++) {
  94.       strip.setPixelColor(i, morphCountRed, 0, morphCountBlue);
  95.     }
  96.  
  97.     if(morphState == 0) {
  98.       morphCountBlue--;
  99.  
  100.       if(morphCountBlue == 0) {
  101.         morphState = 1;
  102.       }
  103.     }
  104.     else {
  105.       morphCountBlue++;
  106.  
  107.       if(morphCountBlue == 100) {
  108.         morphState = 0;
  109.       }
  110.     }
  111.   }
  112.   else if(alliance == "BLUE") {
  113.     for(int i = 0; i <= (drivetrainEnd - drivetrainStart + 1); i++) {
  114.       strip.setPixelColor(i, morphCountRed, 0, morphCountBlue);
  115.     }
  116.  
  117.     if(morphState == 0) {
  118.       morphCountRed--;
  119.  
  120.       if(morphCountRed == 0) {
  121.         morphState = 1;
  122.       }
  123.     }
  124.     else {
  125.       morphCountRed++;
  126.  
  127.       if(morphCountRed == 100) {
  128.         morphState = 0;
  129.       }
  130.     }
  131.   }
  132.   else {
  133.    
  134.   }
  135.  
  136.   strip.show();
  137. }
  138.  
  139. //Used when outputting from the shooter side of the robot, no matter what power is being used.
  140. void spinUp() {    
  141.   if(millis() - spinDelay >= initialMillis) {
  142.     if(spinAdvancer == 3) {
  143.       spinAdvancer = 0;
  144.     }
  145.     else {
  146.       spinAdvancer++;
  147.     }
  148.     initialMillis = millis();
  149.   }
  150.   else {
  151.    
  152.   }
  153.  
  154.   for(int i = shooterLeftStart; i <= (shooterLeftEnd - shooterLeftStart + 1); i++) {
  155.     if(i % 4 == spinAdvancer) {
  156.       strip.setPixelColor(i, 100, 0, 100);
  157.     }
  158.     else {
  159.       strip.setPixelColor(i, 0, 0, 0);
  160.     }
  161.   }
  162.  
  163.   for(int i = shooterRightStart; i <= (shooterRightEnd - shooterRightStart + 1); i++) {
  164.     if(i % 4 == spinAdvancer) {
  165.       strip.setPixelColor(i, 100, 0, 100);
  166.     }
  167.     else {
  168.       strip.setPixelColor(i, 0, 0, 0);
  169.     }
  170.   }
  171. }
  172.  
  173. //Used when intaking from the shooter side of the robot.
  174. void reverse() {
  175.   if(millis() - spinDelay >= initialMillis) {
  176.     if(spinAdvancer == 0) {
  177.       spinAdvancer = 3;
  178.     }
  179.     else {
  180.       spinAdvancer--;
  181.     }
  182.     initialMillis = millis();
  183.   }
  184.   else {
  185.    
  186.   }
  187.  
  188.   for(int i = shooterLeftStart; i <= (shooterLeftEnd - shooterLeftStart + 1); i++) {
  189.     if((shooterLeftEnd - i) % 4 == spinAdvancer) {
  190.       strip.setPixelColor(shooterLeftEnd - i, 100, 0, 100);
  191.     }
  192.     else {
  193.       strip.setPixelColor(shooterLeftEnd - i, 0, 0, 0);
  194.     }
  195.   }
  196.  
  197.   for(int i = shooterRightStart; i <= (shooterRightEnd - shooterRightStart + 1); i++) {
  198.     if(shooterRightEnd - i) % 4 == spinAdvancer) {
  199.       strip.setPixelColor(shooterRightEnd - i, 100, 0, 100);
  200.     }
  201.     else {
  202.       strip.setPixelColor(shooterRightEnd - i, 0, 0, 0);
  203.     }
  204.   }
  205. }
  206.  
  207. //Used whne a cube has been detected by the ultrasonic or when the shooter is sped up to full speed.
  208. void flash() {
  209.   if(isCubeDetection) {
  210.     switch(flashState) {
  211.     case 0:
  212.       if(millis() - 250 >= initialMillis) {
  213.         for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
  214.           strip.setPixelColor(i, 0, 100, 0);
  215.         }
  216.         for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
  217.           strip.setPixelColor(i, 0, 100, 0);
  218.         }
  219.  
  220.         initialMillis = millis();
  221.         flashState = 1;
  222.       }
  223.       break;
  224.     case 1:
  225.       if(millis() - 250 >= initialMillis) {
  226.         for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
  227.           strip.setPixelColor(i, 0, 0, 0);
  228.         }
  229.         for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
  230.           strip.setPixelColor(i, 0, 0, 0);
  231.         }
  232.  
  233.         initialMillis = millis();
  234.         flashState = 0;
  235.       }
  236.       break;
  237.     }
  238.   }
  239.   else {
  240.     switch(flashState) {
  241.     case 0:
  242.       if(millis() - 250 >= initialMillis) {
  243.         for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
  244.           strip.setPixelColor(i, 100, 0, 100);
  245.         }
  246.         for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
  247.           strip.setPixelColor(i, 100, 0, 100);
  248.         }
  249.  
  250.         initialMillis = millis();
  251.         flashState = 1;
  252.       }
  253.       break;
  254.     case 1:
  255.       if(millis() - 250 >= initialMillis) {
  256.         for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
  257.           strip.setPixelColor(i, 0, 0, 0);
  258.         }
  259.         for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
  260.           strip.setPixelColor(i, 0, 0, 0);
  261.         }
  262.  
  263.         initialMillis = millis();
  264.         flashState = 0;
  265.       }
  266.       break;
  267.     }
  268.   }
  269. }
  270.  
  271. //Used when no other commands are running on the lights.
  272. void sparkle() {
  273.   int Pixel1 = random(shooterLeftStart, shooterLeftEnd);
  274.   int Pixel2 = random(shooterRightStart, shooterRightEnd);
  275.  
  276.   strip.setPixelColor(Pixel1, 100, 0, 100);
  277.   strip.setPixelColor(Pixel2, 100, 0, 100);
  278.   strip.show();
  279.   delay(3);
  280.   strip.setPixelColor(Pixel1, 0, 0, 0);
  281.   strip.setPixelColor(Pixel2, 0, 0, 0);
  282.   strip.show();
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement