Led op 2 snelheden knipperen

Hoi Beste Arduino-ers

Ik kom er even niet uit hoe ik het volgende voor elkaar kan krijgen.
Ik wil 1 led op 2 verschillenden snelheden laten knipperen.
1 snelheid als de waarde niet bereikt en de andere als de waarde wel bereikt is.
Dit wil ik graag op basis van Blink-without-delay doen.
Als ik regel 23 aanpas (C naar B en vv) dan knippert de led op de opgegeven snelheid maar ik krijg het niet voor elkaar om deze bij het bereiken van de waarde automatische aan te passen.
Het te gebruiken bordje is een Digispark met een Attiny 85 en waarbij A de waarde van omschakelen is en en B & C de timer waarde.

Alvast bedankt voor de duwtjes in de goede richting
Grt, Vic

const int analogInPin1 = {A1};   // Analog input pin:
int sensorValue1 = 0;        // value read from the potmeter
int outputValue1 = 0;        // value output to the LED ( PWM)
int relais1 = 3;
int ledState1 = LOW;
int  A=250;
int  B=1000;
int  C=100;

#define ledPin1  1                       // let op bordje
  

// set timer
unsigned long previousMillis = 0;        // will store last time LED was updated

void setup() {
pinMode(ledPin1, OUTPUT);               // set the digital pin als output
pinMode(relais1, OUTPUT);               // 220Vac schakelen

}
void loop()
{
const unsigned long interval1 = C;     // intervaltijd (tijd hoelang de led aan is (routine actief is)
                           // is de looptijd groter of gelijk aan interval voer dan de routine uit  
 unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval1) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState1 == LOW)
      ledState1 = HIGH;
    else
      ledState1 = LOW;
       // set the LED with the ledState of the variable:
    digitalWrite(ledPin1, ledState1);
   
  }
  // read the analog in value:
  sensorValue1 = analogRead(A1);  
 
   
   // map it to the range of the analog out:
   outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
   
   
   if ((outputValue1 < A))  // alles moet onder de 250 komen
   
   {
  digitalWrite(relais1, LOW);
  
    }
  else
{
  digitalWrite(relais1, HIGH);
  
    }
   
}

Interval1 zou ik buiten de loop zetten. Nu wordt hij elke keer opnieuw gezet als de loop begint. Door hem 'global' te maken zet je de initiele waarde in de setup() en als je een ander tempo wilt hoef je alleen maar een waarde in interval1 te zetten.

verder kun je dit:

[pre][code]// if the LED is off turn it on and vice-versa:
    if (ledState1 == LOW)
      ledState1 = HIGH;
    else
      ledState1 = LOW;
       // set the LED with the ledState of the variable:
digitalWrite(ledPin1, ledState1);

herschrijven als

digitalWrite(ledPin1, !digitalRead(ledPin1);

{A1} kan zonder de accolades

Int A,B,C kun je gerust vervangen door #define etc.

Hoi.

Als je een andere knippersnelheid wil, moet je dus de variabele veranderen die die knippersnelheid bepaalt. Dat is "intervall" in jouw sketch. Maar daarmee gaat een aantal dingen fout. Ten eerste maak je elke keer als je een rondje door "loop" doet, een nieuwe variabele aan met de naam intervall. Die wijs je dan ook meteen een waarde toe die in de variabele "C" is opgeslagen. En C word niet gewijzigd.

Er is helemaal geen reden om "intervall" te gebruiken als je "C" al uitsluitend voor dat doel hebt. Het is ook niet slim om "intervall" bij elk rondje opnieuw aan te maken. Dat opnieuw aanmaken komt omdat het een lokale variabele is, die alleen tijdens die ene keer dat je door "loop" heen loopt geldig is. Je kunt hier beter een globale variabele van maken die in je hele sketch geldig is (nadat ie eenmaal aangemaakt is).

Goed, ik zou het dus bij de variabele "C" houden, en die aanpassen als je je gewenste evenement hebt vastgesteld. Er moet dan dus nog iets anders gebeuren als het aansturen van een relais.

Heren Mas3 & Nico,

Bedankt voor het duwtje!
Het geheel werkt op dit moment naar behoren zoals ik het voor ogen had.
Ik heb het volgende van gemaakt

const int analogInPin1 = A1;    // Analog input pin:
int sensorValue1 = 0;           // value read from the potmeter
int outputValue1 = 0;           // value output to the LED ( PWM)
int relais1 = 3;
#define ledPin1  1              // let op bordje
int  A=250;                     // set waarde omschakelen   wijzig deze waarde naar eigen gevoel/idee
int  B=1000;                    // set waarde snelheid 1    wijzig deze waarde naar eigen gevoel/idee
int  C=100;                     // set waarde snelheid 2    wijzig deze waarde naar eigen gevoel/idee
int  ledState1 = LOW;
                     
 unsigned long interval1 = C;   // intervaltijd (tijd hoelang de led aan is (routine actief is)
                                      
// set timer
unsigned long previousMillis = 0;        // will store last time LED was updated

void setup() {
pinMode(ledPin1, OUTPUT);                // set digital pin1 als output (led)
pinMode(relais1, OUTPUT);                // set digital pin3 als output (voor schakelen relais)
}
void loop()
{
 unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval1) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState1 == LOW)
      ledState1 = HIGH;
    else
      ledState1 = LOW;
       // set the LED with the ledState of the variable:
    digitalWrite(ledPin1, !digitalRead(ledPin1));
   
  }
  // read the analog in value:
  sensorValue1 = analogRead(A1);              // lees waarde uit pin "A1"
    
   // map it to the range of the analog out:
   outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
     
   if ((outputValue1 < A))                    // alles moet onder de "A" komen zie boven aan
    {
  digitalWrite(relais1, LOW);                 // schakelen relais1
  interval1 = C;                              // set timer waaarde naar "C"
    }
  else
{
  digitalWrite(relais1, HIGH);                // schakelen relais1
  interval1 = B;                              // set timer waaarde naar "B"
    }
   
}

Goed opgelost.

Ik zie ook dat je de commentaren bij de variabelen hebt aangepast, zodat je zelf in de toekomst nog eens kan opzoeken hoe het ook al weer zat. Het commentaar is een van de eerste dingen die sneuvelen als code word aangepast. Niet kloppend commentaar is nog ergens als ontbrekend commentaar.