Skip to content

Instantly share code, notes, and snippets.

@arduinoboard
Last active March 23, 2018 01:43
Show Gist options
  • Save arduinoboard/385ebb69c0a9cca2b55d0d41587c24a0 to your computer and use it in GitHub Desktop.
Save arduinoboard/385ebb69c0a9cca2b55d0d41587c24a0 to your computer and use it in GitHub Desktop.
The file that is currently on an Arduino/Genuino Uno with a serial number of A4131363139351218160
#include <Adafruit_NeoPixel.h>
#define CENTER 130
#define STEER_RANGE 60
#define LEFT_BOUND (CENTER - STEER_RANGE)
#define RIGHT_BOUND (CENTER + STEER_RANGE)
#define IDLE_RANGE 5
#define PIN 8
Adafruit_NeoPixel strip = Adafruit_NeoPixel(218, PIN, NEO_GRB + NEO_KHZ800);
int turnAmt=CENTER;
int randomNum=random(CENTER - IDLE_RANGE, CENTER + IDLE_RANGE);
int knobState;
long debounce;
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
checkKnobState();
}
void loop() {
char myKnob;
while(Serial.available()){
int command = Serial.read();
switch (command) {
case 'l':
blueLeft();
leftLaneChange();
blueReturnFromLeft();
break;
case 'r':
blueRight();
rightLaneChange();
blueReturnFromRight();
break;
case 'm':
digitalWrite(6, LOW);
clearZone();
break;
case 'a':
digitalWrite(6, HIGH);
blueZone();
break;
case '7':
blueZone();
break;
case 'z':
clearZone();
break;
case '8':
yellowZone();
break;
case '9':
redZone();
break;
}
}
//random steering
if (millis()%1000==0){
if(turnAmt<randomNum){
turnAmt+=1;
}else if(turnAmt>randomNum){
turnAmt-=1;
}else{
randomNum=random(CENTER - IDLE_RANGE, CENTER + IDLE_RANGE);
}
analogWrite(5, turnAmt);
}
if (millis()>(debounce+500)){
myKnob=checkKnobState();
if(myKnob!='0'){
Serial.print(myKnob);
debounce=millis();
}
}
}
void blueZone() {
int startLED=188;
for(int i=0;i<(220-startLED);i++){
strip.setPixelColor(i+startLED, strip.Color(0,0,((220-startLED)-i)));
strip.setPixelColor(startLED-i, strip.Color(0,0,((220-startLED)-i)));
strip.show(); // This sends the updated pixel color to the hardware.
}
}
void blueLeft() {
for(int startLED=188;startLED>=140;startLED--){
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(0,0,0));
}
for(int i=0;i<32;i++){
strip.setPixelColor(i+startLED, strip.Color(0,0,31-i));
strip.setPixelColor(startLED-i, strip.Color(0,0,31-i));
}
strip.show(); // This sends the updated pixel color to the hardware
}
}
void blueReturnFromLeft() {
for(int startLED=140;startLED<=188;startLED++){
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(0,0,0));
}
for(int i=0;i<32;i++){
strip.setPixelColor(i+startLED, strip.Color(0,0,31-i));
strip.setPixelColor(startLED-i, strip.Color(0,0,31-i));
}
strip.show(); // This sends the updated pixel color to the hardware
}
}
void blueRight() {
for(int startLED=188;startLED<=230;startLED++){
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(0,0,0));
}
for(int i=0;i<32;i++){
if(i+startLED>=218){
strip.setPixelColor(i+startLED-218, strip.Color(0,0,31-i));
}else{
strip.setPixelColor(i+startLED, strip.Color(0,0,31-i));
}
if(startLED-i>=218){
strip.setPixelColor(startLED-i-218, strip.Color(0,0,31-i));
}else{
strip.setPixelColor(startLED-i, strip.Color(0,0,31-i));
}
}
strip.show(); // This sends the updated pixel color to the hardware
delay(10);
}
}
void blueReturnFromRight() {
for(int startLED=230;startLED>=188;startLED--){
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(0,0,0));
}
for(int i=0;i<32;i++){
if(i+startLED>=218){
strip.setPixelColor(i+startLED-218, strip.Color(0,0,31-i));
}else{
strip.setPixelColor(i+startLED, strip.Color(0,0,31-i));
}
if(startLED-i>=218){
strip.setPixelColor(startLED-i-218, strip.Color(0,0,31-i));
}else{
strip.setPixelColor(startLED-i, strip.Color(0,0,31-i));
}
}
strip.show(); // This sends the updated pixel color to the hardware
delay(10);
}
}
void clearZone() {
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(0,0,0));
}
strip.show(); // This sends the updated pixel color to the hardware.
}
void yellowZone() {
int startLED=188;
for(int i=0;i<(220-startLED);i++){
int brightness = ((220-startLED)-i)*2;
strip.setPixelColor(i+startLED, strip.Color(brightness,brightness,0));
strip.setPixelColor(startLED-i, strip.Color(brightness,brightness,0));
strip.show(); // This sends the updated pixel color to the hardware.
}
}
void redOn() {
for(int i=0;i<218;i++){
strip.setPixelColor(i, strip.Color(255,0,0));
}
strip.show(); // This sends the updated pixel color to the hardware.
}
void redZone(){
redOn();
delay(100);
clearZone();
delay(100);
redOn();
delay(100);
clearZone();
delay(100);
redOn();
}
char checkKnobState(){
int knobVar=analogRead(A0);
if (knobVar>400 && knobVar<499 && knobState!=1){
knobState=1;
return 'k';
}else if (knobVar>500 && knobVar<574 && knobState!=2){
if(knobState!=1){
knobState=2;
return 'l';
}else{
knobState=2;
return '0';
}
}else if (knobVar>575 && knobVar<649 && knobState!=3){
if(knobState!=1){
knobState=3;
return 'm';
}else{
knobState=3;
return '0';
}
}else if (knobVar>650 && knobVar<699 && knobState!=4){
if(knobState!=1){
knobState=4;
return 'n';
}else{
knobState=4;
return '0';
}
}else{
return '0';
}
}
void leftLaneChange(){
for (; turnAmt > LEFT_BOUND; turnAmt--) {
analogWrite(5, turnAmt);
delay(15);
}
delay(2000);
for (; turnAmt < CENTER; turnAmt++) {
analogWrite(5, turnAmt);
delay(15);
}
}
void rightLaneChange(){
for (;turnAmt < RIGHT_BOUND; turnAmt++) {
analogWrite(5, turnAmt);
delay(15);
}
delay(2000);
for (;turnAmt > CENTER; turnAmt--) {
analogWrite(5, turnAmt);
delay(15);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment