Skip to content

Instantly share code, notes, and snippets.

@vishnumaiea
Created April 17, 2020 15:10
Show Gist options
  • Save vishnumaiea/3ff01ad9c6deec708120f6300abd9db4 to your computer and use it in GitHub Desktop.
Save vishnumaiea/3ff01ad9c6deec708120f6300abd9db4 to your computer and use it in GitHub Desktop.
Larson Scanner code for ESP32
#define LED_DELAY 45
int ledArray[10] = {0, 15, 2, 4, 5, 18, 19, 21, 22, 23};
void setup() {
for(int i=0; i<10; i++) {
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], HIGH); //make all HIGH for now
}
}
void loop() {
for(int i=0; i<10; i++) { //up counting
if((i != 0) && (i != 9)) { //shouldn't do it for terminating LEDs
pinMode(ledArray[i-1], INPUT); //make preceding LED high Z
pinMode(ledArray[i+1], INPUT); //make succeeding LED high Z
pinMode(ledArray[i], OUTPUT); //make the current LED pin to output !important
digitalWrite(ledArray[i], LOW); //activate the pin
delay(LED_DELAY);
}
else if(i == 0) { //if it is the first LED
pinMode(ledArray[i+1], INPUT); //just make one LED high Z
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], LOW);
delay(LED_DELAY);
}
else {
pinMode(ledArray[i-1], INPUT); //just make one LED high Z
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], LOW);
delay(LED_DELAY);
digitalWrite(ledArray[i], HIGH);
}
}
for(int i=9; i>=0; i--) { //down counting, everything is same except it's inverse
if((i != 0) && (i != 9)) {
pinMode(ledArray[i-1], INPUT);
pinMode(ledArray[i+1], INPUT);
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], LOW);
delay(LED_DELAY);
}
else if(i == 0) {
pinMode(ledArray[i+1], INPUT);
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], LOW);
delay(LED_DELAY);
}
else {
pinMode(ledArray[i-1], INPUT);
pinMode(ledArray[i], OUTPUT);
digitalWrite(ledArray[i], LOW);
delay(LED_DELAY);
digitalWrite(ledArray[i], HIGH);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment