Hallo,
ich habe ein erst schneller werdendes und wieder langsamer werdendes Lauflicht gebastelt. Mit 8 LEDs in Reihe nach rechts höherwertig werdend. Er fängt richtig an, beschleunigt in 3 Durchgängen, bleibt richtigerweise an der letzten LED 1sec. stehen und sollte dann nahtlos rückwärts wieder langsamer werden. Klappt fast. Er springt hier kurz zur 1. LED und dann wieder zur 8. und beginnt jetzt erst.
Das heißt beim Übergang von der ersten for Schleife nach dem Delay(1000); in die zweite for Schleife ändert sich seltsamerweise der Inhalt von LED Port.C.
Warum? Ich erkenne keinen Fehler.
Der Inhalt von LED am Port.C wird nur doppelt ausgegeben werden beim Schleifeneintritt, weil ich das so wie es ist übernehme. Danach müßte der Inhalt von LED sofort von 128 auf 64 springen usw. Macht er aber nicht. Er wechselt kurz auf 1 und dann gehts los mit 128 > 64 > 32
Ideen?
// Arduino Mega 2560
int LED = 1;
int ZeitForward [24] = {576, 529, 484, 441, 400, 361, 324, 289, 256, 225, 196, 169, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1};
int ZeitBackward [24] = {6, 10, 16, 24, 34, 45, 58, 73, 90, 108, 129, 151, 174, 200, 227, 256, 287, 320, 354, 390, 428, 468, 509, 552};
void setup()
{
Serial.begin(9600);
DDRC = 255; // Port.A komplett Ausgang
PORTC = 255; // Port.A alles Ein, Funktionstest
delay(500);
PORTC = 0; // Port.A alle Ausgänge Aus
delay(500);
}
void loop()
{
for (int i=0; i <=23; i++)
{
PORTC = LED;
LED = LED << 1;
if (LED > 128) {LED = 1;}
delay(ZeitForward[i]);
}
delay(1000);
for (int i=0; i <=23; i++)
{
PORTC = LED;
LED = LED >> 1;
if (LED < 1) {LED = 128;}
delay(ZeitBackward[i]);
}
delay(1000);
}