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.


Log in to reply
 

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.