#include <Adafruit_NeoPixel.h>
#define LED_PIN 6 //Pin connected to NeoPixel Ring
#define LED_COUNT 16 //# of LEDs in NeoPixel Ring
// Declare our NeoPixel strip object:
Adafruit_NeoPixel pixels(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int xMin = 0;
int xMid = 522;
int xMax = 1023;
int yMin = 0;
int yMid = 499;
int yMax = 1023;
int buttonState = 0;
float angle = 0;
int n=0;
int n1=0;//Value prior to n
int n2=0;//Value after n
int c=0;//Joystick pushbutton tracker variable
int c1[6]={255,0,0,255,255,0};
int c2[6]={0,0,255,0,255,255};
int c3[6]={0,255,0,255,0,255};
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(2, INPUT_PULLUP);
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}
void loop() {
int xValue = analogRead(A0);
int yValue = analogRead(A1);
buttonState = digitalRead(2);
int xMapped;
if (xValue < xMid) {
xMapped = map(xValue, xMin, xMid, 0, 511);
} else {
xMapped = map(xValue, xMid, xMax, 512, 1023);
}
int yMapped;
if (yValue < yMid) {
yMapped = map(yValue, yMin, yMid, 0, 511);
} else {
yMapped = map(yValue, yMid, yMax, 512, 1023);
}
float angle = atan2(-yMapped+yMid, xMapped-xMid) * 180.0f / PI;
if(angle<0){
angle=angle + 360;
}
if(buttonState ==0){
if(c==5){c=0;}
else{
c=c+1;
}
}
if((abs(-yMapped+yMid)>50)||(abs(xMapped-xMid)>50)){
n=round((angle/22.5)-1);
if(n==15){
n1=14;
n2=0;
}else if(n==0){
n1=15;
n2=1;
}else{
n1=n-1;
n2=n+1;
}
pixels.clear(); // Set all pixel colors to 'off'
pixels.setPixelColor(n, pixels.Color(c1[c], c2[c], c3[c]));
pixels.setPixelColor(n1, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(n2, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
}
else{
pixels.setPixelColor(0, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(1, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(2, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(3, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(4, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(5, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(6, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(7, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(8, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(9, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(10, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(11, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(12, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(13, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(14, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
pixels.setPixelColor(15, pixels.Color(c1[c]*5/255, c2[c]*5/255, c3[c]*5/255));
}
pixels.show(); // Send the updated pixel colors to the hardware.
Serial.print("X: ");
Serial.print(xMapped);
Serial.print(" Y: ");
Serial.print(yMapped);
Serial.print(" | Button: ");
Serial.print(buttonState);
Serial.print(" | Angle: ");
Serial.print(angle);
Serial.print(" | n: ");
Serial.println(n);
delay(100);
}