Wat je print zijn pin nummers, niet de status van de pinnen. Kan dat je probleem (of een van je problemen) zijn?
Vervolgens vergelijk je bv upPin (A4, waarde 18) met HIGH (waarde 1) en dat zal altijd onwaar zijn.
Je zult je pinnen moeten lezen met digitalRead() en op het resultaat moeten reageren.
Het volgende stukje zal je een beetje verder op weg helpen
Voeg dit toe in het begin van loop
void loop()
{
byte upStatus;
byte downStatus;
...
...
Dit declareert twee variabelen waar de status van je knoppen in kan worden opgeslagen.
Vervolgens kun je de knoppen lezen en de waarde opslaan in de variabelen.
void loop()
{
byte upStatus;
byte downStatus;
upStatus = digitalRead(upPin);
downStatus = digitalRead(downPin);
...
...
In de ‘if’ kun je nu de status printen
if (i < 2 | i > Leds)
{
dir *= -1;
i += dir * 2;
Serial.print("time = "); Serial.println(time);
Serial.print("upStatus = "); Serial.println(upStatus);
Serial.print("downStatus = "); Serial.println(downStatus);
...
...
En je kunt de status testen en daarop reageren.
if (upStatus == HIGH)
{
time = time + 50;
}
if (downStatus == HIGH)
{
time = time - 50;
}
Ik heb de extra ronde haakjes verwijderd (die zijn niet nodig) en ook de ‘;’ na de ‘}’ (ook niet nodig).
Nu zijn er nog wat problemen. Als de downStatus HIGH is, kan je time variabele negatief worden. Je zult waarschijnlijk willen testen voor nul.
if (downStatus == HIGH)
{
time = time - 50;
if(time < 0)
{
time = 0;
}
}
Je kunt ook andere limieten zetten, bv 200ms als de minimum tijd (verander the twee nullen naar tweehonderd).
Er zit waarschijnlijk ook een fout in je logica. Je probeert alleen je knoppen te lezen (als ik de code goed begrijp) als je looplicht van richting verandert. Is dat de intentie? Misschien moet je het lezen, printen en reageren op de knoppen uit de eerste ‘if’ halen en ervoor plaatsen.
Verder is er een probleem dat je alleen de uitgangen 2…13 hoog of laag maakt in loop(); je extra leds worden niet aangestuurd. Je zult de variabele Leds moeten aanpassen om extra leds aan te sturen. Deze oplossing zal werken op een bv een Uno maar misschien niet met andere Arduinos
En dan is er nog een varieteit aan andere mogelijke problemen.
1)
Ik vermoed dat je knop is aangesloten tussen 5V en een pin van de Arduino. Als dat het geval is zul je ook weerstanden (bv 10k) moeten gebruiken tussen tussen de pin en gro(u)nd. Als je dat niet doet zullen de ingangen zweven en het lezen van een knop die niet is ingedrukt zal soms resulteren in LOW en soms resulteren in HIGH. Je kunt een beetje onderzoek doen naar ‘floating inputs’ en de weerstanden die je aansluit tussen de pin and gro(u)nd worden pull-down weerstanden genoemd.
Gebruik je weerstanden? Indien niet, dan kun je gebruik maken van de weerstanden die zijn ingebouwd in de microcontroller. Dit zijn weerstanden tussen 5V en de pin (zogenaamde pull-up weerstanden); je zult echter de knoppen moeten aansluiten tussen de pinnen en gro(u)nd. En de logica is dan omgedraaid; een ingedrukte knop geet LOW en een niet ingedrukte knop geeft HIGH.
-
Als je een lange tijd hebt ingesteld zal het lang duren voordat je code reageert op op het indrukken van een knop; als bv, de tijd 1 minuut is, zal het 1 minuut duren voordat de tijd wordt aangepast als je de knop indrukt.
-
In principe wil je niet reageren op de status van een knop maar op de verandering in de status van de knop. Als er geen delays() waren zal je code in een rot tempo de tijd aanpassen als de knop is ingedrukt.
-
Als een knop wordt ingedrukt of losgelaten is dat niet een eenmalige overgang van bv hoog naar laag maar een aantal overgangen; dit zal invloed hebben op (3) hierboven. Dit heet ‘contact dender’ (of bounce in het engels).
Ik laat het hier even bij; je hebt een paar dingen om uit te proberen 
Je kunt voor (3) kijken naar het ‘state change detection’ voorbeeld in de IDE en je kunt ook eens kijken naar het ‘blink without delay’ voorbeeld in de IDE zodat je de delay kwijt kunt raken en je code bij langere tijden nog steeds snel zal reageren op het indrukken van de knoppen.