MrAlvin

Arduino testing the Random() function

Oct 14th, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.11 KB | None | 0 0
  1. /*
  2.  * Denne sketch er testet på en Arduino UNO
  3.  *  
  4.  * Sketchen benyttes til at teste at loop() kører, ved at blinke den indbyggede LED
  5.  *
  6.  * Derudover så vises noget debug info på SerialMonitor, én gang i sekundet
  7.  *
  8.  */
  9.  
  10. // Konstanter, informationer der aldrig ændrer sig
  11. // Fortæller hvilke udgange der bruges:
  12. const int led1Pin =  4;      // nummret på udgangen lysdiode 1 er koblet til
  13. const int led2Pin =  3;      // nummret på udgangen lysdiode 2 er koblet til
  14.  
  15. // Variabler for udgang 1 som ændrer sig under gennemløb af program:
  16. int led1State = HIGH;                  // Status på udgangen, er den tændt (HIGH) eller slukket (LOW)
  17. unsigned long previousMillis_1 = 0;    // Tidspunkt for, hvornår udgangen sidst skiftede status
  18. int interval_1_min = 25;               // Korteste tidsinterval for lysdiode tændt eller slukket
  19. int interval_1_max = 55;               // Længeste tidsinterval for lysdiode tændt eller slukket
  20. unsigned long interval_1 = 1;  
  21.  
  22. // Variabler for udgang 2 som ændrer sig under gennemløb af program:
  23. int led2State = HIGH;                  // Status på udgangen, er den tændt (HIGH) eller slukket (LOW)
  24. unsigned long previousMillis_2 = 0;    // Tidspunkt for, hvornår udgangen sidst skiftede status
  25. int interval_2_min = 15;               // Korteste tidsinterval for lysdiode tændt eller slukket
  26. int interval_2_max = 30;               // Længeste tidsinterval for lysdiode tændt eller slukket
  27. unsigned long interval_2 = 1;
  28.  
  29. // Variabler for debug info via SerialMonitor
  30. unsigned long currentMillis = 0;
  31. unsigned long previousDebugMillis = 0;      // Tidspunkt for, hvornår sidste SerialMonitor debug update blev skrevet
  32. unsigned long intervalDebug = 1000;         // Opdater SerialMonitor hvert sekund
  33. int ledDebugState = HIGH;
  34.  
  35. //**********************//
  36. void setup() {
  37.   // put your setup code here, to run once:
  38.   pinMode(led1Pin, OUTPUT);
  39.  
  40.   // Når der testes på Arduino UNO så benyttes den indbyggede LED (på pin 13) og SerialPort
  41.   setupDebug();
  42.    
  43. } // END setup()
  44.  
  45.  
  46.  
  47. //**********************//
  48. void loop() {
  49.   // Gem millis() i en variabel
  50.   currentMillis = millis();
  51.  
  52.   // Når der testes på Arduino UNO så benyttes den indbyggede LED (på pin 13), samt Seriel porten, til at give noget debug info
  53.   debugInfo();
  54.  
  55.   // Ser efter om det er tid til at skifte status på udgang 1
  56.   // Gøres ved at se om forskellem mellem aktuel tid og tidspunktet
  57.   // for sidste skift er større end det satte interval
  58.   if(currentMillis - previousMillis_1 > interval_1) {
  59.    
  60.     // gemmer sidste gang udgangen skiftede
  61.     previousMillis_1 = currentMillis;  
  62.    
  63.     // hvis udgangen er slukket tænde den og omvendt:
  64.     if (led1State == LOW)
  65.       led1State = HIGH;
  66.     else
  67.       led1State = LOW;
  68.    
  69.     // sætter udgangen med værdien af led1State (HIGH/LOW):
  70.     digitalWrite(led1Pin, led1State);
  71.    
  72.     // sætter interval_1 til en ny tilfældig værdi mellem min og max
  73.     interval_1 = random(interval_1_min, interval_1_max);
  74.    
  75.     // konverter interval til milli sekunder
  76.     interval_1 = interval_1 * 10;    // vælg at gange med 1, 10, 100 eller 1000 afhængigt af hvor lang tid der ønskes mellem hvert blink
  77.   }
  78.  
  79.   ////// 2
  80.   // Ser efter om det er tid til at skifte status på udgang 2
  81.   // Gøres ved at se om forskellem mellem aktuel tid og tidspunktet
  82.   // for sidste skift er større end det satte interval
  83.   if(currentMillis - previousMillis_2 > interval_2) {
  84.    
  85.     // gemmer sidste gang udgangen skiftede
  86.     previousMillis_2 = currentMillis;  
  87.    
  88.     // hvis udgangen er slukket tænde den og omvendt:
  89.     if (led2State == LOW)
  90.       led2State = HIGH;
  91.     else
  92.       led2State = LOW;
  93.    
  94.     // sætter udgangen med værdien af led1State (HIGH/LOW):
  95.     digitalWrite(led2Pin, led2State);
  96.    
  97.     // sætter interval_2 til en ny tilfældig værdi mellem min og max
  98.     interval_2 = random(interval_2_min, interval_2_max);
  99.    
  100.     // konverter interval til milli sekunder
  101.     interval_2 = interval_2 * 10;  // vælg at gange med 1, 10, 100 eller 1000 afhængigt af hvor lang tid der ønskes mellem hvert blink
  102.   }
  103.  
  104. } // END loop()
  105.  
  106.  
  107. //****** Debug specific functions ****************//
  108. void setupDebug() {
  109.   pinMode(LED_BUILTIN, OUTPUT);
  110.  
  111.   // initialize serial communication at 115200 bits per second:
  112.   Serial.begin(115200);
  113. } // END setupDebug()
  114.  
  115. void debugInfo() {
  116.    // Se efter om det er tid til at opdater SerialMonitor
  117.   if(currentMillis - previousDebugMillis > intervalDebug) {
  118.     //Gem tiden da Serial Monitor blev opdateret
  119.     previousDebugMillis = currentMillis;  
  120.  
  121.     //// Vis at der er liv i programmet
  122.     // skift LED debug state
  123.     ledDebugState = !ledDebugState;
  124.    
  125.     // sætter udgangen med værdien af led1State (HIGH/LOW):
  126.     digitalWrite(LED_BUILTIN, ledDebugState);
  127.  
  128.     //// Vis noget debug info via SerialMonitor
  129.     Serial.print( F("Int_1: ") );     // Funktionen F() holder "tekst" i Flash Memory only
  130.     Serial.println(interval_1);
  131.  
  132.     Serial.print( F("Int_2: ") );
  133.     Serial.println(interval_2);
  134.  
  135.     Serial.println();
  136.   }
  137. } // END debugInfo()
Add Comment
Please, Sign In to add comment