Knight Rider med Atmega168

AvcodedByMadi.NET

Knight Rider med Atmega168

Manipulation av I/O pinnar på MCU Atmega 168 – Lågnivå programmeringsspråk C / C++

I den gamla hederliga serien Knight Rider från 80-talet så kör huvudpersonen runt i en bil med en lysramp i fronten, där ljuset sveper fram och tillbaka från sida till sida.

#include <avr/io.h>
#include <util/delay.h>

void portON(){
  DDRB = 255;
  DDRD = 255;
}

void ledToLeft(){
// LED1  ON
    PORTB |= 1 << PB3;

    _delay_ms(100);

    // LED1  OFF
    PORTB &= ~(1 << PB3);

    // LED2  ON
    PORTB |= 1 << PB2;
    _delay_ms(100);
    // LED2  OFF
    PORTB &= ~(1 << PB2);

    // LED3  ON
    PORTB |= 1 << PB1;
    _delay_ms(100);

    // LED3  OFF
    PORTB &= ~(1 << PB1);

    // LED4  ON
    PORTD |= 1 << PD6;

    _delay_ms(100);

    // LED4  OFF
    PORTD &= ~(1 << PD6);

    // LED5  ON
    PORTD |= 1 << PD5;
    _delay_ms(100);
    // LED5  OFF
    PORTD &= ~(1 << PD5);

    // LED6  ON
    PORTD |= 1 << PD3;
    _delay_ms(100);

    // LED6  OFF
    PORTD &= ~(1 << PD3);
}

void ledToRight(){
    // LED5  ON
    PORTD |= 1 << PD5;
    _delay_ms(100);
    // LED5  OFF
    PORTD &= ~(1 << PD5);

    // LED4  ON
    PORTD |= 1 << PD6;

    _delay_ms(100);

    // LED4  OFF
    PORTD &= ~(1 << PD6);

    // LED3  ON
    PORTB |= 1 << PB1;
    _delay_ms(100);

    // LED3  OFF
    PORTB &= ~(1 << PB1);

    // LED2  ON
    PORTB |= 1 << PB2;
    _delay_ms(100);
    // LED2  OFF
    PORTB &= ~(1 << PB2);
}

int main()
{
  portON();

  while (1)
  {
    ledToLeft();
    ledToRight();
  }
  
}