Programmeren Arduino, switch statement

Hallo, ik ben als beginner bezig met een programma voor mijn arduino Nano maar krijg het niet werkend. Doel is om later met een draaischakelaar met de weerstanden verschillende acties te starten. Als ik de sketch run gaat de rode led branden maar als ik een dipswitch inschakel (dus de waarde hoger als 0 maak) gebeurd er niets. Vast bedankt voor suggesties.
Dit is de sketch:

code:


/* Test met 6 x dipswitch met verschillende weerstanden en 6 x LED en switch statement. Eerst met andere sketch de waardes op A0 uitgelezen
 * en genoteerd. Gemeten waardes: met 10K +/- 511, met 18K +/- 361, met 33K +/- 234, met 47K +/- 175, met 68K +/- 129, en 100K +/- 90.
 * Als de sketch werkt wordt de dipswitch vervangen door een draaischakelaar. Verder worden de LED's vervangen door een 3 voudig 7-segment displayen en worden de functies uitgebreid, de LED's zijn dus maar tijdelijk, maar het blijven wel ouputs.
 */

  int rood = 12;              // Rode LED op pin 12
  int geel = 11;              // Gele LED op pin 11
  int oranje = 10;            // Oranje LED op pin 10
  int groen = 9;              // Groene LED op pin 9
  int wit = 8;                // Witte LED op pin 8
  int blauw = 7;              // Blauwe LED op pin 7

  int interval = 200;        // Tijdsduur tussen LED aan/uit

  int val = 0;               // variabele waarde, te lezen uit analoog A0

void setup() {

  pinMode(rood, OUTPUT);      // Zet pinnen 7 - 12 op output
  pinMode(geel, OUTPUT);      
  pinMode(oranje, OUTPUT);
  pinMode(groen, OUTPUT);
  pinMode(wit, OUTPUT);
  pinMode(blauw, OUTPUT);

  val = analogRead(0);        // Waarde wordt gelezen op analoge input A0

  while (val< 10)             // Zolang de waarde kleiner is als 0 (er geen dipswitch is geschakeld) rode LED aan.

    {digitalWrite(rood, HIGH);}
  
}
void loop() {
  
      if (val > 500 && val < 520){      // Als gemeten waarde ligt tussen 500 & 520, kies case 1
        val = 500;}
      else if(val > 350 && val < 365){      // Als gemeten waarde ligt tussen 350 & 365, kies case 2
        val = 350;}
      else if (val > 225 && val < 235){      // Als gemeten waarde ligt tussen 225 & 235, kies case 3
        val = 225;}
      else if(val > 165 && val < 180){      // Als gemeten waarde ligt tussen 165 & 180, kies case 4
        val = 165;}
      else if (val > 125 && val < 135){      // Als gemeten waarde ligt tussen 125 & 135, kies case 5
        val = 125;}
      else if (val > 80 && val < 100){       // Als gemeten waarde ligt tussen 80 & 100, kies case 6
        val = 80;}
      else{
      }
    }    
      void LEDrood (){                     // Functiestap rode LED
      digitalWrite(rood, HIGH);
      delay(interval);
      digitalWrite(rood, LOW);
      delay(interval);}

      void LEDgeel (){                     // Functiestap gele LED
      digitalWrite(geel, HIGH);
      delay(interval);
      digitalWrite(geel, LOW);
      delay(interval);}
      
      void LEDoranje (){                   // Functiestap oranje LED
      digitalWrite(oranje, HIGH);
      delay(interval);
      digitalWrite(oranje, LOW);
      delay(interval);}
          
      void LEDgroen (){                    // Functiestap groene LED
      digitalWrite(groen, HIGH);
      delay(interval);
      digitalWrite(groen, LOW);
      delay(interval);}
          
      void LEDwit (){                      // Functiestap witte LED
      digitalWrite(wit, HIGH);
      delay(interval);
      digitalWrite(wit, LOW);
      delay(interval);}
          
      void LEDblauw (){                     // Functiestap blauwe LED
      digitalWrite(blauw, HIGH);
      delay(interval);
      digitalWrite(blauw, LOW);
      delay(interval);

        switch (val){
        case '1':         // Weerstandwaarde case 1, rode LED 3 x aan/uit
        LEDrood(); LEDrood(); LEDrood();
        break;
        case '2':         // Weerstandwaarde case 2, gele LED 3 x aan/uit
        LEDgeel(); LEDgeel(); LEDgeel();
        break;
        case '3':       // Weerstandwaarde case 3, oranje LED 3 x aan/uit
        LEDoranje(); LEDoranje(); LEDoranje();
        break;
        case '4':       // Weerstandwaarde case 4, groene LED 3 x aan/uit
        LEDgroen(); LEDgroen(); LEDgroen();
        break;
        case '5':       // Weerstandwaarde case 5, witte LED 3 x aan/uit
        LEDwit(); LEDwit(); LEDwit();
        break;
        case '6':       // Weerstandwaarde case 6, blauwe LED 3 x aan/uit
        LEDblauw(); LEDblauw(); LEDblauw();
        break;      
  }
}

Je moet alle LED<kleur> buiten de main loopplaatsen.

GMT+1

De waarde van val wordt nu 1 keer gezet in setup(), en daarna nooit meer.

Er is geen magische verbinding tussen de dipswitch en val.
Die moet je zelf koppelen.

Bij Arduino is het zo dat setup() 1 keer loopt bij het starten van het programma.

Daarna blijft de machine steeds loop() herhalen.
Dus in dit geval moet je ook in loop de val weer opnieuw zetten.

code:


void loop() 
{
   val = analogRead(0);        // Waarde wordt gelezen op analoge input A0
  

Bovendien zet je in de loop specifieke getallen in val.

Diezelfde getallen moet je dan ook in de switch gebruiken:
Zonder de single quotes.

code:


   switch (val)
   {  case 500:         // Weerstandwaarde case 1, rode LED 3 x aan/uit
        LEDrood(); LEDrood(); LEDrood();
        break;
      case 350:         // Weerstandwaarde case 2, gele LED 3 x aan/uit
        LEDgeel(); LEDgeel(); LEDgeel();
        break;
      case 225:       // Weerstandwaarde case 3, oranje LED 3 x aan/uit
        LEDoranje(); LEDoranje(); LEDoranje();
        break;
      case 165:       // Weerstandwaarde case 4, groene LED 3 x aan/uit
        LEDgroen(); LEDgroen(); LEDgroen();
        break;
      case 125:       // Weerstandwaarde case 5, witte LED 3 x aan/uit
        LEDwit(); LEDwit(); LEDwit();
        break;
      case  80:       // Weerstandwaarde case 6, blauwe LED 3 x aan/uit
        LEDblauw(); LEDblauw(); LEDblauw();
        break;      
   }

De compiler vindt het geen probleem als je quotes gebruikt.
Maar '1' betekent 'de ascii code voor de letter '1', (ofwel 49).

De getallen in de switch moeten overeenkomen met de waarde van val.

Daarnaast kan je de boel iets vereenvoudigen:

code:


void blink_a_led_once (int led)
{
  digitalWrite (led, 1);
  delay(interval);
  digitalWrite (led, 0); 
  delay(interval);
}
void blink_a_led_three_times (int led)
{
  blink_a_led_once(led);
  blink_a_led_once(led);
  blink_a_led_once(led);
}

En dan kan je:

code:


  int theled;
  theled = NONE; 
  val = analogRead (0);
  if ((val >  80) && (val < 100)) theled = rood;
  if ((val > 125) && (val < 135)) theled = blauw;
  ... 
  if (theled != NONE) 
    blink_a_led_three_times (theled);
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Hensz

Golden Member

Volgens mij is het dan ook nog eens zo dat je val in de if-statements op de laagste van de twee gemeten waardes zet (500, 350, 225 etc.) maar vervolgens in de switch test op '1', '2', '3' etc. Krijg je geen waarschuwing dat je een int vergelijkt met een char?

Don't Panic!

Hartelijk dank voor alle tips.
Ik heb de sketch aangepast zoals ik van jullie heb begrepen. Ik weet alleen niet hoe ik de functies (LED<kleur> buiten de main loop moet plaatsen, heb alles geprobeerd maar krijg dan alleen maar foutmeldingen. De compiler geeft nu geen foutmelding meer maar de sketch werkt nog steeds niet. Na upload gaat de rode led aan en daar blijft het bij.

Zo is de sketch nu, wat doe ik nu nog fout?

code:


/* Test met 6 x dipswitch met verschillende weerstanden en 6 x LED en switch statement. Eerst met andere sketch de waardes op A0 uitgelezen
 * en genoteerd. Gemeten waardes: met 10K +/- 511, met 18K +/- 361, met 33K +/- 234, met 47K +/- 175, met 68K +/- 129, en 100K +/- 90.
 * Als de sketch werkt wordt de dipswitch vervangen door een draaischakelaar. Verder worden de LED's vervangen door een 3 voudig 7-segment 
 * display en worden de functies uitgebreid, de LED's zijn dus maar tijdelijk, maar het blijven wel ouputs.
 */

  int rood = 12;              // Rode LED op pin 12
  int geel = 11;              // Gele LED op pin 11
  int oranje = 10;            // Oranje LED op pin 10
  int groen = 9;              // Groene LED op pin 9
  int wit = 8;                // Witte LED op pin 8
  int blauw = 7;              // Blauwe LED op pin 7

  int interval = 200;         // Tijdsduur tussen LED aan/uit

  int val = 0;              // variabele waarde, te lezen uit analoog A0

void setup() {

  pinMode(rood, OUTPUT);      // Zet pinnen 7 - 12 op output
  pinMode(geel, OUTPUT);      
  pinMode(oranje, OUTPUT);
  pinMode(groen, OUTPUT);
  pinMode(wit, OUTPUT);
  pinMode(blauw, OUTPUT);

  val = analogRead(0);        // Waarde wordt gelezen op analoge input A0

  while (val< 10)               // Zolang de waarde kleiner is als 10 (er 
geen dipswitch is geschakeld) rode LED aan.
    {digitalWrite(rood, HIGH);}
  
}
void loop() 
{
      val = analogRead(0);    // Waarde wordt gelezen op analoge input A0 (herhaling)

      if (val > 500 && val < 520){     // Als gemeten waarde ligt tussen 500 & 520, case 500
        val = 500;}
      else if(val > 350 && val < 365){   // Als gemeten waarde ligt tussen 350 & 365, case 350
        val = 350;}
      else if (val > 225 && val < 235){  // Als gemeten waarde ligt tussen 225 & 235, case 225
        val = 225;}
      else if(val > 165 && val < 180){   // Als gemeten waarde ligt tussen 165 & 180, case 165
        val = 165;}
      else if (val > 125 && val < 135){  // Als gemeten waarde ligt tussen 125 & 135, case 125
        val = 125;}
      else if (val > 80 && val < 100){   // Als gemeten waarde ligt tussen 80 & 100, case 80
        val = 80;}
      else{
      }     
}
      void LEDrood (){                     // Functiestap rode LED
      digitalWrite(rood, HIGH);
      delay(interval);
      digitalWrite(rood, LOW);
      delay(interval);}

      void LEDgeel (){                     // Functiestap gele LED
      digitalWrite(geel, HIGH);
      delay(interval);
      digitalWrite(geel, LOW);
      delay(interval);}
      
      void LEDoranje (){                   // Functiestap oranje LED
      digitalWrite(oranje, HIGH);
      delay(interval);
      digitalWrite(oranje, LOW);
      delay(interval);}
          
      void LEDgroen (){                    // Functiestap groene LED
      digitalWrite(groen, HIGH);
      delay(interval);
      digitalWrite(groen, LOW);
      delay(interval);}
          
      void LEDwit (){                      // Functiestap witte LED
      digitalWrite(wit, HIGH);
      delay(interval);
      digitalWrite(wit, LOW);
      delay(interval);}
          
      void LEDblauw (){                     // Functiestap blauwe LED
      digitalWrite(blauw, HIGH);
      delay(interval);
      digitalWrite(blauw, LOW);
      delay(interval);

        switch (val)
        {
        case 500:                               // Weerstandwaarde 500, rode LED 3 x aan/uit
        LEDrood(); LEDrood(); LEDrood();
        break;
        case 350:                               // Weerstandwaarde 350, gele LED 3 x aan/uit
        LEDgeel(); LEDgeel(); LEDgeel();
        break;
        case 225:                               // Weerstandwaarde 225, oranje LED 3 x aan/uit
        LEDoranje(); LEDoranje(); LEDoranje();
        break;
        case 165:                               // Weerstandwaarde 165, groene LED 3 x aan/uit
        LEDgroen(); LEDgroen(); LEDgroen();
        break;
        case 125:                               // Weerstandwaarde 125, witte LED 3 x aan/uit
        LEDwit(); LEDwit(); LEDwit();
        break;
        case 80:                                // Weerstandwaarde 80, blauwe LED 3 x aan/uit
        LEDblauw(); LEDblauw(); LEDblauw();
        break;      
        }
}

ik zou de While(val<10) weghalen in de setup, het lijkt me persoonlijk niet zo netjes.
de de laatste else van het "val" blok bevat geen code.
Probeer dit eens:

code:


/* Test met 6 x dipswitch met verschillende weerstanden en 6 x LED en switch statement. Eerst met andere sketch de waardes op A0 uitgelezen
 * en genoteerd. Gemeten waardes: met 10K +/- 511, met 18K +/- 361, met 33K +/- 234, met 47K +/- 175, met 68K +/- 129, en 100K +/- 90.
 * Als de sketch werkt wordt de dipswitch vervangen door een draaischakelaar. Verder worden de LED's vervangen door een 3 voudig 7-segment 
 * display en worden de functies uitgebreid, de LED's zijn dus maar tijdelijk, maar het blijven wel ouputs.
 */

int rood = 12; // Rode LED op pin 12
int geel = 11; // Gele LED op pin 11
int oranje = 10; // Oranje LED op pin 10
int groen = 9; // Groene LED op pin 9
int wit = 8; // Witte LED op pin 8
int blauw = 7; // Blauwe LED op pin 7

int interval = 200; // Tijdsduur tussen LED aan/uit

int val = 0; // variabele waarde, te lezen uit analoog A0

void setup() {

  pinMode(rood, OUTPUT); // Zet pinnen 7 - 12 op output
  pinMode(geel, OUTPUT);
  pinMode(oranje, OUTPUT);
  pinMode(groen, OUTPUT);
  pinMode(wit, OUTPUT);
  pinMode(blauw, OUTPUT);

  val = analogRead(0); // Waarde wordt gelezen op analoge input A0

  while (val < 10) // Zolang de waarde kleiner is als 10 (er 
    geen dipswitch is geschakeld) rode LED aan. {
  digitalWrite(rood, HIGH);
}

}
void loop() {
  val = analogRead(0); // Waarde wordt gelezen op analoge input A0 (herhaling)

  if (val > 500 && val < 520) { // Als gemeten waarde ligt tussen 500 & 520, case 500
    val = 500;
  } else if (val > 350 && val < 365) { // Als gemeten waarde ligt tussen 350 & 365, case 350
    val = 350;
  } else if (val > 225 && val < 235) { // Als gemeten waarde ligt tussen 225 & 235, case 225
    val = 225;
  } else if (val > 165 && val < 180) { // Als gemeten waarde ligt tussen 165 & 180, case 165
    val = 165;
  } else if (val > 125 && val < 135) { // Als gemeten waarde ligt tussen 125 & 135, case 125
    val = 125;
  } else if (val > 80 && val < 100) { // Als gemeten waarde ligt tussen 80 & 100, case 80
    val = 80;
  } else {}

  switch (val) {
  case 500: // Weerstandwaarde 500, rode LED 3 x aan/uit
    LEDrood();
    LEDrood();
    LEDrood();
    break;
  case 350: // Weerstandwaarde 350, gele LED 3 x aan/uit
    LEDgeel();
    LEDgeel();
    LEDgeel();
    break;
  case 225: // Weerstandwaarde 225, oranje LED 3 x aan/uit
    LEDoranje();
    LEDoranje();
    LEDoranje();
    break;
  case 165: // Weerstandwaarde 165, groene LED 3 x aan/uit
    LEDgroen();
    LEDgroen();
    LEDgroen();
    break;
  case 125: // Weerstandwaarde 125, witte LED 3 x aan/uit
    LEDwit();
    LEDwit();
    LEDwit();
    break;
  case 80: // Weerstandwaarde 80, blauwe LED 3 x aan/uit
    LEDblauw();
    LEDblauw();
    LEDblauw();
    break;
  } // dit is het einde van de switch
} // dit is het einde van de loop() 

void LEDrood() { // Functiestap rode LED
  digitalWrite(rood, HIGH);
  delay(interval);
  digitalWrite(rood, LOW);
  delay(interval);
}

void LEDgeel() { // Functiestap gele LED
  digitalWrite(geel, HIGH);
  delay(interval);
  digitalWrite(geel, LOW);
  delay(interval);
}

void LEDoranje() { // Functiestap oranje LED
  digitalWrite(oranje, HIGH);
  delay(interval);
  digitalWrite(oranje, LOW);
  delay(interval);
}

void LEDgroen() { // Functiestap groene LED
  digitalWrite(groen, HIGH);
  delay(interval);
  digitalWrite(groen, LOW);
  delay(interval);
}

void LEDwit() { // Functiestap witte LED
  digitalWrite(wit, HIGH);
  delay(interval);
  digitalWrite(wit, LOW);
  delay(interval);
}

void LEDblauw() { // Functiestap blauwe LED
  digitalWrite(blauw, HIGH);
  delay(interval);
  digitalWrite(blauw, LOW);
  delay(interval);
}
GMT+1

Je swtich is nu onderdeel van de LEDBlauw() functie.

Zet alle LEDxx functies gewoon bovenaan je sketch (in ieder geval voor loop() en let erop dat de switch in loop() staat.

Een functie begint (na de naam en parameter lijst met een curly brace ('{'') en eindigt met een '}'. Dus tel die dingen na.

Edit: Progger was sneller.. Maar ik weet niet of Arduino's gcc overweg kan met forward declared functies. Aan de andere kant, ze hebben geen parameters dus wellicht kom je weg met een warning

[Bericht gewijzigd door blurp op 13 april 2021 15:53:18 (24%)]

Hensz

Golden Member

Je hebt nog geen signalisatie voor als de gelezen waarde niet ergens tussen de gewenste/geteste waardes ligt. Die kans is groot, je test maar 20% van het bereik.

Don't Panic!
EricP

mét CE

Haal nou om te beginnen al die functies eens weg uit je main. Die horen daar gewoon niet. Met een beetje mazzel maakt de compiler er wel wat van hoor. Maar 'trial and error' programmeren is erg tijdroven. Gewoon ff zoals het hoort...

Daarnaast: zoals reeds opgemerkt: er zit geen default in je switch. Elke switch hoort - IMHO - een default te hebben.

Ook zijn al je 'led' functies hetzelfde. Op de port na. Nou, maak daar een parameter van en maak die functie 1x.

Top, geweldig bedankt. Die sketch werkt op één puntje na. Als ik de sketch upload gaat de rode led aan maar dan gebeurd er niets als ik de dipswitch schakel. Als ik de Nano echter reset met de dipswitch voor de rode led al aan, dan gaat die rode led gelijk knipperen en na uitzetten doen de andere dipswitches ook precies wat ze moeten doen. Ik ga nog even hiermee stoeien.
Nogmaals bedankt!!

Hensz

Golden Member

ff je code posten, zoals die er nu uitziet.

Don't Panic!

Ik heb het code voorstel van Progger genomen en daarop was mijn reactie gebaseerd. Tijdens het testen kwamen de andere opmerkingen.
In reactie op de suggestie van EricP: de led functies zijn nu slechts om te leren hoe ik kan schakelen met switch. Uiteindelijk wil ik een multifunctionele dobbelsteen maken waarbij via een draaischakelaar verschillende dobbelstenen gekozen kunnen worden. Daarom dacht ik dat de functies in de loop moesten komen. Maar ik kan nu weer verder met al jullie waardevolle suggesties. Zodra dit deel naar behoren werkt zal ik de sketch posten.

Maar ik weet niet of Arduino's gcc overweg kan met forward declared functies.

gcc kan dat niet inderdaad, want dat is tegen de regels van C++.

Maar de arduino speelt vals. Die trekt de .ino door een extra preprocessor om automatisch een -onzichtbare- header te genereren. Dus in een Arduino .ino bestand kan het wel.

En voor mij lijkt dit precies een geval waarbij de switch juist zonder default zou werken.

Je wilt namelijk geen knipperlichtjes in de tussengebieden van de potmeter.

De switch werkt inderdaad zonder de default. Ik moet nu alleen nog oplossen dat de rode led uitgaat en gaat inderdaad knipperen als ik de betreffende dipswitch activeer.

buckfast_beekeeper

Golden Member

Op 13 april 2021 00:00:28 schreef Hensz:
[...] Krijg je geen waarschuwing dat je een int vergelijkt met een char?

Normaal kan je int met char vergelijken.

c code:


int waarde = 97;
char karakter = 'a';

if (waarde == karakter) then

Dit gaat normaal true zijn omdat de ascii waarde van 'a' 97 is.

Van Lambiek wordt goede geuze gemaakt.
Hensz

Golden Member

Maar ja onze Casio vergelijkt 1 met '1', 2 met '2' etc. Die gaan altijd false, terwijl hij verwacht dat ze soms true zijn.

Vind ik tot op de dag van vandaag de kracht van Pascal, dat je dit soort dingen niet, of alleen expliciet en met veel moeite, kunt doen.

Don't Panic!

Nou, ik heb de "while" opdracht gewoon weggehaald en nu werkt de sketch prima. Geen problemen met de compilatie. Er gebeurd niets totdat ik een dipswitch schakel en zo wilde ik het ook. Dankzij al jullie goede adviezen kan ik weer verder. Nogmaals bedankt.

Hierbij de sketch.

code:


/* Test met 6 x dipswitch met verschillende weerstanden en 6 x LED en switch statement. Met andere sketch de waardes op A0 uitgelezen
en genoteerd: met 10K +/- 511, met 18K +/- 361, met 33K +/- 234, met 47K +/- 175, met 68K +/- 129, en 100K +/- 90.
Nu de sketch werkt wordt de dipswitch vervangen door een draaischakelaar. Verder worden de LED's vervangen door een 3 voudig 7-segment display en worden de functies aangepast, de LED's zijn dus maar tijdelijk.
 */

int rood = 12;        // Rode LED op pin 12
int geel = 11;        // Gele LED op pin 11
int oranje = 10;      // Oranje LED op pin 10
int groen = 9;        // Groene LED op pin 9
int wit = 8;          // Witte LED op pin 8
int blauw = 7;        // Blauwe LED op pin 7

int interval = 200;   // Tijdsduur tussen LED aan/uit

int val = 0;          // variabele waarde, lezen uit analoog A0

void setup() {

  pinMode(rood, OUTPUT);      // Zet pinnen 7 - 12 op output
  pinMode(geel, OUTPUT);
  pinMode(oranje, OUTPUT);
  pinMode(groen, OUTPUT);
  pinMode(wit, OUTPUT);
  pinMode(blauw, OUTPUT);

  val = analogRead(0);        // Waarde gelezen op analoge input A0

}

void loop() {

  val = analogRead(0);                  // Waarde opnieuw gelezen op analoge input A0

  if (val > 500 && val < 520) {         // Als gemeten waarde ligt tussen 
                                        // 500 & 520, case 500
    val = 500;}
    else if (val > 350 && val < 365) {  // Als gemeten waarde ligt tussen 
                                        // 350 & 365, case 350
    val = 350;}
    else if (val > 225 && val < 235) {  // Als gemeten waarde ligt tussen 
                                        // 225 & 235, case 225
    val = 225;}
    else if (val > 165 && val < 180) {  // Als gemeten waarde ligt tussen 
                                        // 165 & 180, case 165
    val = 165;} 
    else if (val > 125 && val < 135) {  // Als gemeten waarde ligt tussen 
                                        // 125 & 135, case 125
    val = 125;}
    else if (val > 80 && val < 100) {   // Als gemeten waarde ligt tussen 
                                        // 80 & 100, case 80
    val = 80;}
    else {}

  switch (val) {
  case 500:           // Waarde 500, rode LED 3 x aan/uit
    LEDrood();
    LEDrood();
    LEDrood();
    break;
  case 350:           // Waarde 350, gele LED 3 x aan/uit
    LEDgeel();
    LEDgeel();
    LEDgeel();
    break;
  case 225:           // Waarde 225, oranje LED 3 x aan/uit
    LEDoranje();
    LEDoranje();
    LEDoranje();
    break;
  case 165:           // Waarde 165, groene LED 3 x aan/uit
    LEDgroen();
    LEDgroen();
    LEDgroen();
    break;
  case 125:           // Waarde 125, witte LED 3 x aan/uit
    LEDwit();
    LEDwit();
    LEDwit();
    break;
  case 80:            // Waarde 80, blauwe LED 3 x aan/uit
    LEDblauw();
    LEDblauw();
    LEDblauw();
    break;
  }                   // dit is het einde van de switch
}                     // dit is het einde van de loop() 

void LEDrood() {              // Functiestap rode LED
  digitalWrite(rood, HIGH);
  delay(interval);
  digitalWrite(rood, LOW);
  delay(interval);
}

void LEDgeel() {              // Functiestap gele LED
  digitalWrite(geel, HIGH);
  delay(interval);
  digitalWrite(geel, LOW);
  delay(interval);
}

void LEDoranje() {            // Functiestap oranje LED
  digitalWrite(oranje, HIGH);
  delay(interval);
  digitalWrite(oranje, LOW);
  delay(interval);
}

void LEDgroen() {             // Functiestap groene LED
  digitalWrite(groen, HIGH);
  delay(interval);
  digitalWrite(groen, LOW);
  delay(interval);
}

void LEDwit() {               // Functiestap witte LED
  digitalWrite(wit, HIGH);
  delay(interval);
  digitalWrite(wit, LOW);
  delay(interval);
}

void LEDblauw() {             // Functiestap blauwe LED
  digitalWrite(blauw, HIGH);
  delay(interval);
  digitalWrite(blauw, LOW);
  delay(interval);
}

Op 13 april 2021 23:10:07 schreef Hensz:
Vind ik tot op de dag van vandaag de kracht van Pascal, dat je dit soort dingen niet, of alleen expliciet en met veel moeite, kunt doen.

Tja, C is ontstaan toen de gedacht was: Hou het simpel: Een compiler maken is lastig zat.

Een "char" is gewoon een tellend datatype met een lagere max. De andere tellende datatypes zijn "short", "int", "long" en tegenwoordig "long long".

En dus kent de compiler eigenlijk alleen T8, T16, T32 en T64 als tellende datatypes. waarbij mijn notatie "Tx" hier even staat voor het tellend datatype met x bits. En vervolgens is '0' een alias voor 48, handig als je met ascii werkt. En "test" is dus een shortcut voor T8[5]={116, 101, 115, 116, 0};

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Toch leuk om te horen dat TS weer verder kan. :)