TimerOne.h LED Effekt



  • Hello,
    I am an Arduino beginner and have tried to do it by myself. Unfortunately it does not work.
    I would like my Demo LED effect to turn on after 3 minutes, but it does not turn on. Therefore I am looking for some help. Could anybody please help me and say where the error is in my sketch.

    #include <Adafruit_NeoPixel.h>
    #include <TimerOne.h>
    
    #define PINR 6         
    
    int led_ring = 60;   //  Leds (Ring)
    
    Adafruit_NeoPixel ring = Adafruit_NeoPixel(led_ring, PINR, NEO_GRB + NEO_KHZ800);
    boolean Demo = false;
    int command = 0 ;     
    uint32_t c;
    int all_x_minut=3;   // 
    
    void setup() 
    {
      ring.begin();
      ring.show();    
      ring.setBrightness(75);
      Serial.begin(9600);
      
      Timer1.initialize(all_x_minut*60000);
      Timer1.attachInterrupt(Demostart);
    }  
    
    // ************** Programm ********************
    
    void loop() 
    {
      if (Serial.available() > 0) 
      {   
        Timer1.initialize(all_x_minut*60000);
        Demo == true;
        command = Serial.read();
         {
        } 
      }   
      
      if (Demo == true)
      {
        Demomodus();
      }  
    }
    
    // *************** Funktionen ********************
    
    void rainbowCycle(uint8_t wait)        
    {
      uint16_t i, j;
      for(j=0; j<256*1; j++) { // 5 cycles of all colors on wheel
        for(i=0; i< ring.numPixels(); i++) 
        {
          ring.setPixelColor(i, Wheel(((i * 256 / ring.numPixels()) + j) & 255));
        }
        ring.show();
        delay(wait);
      }
    }
    
    uint32_t Wheel(byte WheelPos) 
    {
      WheelPos = 255 - WheelPos;
      if(WheelPos < 85) 
      {
        return ring.Color(255 - WheelPos * 3, 0, WheelPos * 3);
      }
      if(WheelPos < 170) 
      {
        WheelPos -= 85;
        return ring.Color(0, WheelPos * 3, 255 - WheelPos * 3);
      }
      WheelPos -= 170;
      return ring.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    }
    
    void Demomodus() 
    {
     rainbowCycle(55);
    }  
    
    void Demostart() 
    {
      Demo == true;
    }
    

    Thank you in advance and kind regards!


  • Mod

    Welcome to the MySensors community @xsav
    The easiest way would probably be to remove everything related to TimerOne and replace with this:

    void loop(){
        wait(3*60*1000);
        Demomodus();
    }
    

    If you want to use TimerOne you need to enter the number of microseconds to sleep, not milliseconds.


 

423
Online

7.5k
Users

8.4k
Topics

90.3k
Posts