Citat:
Ursprungligen postat av
e7andy
Istället för en delay så kontrollerar du tiden som gått i din loop och när villkoret har uppfyllts så ändrar du state på din led.
https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Vi behöver nog se mer av din kod för att förstå vad som behöver ändras.
Jo försökt kolla där men får ej alla lampor att följa mönstret.
Koden kan vara lite svår att läsa, ej renskriven.
Koden:
unsigned long previousMillis = 0;
const int i = LED_BUILTIN;
const long interval = 100;
char mode = 0;
boolean pressed = false;
void clearLEDs();
boolean checkButton();
void setup() {
pinMode(2, INPUT);
for(int i = 3; i < 14; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
}
if(mode == 0 || mode == 2)
{
for(int i = 13; i >= 3; i--)
{
if(checkButton() == true)
break;
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
}
}
if(mode == 1 || mode == 2)
{
for(int i = 3; i <= 13; i++)
{
if(checkButton() == true)
break;
digitalWrite(i, HIGH);
delay(100);
digitalWrite(i, LOW);
}
}
}
void clearLEDs()
{
for(int i = 3; i < 14; i++)
digitalWrite(i, LOW);
}
boolean checkButton()
{ char state = digitalRead(2);
if(state == HIGH && pressed == false)
{
pressed = true;
return false;
}
if(state == LOW && pressed == true)
{
mode++;
if(mode > 2)
mode = 0;
clearLEDs();
pressed = false;
return true;
}
return false;
}