// ---------------------------------------------------------------------------
// (| " Scanner_Larson.ino "|)
// (| " "|)
// (| " Ultimate Arduino Chaser - Originalmente por Joe Larson "|)
// (| " "|)
// (| " ¿Quieres hacer un perseguidor simple, conocido como "Scáner Larson""|)
// (| " para tus proyectos? "|)
// (| " "|)
// (| " Opcionalmente, puede conectar potenciómetros a los pines de solo "|)
// (| " lectura A6 y A7 para poder ajustar el ancho del escáner y la "|)
// (| " velocidad sobre la marcha sin volver a cargar el código. Puede, "|)
// (| " con solo editar algunas variables aquí al comienzo del código, "|)
// (| " personalizar este escáner según sus necesidades. ¿No necesitas "|)
// (| " tantos LED? Cambia los <numLEDs> y los pins[] en los que los has "|)
// (| " puesto. ¿No quiere ambos o ninguno de los potenciómetros en su "|)
// (| " proyecto? Setée useSpeedPot o useWidthPot a False y use el valor "|)
// (| " genérico 2 para el ancho del cursor y 60 ms de retraso para la "|)
// (| " velocidad. (Puede editar estos valores en las funciones "|)
// (| " getDelaySpeed() y getCursorWidth() en la parte inferior del código)"|)
// (| " "|)
// (| " ¡Un escáner Larson totalmente personalizable y liviano para todos "|)
// (| " tus proyectos. "|)
// (| " "|)
// (| " Este código de ejemplo es de dominio público. "|)
// (| " "|)
// (| " Maker: jorgechac© "|)
// (| " Visita https://jorgechac.blogspot.com/ "|)
// (| " "|)
// (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32 "|)
// (| " Whatsapp y Ventas NEQUI +573177295861 "|)
// (| " Bucaramanga - Colombia "|)
// (| " Simulación https://wokwi.com/projects/341312425454207571 "|)
// ------------------------------------------------------------------------------------------------
int numLEDs=16;
int pins[] = {2,3,4,5,6,7,8,9,10,11,12,A1,A2,A3,A4,A5};
int SpeedPotPin = A6;
int WidthPotPin = A7;
bool useSpeedPot = true;
bool useWidthPot = true;
void setup()
{
for (int pin=0; pin < numLEDs; pin++)
{
pinMode(pins[pin], OUTPUT);
}
}
void loop() {
for (int location = 0; location < numLEDs + getCursorWidth() - 1; location++) // chasing up
{
drawWithDelayAt(location);
}
for (int location = numLEDs + getCursorWidth() - 2; location>=0; location--) // chasing down
{
drawWithDelayAt(location);
}
}
void drawWithDelayAt(int loc)
{
drawScannerAt(loc, HIGH);
delay(getDelaySpeed());
drawScannerAt(loc, LOW);
}
void drawScannerAt(int loc, int value)
{
for (int j = 0; j < getCursorWidth(); j++)
{
if (((loc-j) < numLEDs) && ((loc-j) >= 0)) // Bounds checking
digitalWrite(pins[loc-j], value);
}
}
int getDelaySpeed()
{
if (!useSpeedPot)
return 60;
int speedvalue = analogRead(SpeedPotPin);
return map(speedvalue, 0, 1024, 20,400);
}
int getCursorWidth()
{
if (!useWidthPot)
return 2;
int widthvalue = analogRead(WidthPotPin);
return map(widthvalue, 0, 1024, 1,numLEDs);
}