Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
HL1606Stripe.cpp
00001 #include "HL1606Stripe.h" 00002 #include <iostream> 00003 00004 /*Constructeur*/ 00005 HL1606Stripe::HL1606Stripe(PinName mosi, PinName miso, PinName sclk, PinName latch, uint8_t numLEDs, uint8_t numColors) : m_numLEDs(numLEDs), m_numColors(numColors), m_SPI(mosi, miso, sclk), m_latchPin(latch) 00006 { 00007 m_SPI.format(8,3); // 8 bits per frame, SPI mode 3 00008 m_SPI.frequency(450000); // 450kHz freq 00009 00010 /*Allocation en fonction du nombre de LEDs sur le bandeau*/ 00011 m_redPWM = new uint8_t[m_numLEDs]; 00012 m_greenPWM = new uint8_t[m_numLEDs]; 00013 m_bluePWM = new uint8_t[m_numLEDs]; 00014 00015 /*Eteindre le bandeau de LEDs*/ 00016 SwitchOffRGB(); 00017 00018 /*Mettre à jour les LEDs du bandeau toutes les 45ms*/ 00019 m_tickerUpdate.attach(this, &HL1606Stripe::Update, 0.0045); 00020 } 00021 00022 /*Destructeur*/ 00023 HL1606Stripe::~HL1606Stripe() 00024 { 00025 m_tickerUpdate.detach(); 00026 00027 delete [] m_redPWM; 00028 delete [] m_greenPWM; 00029 delete [] m_bluePWM; 00030 } 00031 00032 /*Mettre à jour le bandeau de LEDs*/ 00033 void HL1606Stripe::Update(void) 00034 { 00035 uint8_t i, data; 00036 static int m_pwmCounter; 00037 00038 /*Ecrire les données sur le bus SPI*/ 00039 for (i = 0; i < m_numLEDs; i++) { 00040 00041 data = 0x80; 00042 00043 /*Calculer la couleur de la LED suivante*/ 00044 if (m_pwmCounter < m_redPWM[i]){ 00045 data |= 0x04; 00046 } 00047 00048 if (m_pwmCounter < m_bluePWM[i]){ 00049 data |= 0x10; 00050 } 00051 00052 if (m_pwmCounter < m_greenPWM[i]){ 00053 data |= 0x01; 00054 } 00055 00056 m_SPI.write(data); 00057 } 00058 00059 /*Incrémenter le compteur de PWM (soft)*/ 00060 m_pwmCounter += 1; 00061 00062 if (m_pwmCounter > 3){ 00063 m_pwmCounter = 0; 00064 } 00065 00066 /*Latch*/ 00067 m_latchPin = 1; 00068 wait_us(1); 00069 m_latchPin = 0; 00070 } 00071 00072 /*Eteindre le bandeau de LEDs*/ 00073 void HL1606Stripe::SwitchOffRGB() 00074 { 00075 FillRGB(OFF,OFF,OFF); 00076 } 00077 00078 /*Set d'une LED sur le bandeau*/ 00079 void HL1606Stripe::setLED(uint8_t Color, uint8_t LEDx) 00080 { 00081 if(LEDx>m_numLEDs) 00082 { 00083 std::cerr << "Erreur lors du set d'une LED du bandeau : index error" << std::endl; 00084 return; 00085 } 00086 if(Color>NUM_COLORS) 00087 { 00088 std::cerr << "Erreur lors du set d'une LED du bandeau : Num color error" << std::endl; 00089 return; 00090 } 00091 switch(Color) 00092 { 00093 case BLUE: 00094 m_redPWM[LEDx] = OFF; 00095 m_greenPWM[LEDx] = OFF; 00096 m_bluePWM[LEDx] = LOW; 00097 break; 00098 00099 case RED: 00100 m_redPWM[LEDx] = LOW; 00101 m_greenPWM[LEDx] = OFF; 00102 m_bluePWM[LEDx] = OFF; 00103 break; 00104 00105 case GREEN: 00106 m_redPWM[LEDx] = OFF; 00107 m_greenPWM[LEDx] = LOW; 00108 m_bluePWM[LEDx] = OFF; 00109 break; 00110 00111 case YELLOW: 00112 m_redPWM[LEDx] = LOW; 00113 m_greenPWM[LEDx] = LOW; 00114 m_bluePWM[LEDx] = OFF; 00115 break; 00116 00117 case CYAN: 00118 m_redPWM[LEDx] = OFF; 00119 m_greenPWM[LEDx] = MEDIUM; 00120 m_bluePWM[LEDx] = LOW; 00121 break; 00122 00123 /*OFF*/ 00124 default: 00125 m_redPWM[LEDx] = OFF; 00126 m_greenPWM[LEDx] = OFF; 00127 m_bluePWM[LEDx] = OFF; 00128 } 00129 } 00130 00131 /*Remplir aléatoirement le bandeau de LEDs*/ 00132 void HL1606Stripe::FillRandomlyRGB(uint8_t* randomColors) 00133 { 00134 for(int LEDx = 0; LEDx < m_numLEDs; LEDx++) 00135 { 00136 randomColors[LEDx] = rand()%(m_numColors); 00137 setLED(randomColors[LEDx],LEDx); 00138 } 00139 } 00140 00141 /*Remplir le bandeau de LEDs avec une couleur définie dans Colour_t*/ 00142 void HL1606Stripe::FillRGB(uint8_t color) 00143 { 00144 if(color>NUM_COLORS) 00145 { 00146 std::cerr << "Erreur lors du set d'une LED du bandeau : Num color error" << std::endl; 00147 return; 00148 } 00149 for (int LEDx = 0; LEDx < m_numLEDs; LEDx++) 00150 { 00151 setLED(color,LEDx); 00152 } 00153 } 00154 00155 /*Remplir le bandeau de LEDs avec des composantes RGB définie par l'utilisateur*/ 00156 void HL1606Stripe::FillRGB(uint8_t red, uint8_t green, uint8_t blue) 00157 { 00158 for (int i = 0; i < m_numLEDs; i++) { 00159 m_redPWM[i] = red; 00160 m_greenPWM[i] = green; 00161 m_bluePWM[i] = blue; 00162 } 00163 } 00164 00165 /*Remplir le bandeau de LEDs avec des couleurs définies par l'utilisateur*/ 00166 void HL1606Stripe::FillRGB(uint8_t* colors) 00167 { 00168 for(int LEDx = 0; LEDx < m_numLEDs; LEDx++) { 00169 setLED(colors[LEDx],LEDx); 00170 } 00171 }
Generated on Sat Jul 16 2022 02:24:41 by
1.7.2