void setup()
{
DDRD = B11111111; // Set PORT D as OUTPUT
DDRB = B00000000; // Set PORT B as INPUT
PORTB = B00001111; // Set bits 0 - 4 to PULL-UP
}
void RunnigLEDLeft() // Effect: Runnig ligth from right to left
{
byte Operand1 = B00000001; // Set start bit
PORTD = Operand1; // Write to port D
for (int cyklus = 0; cyklus<=8; cyklus++) // 8 LED - so... 8 steps :)
{
PORTD = Operand1; // Write to port D
Operand1 = Operand1 << 1; // Shift to LEFT (move ligth to left)
delay(500); // wait..
}
}
void RunnigLEDRight() // Effect: Runnig light from left to right
{
byte Operand1 = B10000000; // Set start bit
PORTD = Operand1; // Write to port D
for (int cyklus = 0; cyklus<=8; cyklus++) // 8 LED....
{
PORTD = Operand1; // Write to port D
Operand1 = Operand1 >> 1; // Shift bits from left to right
delay(500); // ... and wait...
}
}
void RunnigDark() // Effect: Runnig "dark"
{
byte Operand1 = B11111110; // Set start bits
byte Operand2 = B00000001; // Set 2nd operand for some bits operation
PORTD = Operand1; // Write to port D
for (int cyklus = 0; cyklus<=8; cyklus++) // 8 LED... you know ;)
{
PORTD = Operand1; // Write to port D
Operand1 = Operand1 << 1; // Shift bits to LEFT
Operand1 = Operand1 | Operand2; // Some "bits magic"? No :) Just add one bit to right (OR)
delay(500); //... aaaaand Wait...
}
}
void FillLED() // Effect: Fill every LED from right to left.
{
byte Operand1 = B00000001; // Set start bits
byte Operand2 = B00000001; // Set bits for bit logic
PORTD = Operand1; // Write to port D
for (int cyklus = 0; cyklus<=8; cyklus++) // 8 Led...
{
PORTD = Operand1; // Write to port D
Operand1 = Operand1 << 1; // Shift bits to LEFT
Operand1 = Operand1 | Operand2; // Add bit to LEFT....
delay(500); // wait...
}
}
void loop() // Main loop
{
int hodnota = PINB; // Read port B to hodnota
hodnota = ~hodnota; // bitwise NOT - pull-up - default value is HIGH ;)
hodnota = hodnota & B00001111; // Mask higher 4 bits
switch (hodnota) // Test value
{
case 1: // Button 1
RunnigLEDLeft(); // Call effect 1
break;
case 2: // Button 1
RunnigLEDRight(); // Call effect 2
break;
case 4: // Button 1
RunnigDark(); // Call effect 3
break;
case 8: // Button 1
FillLED(); // Call effect 4
break;
default:
PORTD = 0; // in other case - set PORTD to 0
break;
}
}