Skocz do zawartości

Arduino sterownik paska aRGB z pilotem


Merasuke

Pomocna odpowiedź

Witam,

Posiadam arduino uno i chciałem zrobić sterowanie paskiem aRGB na pilota. Program działa na symulatorze tinkercad bez żadnych problemów jednak gdy daje go na rzeczywisty układ to działa tylko przez chwilę a później przestaje i zaczyna generować w nieskończoność jakiś ciąg znaków i musze restartować program.

 

Czy ktoś miał podobny problem i wie jak go rozwiązać?

Z góry dziękuję za pomoc.

image.thumb.png.63d20fc80b6f5fbfadf57001e015889d.png

// Dołączanie bibliotek
#include <Adafruit_NeoPixel.h>
#include <IRremote.h>


// Definiowanie kolorów

#define OFF 0,0,0
#define czerwony 255,0,0
#define zielony 0,255,0
#define niebieski 0,0,255
#define bialy 255,255,255
#define szary 100,100,100
#define pomaranczowy 255,153,0
#define mietowy 0,255,178
#define jasny_niebieski 0,51,102
#define brazowy 175,85,0
#define morski 0,271,183
#define fioletowy 85,0,204
#define bezowy 206,155,2
#define topaz 0,250,255
#define zolty 255,255,0
#define rozowy 247,89,168



#define IR_PIN                11    //  Pin do którego podłączony jest czujnik podczewieni
#define LED_PIN               10    //  Pin do którego podłączony jest pasek LED
#define LED_COUNT             60    //  Liczba ledów w programowanym pasku
#define SZYBKOSC              50    //  Szybkość przejścia kolorów
#define NOW                    0    //  Przejście następuje natychmiast
#define JASNOSC               55    //  Jasność początkowa
#define PRZYROST_JASNOSCI     50    //  Zwiększ zmniejsz jasność o tą wartość 
#define MIN_JASNOSC         5   //  Minimalna jasność
#define MAX_JASNOSC       250    //  maksymalna jasność

int currentBrightness;              //  Zapisuje aktualna jasność
int buttonPushCounterA    =    0;   //  Zlicza ile razy został wciśnięty przycisk
int buttonStateA          =    0;   //  aktualny san przycisku
int lastButtonStateA      =    0;   //  poprzedni stan przycisku



// inicjalizacja Paska LED
Adafruit_NeoPixel led = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// definiowanie pinu IR
const int RECV_PIN = 11;

void setup() {

  Serial.begin(9600);                         
  Serial.println("START");                    //  Napisz wiadomość
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);                        //  Uruchom czujnik IR

  led.setBrightness(JASNOSC);                 //  Ustaw początkową jasnosc

  led.begin();                                //  Inicjalizacja paska led
  led.show();                                 //  Zaktualziuj pasek led
  

}




void loop() {

  if (IrReceiver.decode()) {                                              // Sprawdź czy sygnał IR jest odbierany

    Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX);           // Przycisk wyswietlania wartości RAW

    RGB_Remote();                                                         // funkcja pilota    
}
  }                                              


void colorWipe(uint32_t c, uint8_t wait) {

  for(uint16_t i=0; i<led.numPixels(); i++) {
    led.setPixelColor(i, c);
    led.show();
    delay(wait);
  }
}


void RGB_Remote()  {                          

  int currentButtonStateA = digitalRead(IR_PIN);

    
  switch(IrReceiver.decodedIRData.decodedRawData)  {                           

  case 0xEA15FF00:
    Serial.println("     BRIGHTNESS UP");            //  zwiększ jasność
    currentBrightness += PRZYROST_JASNOSCI;
    if (currentBrightness > MAX_JASNOSC)
    {   currentBrightness = MAX_JASNOSC;  }
    lastButtonStateA = currentButtonStateA;
    led.setBrightness(currentBrightness);          //  Ustaw aktualną jasność
    Serial.print("Aktualna jasność: ");
    Serial.println(currentBrightness);               
    led.show();
    break;

  case 0xF807FF00:
    Serial.println("     BRIGHTNESS DOWN");          //  zmniejsz jasność
    currentBrightness -= PRZYROST_JASNOSCI;
    if (currentBrightness < MIN_JASNOSC)
    {  currentBrightness = MIN_JASNOSC;  }
    lastButtonStateA = currentButtonStateA;
    led.setBrightness(currentBrightness);          //  ustaw aktualną jasność
    Serial.print("Current Brightness: ");
    Serial.println(currentBrightness);               
    break;


  case 0xE916FF00: // zero
    Serial.println("     OFF");
    colorWipe(led.Color(0,0,0), SZYBKOSC);  
    
    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
    break;

  case 0xF30CFF00: // jeden
    Serial.println("     Biały");
    colorWipe(led.Color(bialy), SZYBKOSC);  
    
    digitalWrite(9, HIGH);
        
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        digitalWrite(6, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, LOW);
    break;

  case 0xE718FF00: //dwa
    Serial.println("     Czerwony");
    colorWipe(led.Color(czerwony), SZYBKOSC);          
    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        digitalWrite(5, HIGH);
        digitalWrite(6, HIGH);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
    break;

  case 0xA15EFF00: // trzy
    Serial.println("     Zielony");
    colorWipe(led.Color(zielony), SZYBKOSC);           

    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
    break;

  case 0xF708FF00: //cztery
    Serial.println("     Niebieski");
    colorWipe(led.Color(niebieski), SZYBKOSC);             

    digitalWrite(9, HIGH);
        
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        digitalWrite(6, LOW);
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
    break;

  case 0xE31CFF00: // pięć
    Serial.println("     Fioletowy");
    colorWipe(led.Color(fioletowy), SZYBKOSC);           
    
    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
    break;

  case 0xA55AFF00: // sześć
    Serial.println("     Pomarańczowy");
    colorWipe(led.Color(pomaranczowy), SZYBKOSC);        
    
    digitalWrite(9, HIGH);
    
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
    break;

  case 0xBD42FF00: // siedem
    Serial.println("     Miętowy");
    colorWipe(led.Color(mietowy), SZYBKOSC);           
    
    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        digitalWrite(6, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, LOW);
    break;

  case 0xAD52FF00: // osiem
    Serial.println("     Beżowy");
    colorWipe(led.Color(bezowy), SZYBKOSC);        

    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
    break;

  case 0xB54AFF00: // dziewięć
    Serial.println("     Różowy");
    colorWipe(led.Color(rozowy), SZYBKOSC);       
    
    digitalWrite(9, HIGH);
        
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
        
     Serial.println("     END");   
    break;

 
  }
    delay(50);                                      
    IrReceiver.resume();                                 //  czekaj na nasatępny sygnał

} 

 

Link do komentarza
Share on other sites

@Merasuke witam na forum 🙂 

Jakieś doświadczenie miałem z tą biblioteką i problem może tkwić w wywołaniach funkcji które tworzą opóźnienia lub przerwania. Wyrzuć wszystkie printy, zostaw funkcjonalne minimum i powinno działać. 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

// inicjalizacja Paska LED
Adafruit_NeoPixel led = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

ja bym zapisał 

// inicjalizacja Paska LED
Adafruit_NeoPixel led(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

poza tym przed begin

  led.setBrightness(JASNOSC);                 //  Ustaw początkową jasnosc

  led.begin();                                //  Inicjalizacja paska led

Ustawiasz jasność. No ale to są niuanse, podejrzewam że problem generuje odbiornik podczerwieni być może zbyt często generuje przerwania czego przyczyną może być słabe filtrowanie zasilania.  

 

 

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.