diff --git a/speedyleds/Makefile b/speedyleds/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..374e6c6850c25461780808bf696d26d75e1e3836
--- /dev/null
+++ b/speedyleds/Makefile
@@ -0,0 +1,8 @@
+speedyleds.hex: speedyleds.o
+	avr-objcopy -j .text -j .data -O ihex speedyleds.o speedyleds.hex
+
+speedyleds.o:
+	avr-gcc speedyleds.c -o speedyleds.o -Wall -Wextra -Wpedantic -mmcu=atmega328p -Os -std=c99
+
+flash:
+	avrdude -p atmega328p -c gpio -U flash:w:speedyleds.hex
diff --git a/speedyleds/speedyleds.c b/speedyleds/speedyleds.c
new file mode 100644
index 0000000000000000000000000000000000000000..a292693cffa98781a5d08628e119c5e8758ebb2b
--- /dev/null
+++ b/speedyleds/speedyleds.c
@@ -0,0 +1,31 @@
+#define F_CPU 12000000UL
+
+#include<util/delay.h>
+#include<avr/io.h>
+#include<avr/libc.h>
+
+int main(void){
+    DDRD = 0b11111100;
+    DDRB = 0b00111111;
+    PORTD = 0b00000011;
+    PORTB = 0b00000000; 
+    char on = 0;
+    while(1){
+		while(!on){
+			if(PORTD != 0b11111111) PORTD = (PORTD<<1)+1;
+			else{
+				if(PORTB != 0b11111111) PORTB = (PORTB<<1)+1;
+				else on=1;
+			}
+			_delay_ms(250);
+		}
+		while(on){
+			if(PORTB != 0b00000000) PORTB = (PORTB-1)>>1;
+			else{
+				if(PORTD != 0b00000011) PORTD = (PORTD-1)>>1;
+				else on=0;
+			}
+			_delay_ms(250);
+		}
+    }
+}