Program Spadająca kropla Problem

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
kazzik87
Starszy majsterkowicz
Posty: 440
Rejestracja: 14 lip 2014, 21:54
Lokalizacja: Lublin

Re: Program Spadająca kropla Problem

Post autor: kazzik87 » 9 sie 2015, 20:40

Czekamy na jakiś artykuł albo filmik.
---
Jeżeli pomogłem to kliknij "Pomógł".

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


decimus
Młodszy majsterkowicz
Posty: 39
Rejestracja: 27 gru 2014, 09:18

Re: Program Spadająca kropla Problem

Post autor: decimus » 9 sie 2015, 20:54

Ten kod skróciłem i diody spadają z dużą szybkością bez ping pong.
Od razu myślałem nad tym ,ale od dołu jako szybkie strzelanie kulkami innego koloru w górę i sumowanie ich tym razem do dołu.
Zmieniłem trochę ten kod i strzelał do góry,ale nie zlicza kulek w dół tylko strzela.Czy mógłbyś mi w tym jeszcze pomóc?

Strzela w dół i zlicza do góry: ja chcę w górę ze zliczaniem do dołu,czyli odwrotna sytuacja.

Kod: Zaznacz cały

     #include <Adafruit_NeoPixel.h>
     
    #define PIN 6
    #define LICZBADIOD 60
     
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN, NEO_GRB + NEO_KHZ800);

    int nrDiody = -1;   // zmienna globalna
     
    void setup()
    {
       pixels.begin(); // Inicjalizacja biblioteki
       pixels.setBrightness(50);//Moc ledów
    }
     
    void loop() 
    {
       rozjasnij();
       kap();

      
       
       nrDiody++;
       if(nrDiody == 58)
          nrDiody = -1;
    }
     
    // Funkcja ma za zadanie rozjaśnić pierwszą kroplę :-)
    void rozjasnij()
    {
       for(int i=59; i<25; i++)
       {
          pixels.setPixelColor(59, pixels.Color(0, 0, i));
          pixels.show();
          delay(2);
       }
    }

    // Funkcja ma za zadanie kapanie kroplmi
    void kap()
    {
       for(int i = 59; i >= nrDiody; i--)
       { 
          pixels.clear();
          pixels.setPixelColor(i, pixels.Color (0, 0, 255 ));
          pokaz_ile_spadlo(nrDiody); // Fukcja załaduje tyle kropli ile już spadlo
          pixels.show();
          delay(5);
       }
    }

    // Funkcja ma za zadanie wyświetlić tyle kropli ile spadło
    void pokaz_ile_spadlo(int _ilosc)
    {
       for(int i = 0; i <= _ilosc; i++)
       {
          pixels.setPixelColor(i, pixels.Color (0, 0, 255 ));
       }
    }

   
kazzik87
Starszy majsterkowicz
Posty: 440
Rejestracja: 14 lip 2014, 21:54
Lokalizacja: Lublin

Re: Program Spadająca kropla Problem

Post autor: kazzik87 » 9 sie 2015, 21:13

Spróbuj tak:

Kod: Zaznacz cały

// Funkcja ma za zadanie wyświetlić tyle kropli ile spadło
void pokaz_ile_spadlo(int _ilosc)
    {
       for(int i = _ilosc; i >= 0; i--)
       {
          pixels.setPixelColor(i, pixels.Color (0, 0, 255 ));
       }
    }
---
Jeżeli pomogłem to kliknij "Pomógł".
decimus
Młodszy majsterkowicz
Posty: 39
Rejestracja: 27 gru 2014, 09:18

Re: Program Spadająca kropla Problem

Post autor: decimus » 10 sie 2015, 14:25

Jest jednak problem z tym programem.Wydawałoby się,że wystarczy zmienić znaki oraz cyfry i powinno odwrotnie to chodzić.
Tak napisałem i dziwna sprawa bo zapala od dołu taśmę diod do góry jak to poprzednie bez kasowania ,a przecież jest w programie pixels.clear();. Funkcja zliczania też dałem tą co ostatnio podałeś,ale nie ma to znaczenia dla programu.

Kod: Zaznacz cały

     #include <Adafruit_NeoPixel.h>
     
    #define PIN 6
    #define LICZBADIOD 60
     
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN, NEO_GRB + NEO_KHZ800);

    int nrDiody =60;   // zmienna globalna
     
    void setup()
    {
       pixels.begin(); // Inicjalizacja biblioteki
       pixels.setBrightness(50);//Moc ledów
    }
     
    void loop() 
    {
       rozjasnij();
       kap();

     
       
       nrDiody++;
       if(nrDiody == 1)
          nrDiody = 60;
    }
     
    // Funkcja ma za zadanie rozjaśnić pierwszą kroplę :-)
    void rozjasnij()
    {
       for(int i=0; i<255; i++)
       {
          pixels.setPixelColor(0, pixels.Color(0, 0, i));
          pixels.show();
          delay(2);
       }
    }

    // Funkcja ma za zadanie kapanie kroplmi
    void kap()
    {
      
       for(int i = 0; i <60; i++)
       
       { 
          pixels.clear();
          pixels.setPixelColor(i, pixels.Color (0, 0, 255 ));
          pokaz_ile_spadlo(nrDiody); // Fukcja załaduje tyle kropli ile już spadlo
          pixels.show();
          delay(5);
       }
    }

 // Funkcja ma za zadanie wyświetlić tyle kropli ile spadło
void pokaz_ile_spadlo(int _ilosc)
    {
       for(int i = _ilosc; i >= 0; i--)
       {
          pixels.setPixelColor(i, pixels.Color (0, 0, 255 ));
       }
    }
Dopiero jak zabiorę tą linię poniżej program strzela diodami z dołu do ostatniej i tak w koło.Nie zlicza w dół.

Kod: Zaznacz cały

 pokaz_ile_spadlo(nrDiody); // Fukcja załaduje tyle kropli ile już spadlo


Próbowałem różnych opcji ,ale poddaje się.Oczywiście liniowo wg. mojego to wiem jak to zrobić,ale tu jakoś nie idzie odwrócić tej sytuacji, bo to zliczanie działa jak pętla ,która zapala natychmiast wszystkie do góry i dioda 1 tylko pulsuje.
Dziwne bo w tym co już mamy [kapanie w dół] to zachowuje się normalnie .
Jak byś miał jeszcze trochę czasu dla mnie chociaż i tak Cię już naciągnąłem w czasie.
decimus
Młodszy majsterkowicz
Posty: 39
Rejestracja: 27 gru 2014, 09:18

Re: Program Spadająca kropla Problem

Post autor: decimus » 11 sie 2015, 23:38

Kod do strzelania diodami w górę chodzi.

Kod: Zaznacz cały

     #include <Adafruit_NeoPixel.h>
     
    #define PIN 6
    #define LICZBADIOD 60
     
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN, NEO_GRB + NEO_KHZ800);
    int nrDiody = 60;
    
    void setup()
    {
      pixels.begin(); // Inicjalizacja biblioteki
       pixels.setBrightness(50);//Moc ledów
 
      
      
     
    }
     
    void loop()  
    {
 rozjasnij();
 kap();
  
      
      
      
   nrDiody--; 
if(nrDiody == 1)
          nrDiody = 60;
        
    }
   void rozjasnij()
    {        
      
  for(int i=0; i<20; i++) {           
    pixels.setPixelColor(0, pixels.Color(i, 0, 0));
    pixels.show(); 
    delay(5);
  } 
    } 
  void kap()
{  
    
        
      for(int i=0; i<60; i++)      
  {
        pixels.clear();
        pixels.setPixelColor(i, pixels.Color (255, 0, 0 ));
        pokaz_ile_spadlo(nrDiody);
        pixels.show(); 
        delay(1);
  
      }
    }

    // Funkcja ma za zadanie wyświetlić tyle kropli ile spadło
    void pokaz_ile_spadlo(int _ilosc)
    {
       for(int i = 60; i > _ilosc; i--)
       {
          pixels.setPixelColor(i, pixels.Color (255, 0, 0 ));
  
      }
    }
ODPOWIEDZ

Strony partnerskie: