私はマイクロコントローラーとしてAVRを使用し、プロセッサーとしてATMEGA8を使用しています(マイクロコントローラー内)。マイクロコントローラーを搭載したボードには4つのLEDがあります。プログラムを焼き、LEDを点灯させることができます。しかし、私は特定のことを達成することができません。
L1 L2 L3 L4
これらは4つのLEDです。最初のラウンドでは、各LEDが3秒後に点灯します。最後のLED(L4)は、最初のラウンドの後も点灯し続けます。3番目のラウンドが開始すると、各LEDは3秒のギャップで点灯し、L3はL4も点灯し続けます。点灯し、それは続きます....L1まで。
L1 L2 L3 L4
On
On On
On On On
On On On On
しかし、私はこれを達成することができません。1つのLEDをオンに設定すると、他のLEDがオフになるためです。10ミリ秒という小さな時間差を追加してみました。これを行うにはどうすればよいですか?これが私が今まで持っているものです:
#include<avr/io.h>
#include<util/delay.h>
DDRB = 0xFF; // input
//PORTB = 0xFF;
// ob00011110 --> on all --> binary
int i=0;
while(i<1) {
PORTB = 0b00010000; // first led on
_delay_ms(3000);
PORTB = 0b00001000; // second led on
_delay_ms(3000);
PORTB = 0b00000100; // third on
_delay_ms(3000);
PORTB = 0b00000010; // fourth on
_delay_ms(3000);
i += 1;
}
PORTB = 0b00000010; // keep the 4th on and start all over again and reach til 3rd LED