Changing color rgb led from green to led

A girlfriend of mine has trouble with a silly piece of code, and i only now how to do it when its in (R,G,B) format. She’s trying to make the led go from green to orange. Here’s the line

analogWrite(ledgroen, 140); //led is green

Here’s the entire piece of code for the interested!

#include <Servo.h> /* Dit zorgt ervoor dat ik de servomotor kan gebruiken*/
#include <stdint.h> /* dit zorgt ervoor dat ik met de uint32_t kan werken*/


/* dit zijn de variabelen die ik gebruik */
int bewegingsdetector = D5;
int knop = D3;
int poepiecount = 0;
int ledgroen = D4;
int ledblauw = D8;
int ledrood = D6;
int servopin = D2;
uint32_t timer5; /* Dit is de timer die telt voor 5 sec. kan niet negatief zijn, tijd gaat niet in de min. het is een 32 bit getal, de klok die telt telt tot 32 bit getal*/
uint32_t timer30; /* Dit is de timer die telt voor 30 sec.*/
Servo servo;

void setup() {

  pinMode(bewegingsdetector, INPUT); /*bewegingssensor*/
  pinMode(knop, OUTPUT); /*Knop*/
  pinMode(ledblauw, OUTPUT); /*lichtje*/
  pinMode(ledgroen, OUTPUT); /*lichtje*/
  pinMode(ledrood, OUTPUT); /*lichtje*/
  delay(100); /* zo begint Millis niet op 0. bron:https://forum.arduino.cc/index.php?topic=384760.0 */
  digitalWrite(ledblauw, LOW); /* dit si het blauwe licht*/
  digitalWrite(ledgroen, LOW); /* dit is het groene licht */
  digitalWrite(ledrood, LOW); /* dit is het rode licht*/
  servo.attach(servopin); /* hiermee verbind je de servo aan de pin */
  servo.write(180); /* hiermee gaat de servo naar de beginstand.*/
  Serial.begin(9600); /* voor het testen als er iets fout gaat*/
}

void loop() {
  /* eerst heb ik een nieuwe variabele aangemaakt 'beweging'. beweging begint op low.
   *  de beweging is low omdat er geen beweging is, hij leest dit met de digitalread af van de pin waar de bewegingssensor aan zit.*/
  int beweging = LOW;
  while (beweging == LOW){
    beweging = digitalRead(bewegingsdetector); //de vraag: is er beweging?
    delay(1); /* Dit is om te voorkomen dat de nodemcu reset  */
    /*ruststaat, wachten tot we iets gaan doen. als er nu op de knop gedrukt wordt moet poepiecount weer naar 0*/
    /* We vragen aan de functie digitalread of de pin knop hoog of laag is en we vergelijken de uitkomst ermee met hoog*/
    if (digitalRead(knop) == HIGH){
      /*Tim heeft de poepiecount gereset met de knop
      alles gaat terug naar beginstand*/
      poepiecount = 0;
      digitalWrite(ledblauw, LOW);
      digitalWrite(ledgroen, LOW);
      digitalWrite(ledrood, LOW);
      servo.write(180);
      delay(1000);
    }
  }

  /* hier staat millis, omdat hiermee de starttijd van de timers wordt vastgelegd*/
  timer5 = millis();
  timer30 = millis();

  /* hieronder worden de millis gedefinieerd*/
  #define SECONDE5 1000*5
  #define SECONDE30 1000*6

  /* zolang de timers nog niet afgelopen zijn wordt er iets uitgevoerd, de loop blijft doorgaan
  steeds kijken naar de tijd van nu en deze vergelijken met eerder vastgelegde tijd + aantal milliseconde om te kijken of de tijd is verstreken (30 of 5 seconden)*/
  while (millis() < timer5 + SECONDE5 && millis() < timer30 + SECONDE30 ){
    delay(1); /* Dit is om te voorkomen dat de nodemcu reset*/

    beweging = digitalRead(bewegingsdetector); //is er beweging?
    if (beweging == HIGH){
      /* herstarten van timer 5 */
      timer5 = millis();
    }
    /* om het systeem ook in deze fase te kunnen resetten*/
    if (digitalRead(knop) == HIGH){
      /*Tim heeft de poepiecount gereset met de knop*/
      poepiecount = 0;
      digitalWrite(ledblauw, LOW);
      digitalWrite(ledgroen, LOW);
      digitalWrite(ledrood, LOW);
      servo.write(180);
      delay(1000);
      return;
    }
  }

  /* hierbij checken we of de 30 seconde timer over is en gaat de poepiecount omhoog en het eerste licht aan.
  millis is het totaal aantal milliseconden dat is verstreken, deze moet groter zijn dan het eerder vastgelegde aantal milliseconden van timer30.
  De + 30 seconden kijkt of het verschil daadwerkelijk 30 seconden is.*/
  if (millis() >= timer30 + SECONDE30){
    poepiecount += 1;

    if (poepiecount == 3){
      servo.write(120); /* Hoi baas, ik heb een poepie gedaan.' */
      digitalWrite(ledgroen, HIGH);
    }
    else if (poepiecount == 5){
      servo.write(60); /* oeps, mijn bak begint te stinken' */
      analogWrite(ledgroen, 140); //led is green
      analogWrite(ledrood, 255);
    }
     else if (poepiecount == 7){
      servo.write(0); /* sorry baasje, als hij niet wordt verschoond poep ik er misschien naast.' */
      digitalWrite(ledgroen, LOW);
      digitalWrite(ledrood, HIGH);
    }
  }
}

There is code to change the color based on “poepiecount” and that appears OK. I think there are problems in the rest of the code. It seems to be using two timers but I can’t tell from the sketch what it is supposed to do, even after translating the comments and variables to english.

Warning: Use “if (currentTime - startTime > interval)” instead of “if (currentTime > startTime + interval)” Using addition doesn’t work when the timer is near its maximum value. Subtraction works to calculate elapsed time.

When you use digitalWrite you only get full ON or full OFF, limiting your color selection to the 8 primaries.

digitalWrite(ledblauw, HIGH);
digitalWrite(ledgroen, LOW);
digitalWrite(ledrood, LOW);

will result in blue,

digitalWrite(ledblauw, HIGH);
digitalWrite(ledgroen, LOW);
digitalWrite(ledrood, HIGH);

will result in a different color (purple?)

To get different colors, use analogWrite but you need to use the PWM pins (3, 5, 6, 9, 10 or 11)

analogWrite(ledblauw, blue_value);
analogWrite(ledgroen, green_value);
analogWrite(ledrood, red_value);

where blue_value, green_value and red_value can be from 0 to 255, giving you the full range of colors.