Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Adafruit_NeoPixel.h>
- #include "SPI.h"
- #define NUM_LEDS 10
- #define PIN 3
- long initialMillis;
- String alliance;
- double spinDelay;
- boolean isCubeDetection;
- int command, morphState, morphCountRed, morphCountBlue, flashState;
- int spinCounter = 0;
- int spinAdvancer = 0;
- int drivetrainStart = 0;
- int drivetrainEnd = 20;
- int shooterLeftStart = 25;
- int shooterLeftEnd = 40;
- int shooterRightStart = 60;
- int shooterRightEnd = 75;
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- Serial.setTimeout(20);
- strip.begin();
- initialMillis = millis();
- //Sets all the lights on the robot to be purple by default.
- for(int i = 0; i <= NUM_LEDS; i++) {
- strip.setPixelColor(i, 100, 0, 100);
- }
- strip.show();
- morphState = 0;
- morphCountRed = 100;
- morphCountBlue = 100;
- }
- void loop() {
- // put your main code here, to run repeatedly:
- //Checks if there have been any new commands, and if so, reads it.
- if(Serial.available()) {
- command = Serial.read();
- Serial.print("Data received: ");
- Serial.print(command);
- Serial.println();
- }
- //Runs the correct methods if a command is received.
- switch(command) {
- case 1:
- alliance = "RED";
- break;
- case 2:
- alliance = "BLUE";
- break;
- case 3:
- reverse();
- break;
- case 4:
- spinDelay = 150;
- spinUp;
- break;
- case 5:
- spinDelay = 100;
- spinUp();
- break;
- case 6:
- spinDelay = 75;
- spinUp();
- break;
- case 7:
- spinDelay = 50;
- spinUp();
- break;
- case 8:
- isCubeDetection = true;
- flash();
- break;
- case 9:
- isCubeDetection = false;
- flash();
- break;
- default:
- sparkle();
- break;
- }
- //Constantly morphs between alliance color and purple, regardless of other commands on the lights.
- if(alliance == "RED") {
- for(int i = 0; i <= (drivetrainEnd - drivetrainStart + 1); i++) {
- strip.setPixelColor(i, morphCountRed, 0, morphCountBlue);
- }
- if(morphState == 0) {
- morphCountBlue--;
- if(morphCountBlue == 0) {
- morphState = 1;
- }
- }
- else {
- morphCountBlue++;
- if(morphCountBlue == 100) {
- morphState = 0;
- }
- }
- }
- else if(alliance == "BLUE") {
- for(int i = 0; i <= (drivetrainEnd - drivetrainStart + 1); i++) {
- strip.setPixelColor(i, morphCountRed, 0, morphCountBlue);
- }
- if(morphState == 0) {
- morphCountRed--;
- if(morphCountRed == 0) {
- morphState = 1;
- }
- }
- else {
- morphCountRed++;
- if(morphCountRed == 100) {
- morphState = 0;
- }
- }
- }
- else {
- }
- strip.show();
- }
- //Used when outputting from the shooter side of the robot, no matter what power is being used.
- void spinUp() {
- if(millis() - spinDelay >= initialMillis) {
- if(spinAdvancer == 3) {
- spinAdvancer = 0;
- }
- else {
- spinAdvancer++;
- }
- initialMillis = millis();
- }
- else {
- }
- for(int i = shooterLeftStart; i <= (shooterLeftEnd - shooterLeftStart + 1); i++) {
- if(i % 4 == spinAdvancer) {
- strip.setPixelColor(i, 100, 0, 100);
- }
- else {
- strip.setPixelColor(i, 0, 0, 0);
- }
- }
- for(int i = shooterRightStart; i <= (shooterRightEnd - shooterRightStart + 1); i++) {
- if(i % 4 == spinAdvancer) {
- strip.setPixelColor(i, 100, 0, 100);
- }
- else {
- strip.setPixelColor(i, 0, 0, 0);
- }
- }
- }
- //Used when intaking from the shooter side of the robot.
- void reverse() {
- if(millis() - spinDelay >= initialMillis) {
- if(spinAdvancer == 0) {
- spinAdvancer = 3;
- }
- else {
- spinAdvancer--;
- }
- initialMillis = millis();
- }
- else {
- }
- for(int i = shooterLeftStart; i <= (shooterLeftEnd - shooterLeftStart + 1); i++) {
- if((shooterLeftEnd - i) % 4 == spinAdvancer) {
- strip.setPixelColor(shooterLeftEnd - i, 100, 0, 100);
- }
- else {
- strip.setPixelColor(shooterLeftEnd - i, 0, 0, 0);
- }
- }
- for(int i = shooterRightStart; i <= (shooterRightEnd - shooterRightStart + 1); i++) {
- if(shooterRightEnd - i) % 4 == spinAdvancer) {
- strip.setPixelColor(shooterRightEnd - i, 100, 0, 100);
- }
- else {
- strip.setPixelColor(shooterRightEnd - i, 0, 0, 0);
- }
- }
- }
- //Used whne a cube has been detected by the ultrasonic or when the shooter is sped up to full speed.
- void flash() {
- if(isCubeDetection) {
- switch(flashState) {
- case 0:
- if(millis() - 250 >= initialMillis) {
- for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
- strip.setPixelColor(i, 0, 100, 0);
- }
- for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
- strip.setPixelColor(i, 0, 100, 0);
- }
- initialMillis = millis();
- flashState = 1;
- }
- break;
- case 1:
- if(millis() - 250 >= initialMillis) {
- for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
- strip.setPixelColor(i, 0, 0, 0);
- }
- for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
- strip.setPixelColor(i, 0, 0, 0);
- }
- initialMillis = millis();
- flashState = 0;
- }
- break;
- }
- }
- else {
- switch(flashState) {
- case 0:
- if(millis() - 250 >= initialMillis) {
- for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
- strip.setPixelColor(i, 100, 0, 100);
- }
- for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
- strip.setPixelColor(i, 100, 0, 100);
- }
- initialMillis = millis();
- flashState = 1;
- }
- break;
- case 1:
- if(millis() - 250 >= initialMillis) {
- for(int i = shooterLeftStart; i <= shooterLeftEnd; i++) {
- strip.setPixelColor(i, 0, 0, 0);
- }
- for(int i = shooterRightStart; i <= shooterRightEnd; i++) {
- strip.setPixelColor(i, 0, 0, 0);
- }
- initialMillis = millis();
- flashState = 0;
- }
- break;
- }
- }
- }
- //Used when no other commands are running on the lights.
- void sparkle() {
- int Pixel1 = random(shooterLeftStart, shooterLeftEnd);
- int Pixel2 = random(shooterRightStart, shooterRightEnd);
- strip.setPixelColor(Pixel1, 100, 0, 100);
- strip.setPixelColor(Pixel2, 100, 0, 100);
- strip.show();
- delay(3);
- strip.setPixelColor(Pixel1, 0, 0, 0);
- strip.setPixelColor(Pixel2, 0, 0, 0);
- strip.show();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement