200 lines
3.9 KiB
C++
200 lines
3.9 KiB
C++
#include <FastLED.h>
|
|
|
|
|
|
//fastled
|
|
#define NUM_LEDS 132 //7 * 9 * 2 + 2*3(points)
|
|
#define DATA_PIN 3
|
|
CRGB leds[NUM_LEDS]; // Define the array of leds
|
|
|
|
|
|
void setup()
|
|
{
|
|
//Serial
|
|
Serial.begin(9600);
|
|
|
|
//FASTLED
|
|
FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
|
|
|
|
//char test[10] = "000000019";
|
|
//sevensegment(test, 1, false);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sevensegment(char displayText[9], short displayColor, bool displayPoints) //2 strings
|
|
{
|
|
|
|
Serial.println("Entrée dans sevensegment");
|
|
|
|
//transformer la matrice de caracteres en une matrice de numéros
|
|
//avec
|
|
//char 0 = 0
|
|
//char 1 = 1
|
|
//etc
|
|
//char - = 10
|
|
int displayNumCode[9];
|
|
|
|
for(int i=0; i<9; i++)
|
|
{
|
|
switch (displayText[i])
|
|
{
|
|
case '0':
|
|
displayNumCode[i] = 0;
|
|
break;
|
|
case '1':
|
|
displayNumCode[i] = 1;
|
|
break;
|
|
case '2':
|
|
displayNumCode[i] = 2;
|
|
break;
|
|
case '3':
|
|
displayNumCode[i] = 3;
|
|
break;
|
|
case '4':
|
|
displayNumCode[i] = 4;
|
|
break;
|
|
case '5':
|
|
displayNumCode[i] = 5;
|
|
break;
|
|
case '6':
|
|
displayNumCode[i] = 6;
|
|
break;
|
|
case '7':
|
|
displayNumCode[i] = 7;
|
|
break;
|
|
case '8':
|
|
displayNumCode[i] = 8;
|
|
break;
|
|
case '9':
|
|
displayNumCode[i] = 9;
|
|
break;
|
|
case '-':
|
|
displayNumCode[i] = 10; // -
|
|
break;
|
|
case ' ':
|
|
displayNumCode[i] = 11; // " "
|
|
break;
|
|
}
|
|
}
|
|
|
|
//afficher l'array displayNumCode
|
|
for(int i=0; i<9; i++)
|
|
{
|
|
Serial.print(displayNumCode[i]);
|
|
Serial.print(",");
|
|
}
|
|
Serial.println("");
|
|
|
|
|
|
|
|
//quels segments allumer pour chaque caractere
|
|
// 2
|
|
// ___
|
|
// 3| |1
|
|
// |_4_|
|
|
// 7| |5
|
|
// |___|
|
|
// 6
|
|
|
|
// à revoir
|
|
short matrixsevenseg[12][7] = //12 charactères, 012345679-" ", 7 seg
|
|
// 1 2 3 4 5 6 7
|
|
{ {1,1,1,0,1,1,1}, //char 0
|
|
{0,0,1,0,0,0,1}, //char 1
|
|
{1,1,0,1,0,1,1}, //char 2
|
|
{0,1,1,1,0,1,1}, //char 3
|
|
{0,0,1,1,1,0,1}, //char 4
|
|
{0,1,1,1,1,1,0}, //char 5
|
|
{1,1,1,1,1,1,0}, //char 6
|
|
{0,0,1,0,0,1,1}, //char 7
|
|
{1,1,1,1,1,1,1}, //char 8
|
|
{0,1,1,1,1,1,1}, //char 9
|
|
{0,0,0,1,0,0,0}, //char -
|
|
{0,0,0,0,0,0,0} //char " " (space)
|
|
};
|
|
|
|
Serial.println("Déclaré la matrice des segments 'matrixsevenseg' ");
|
|
//afficher les caracteres individuels
|
|
|
|
for(int i=0; i<9; i++) //chaque caractère
|
|
{
|
|
Serial.print("on entre dans le caractère n°");
|
|
Serial.println(i);
|
|
for(int j = 0; j<7; j++) //chaque segment
|
|
{
|
|
Serial.print("on entre dans le segments n°");
|
|
Serial.println(j);
|
|
if(matrixsevenseg[displayNumCode[i]][j] == 1)
|
|
{
|
|
for(short k; k<2; k++) // les 2 leds du segemnt
|
|
{
|
|
if(displayColor == 0) //rouge
|
|
{
|
|
leds[(i+1)*7 +(j+1)*2 + k] = CRGB::Red;
|
|
}
|
|
else if(displayColor == 1) //rose
|
|
{
|
|
leds[(i+1)*7 +(j+1)*2 + k] = CRGB::Pink;
|
|
}
|
|
else if(displayColor == 2) //jaune
|
|
{
|
|
leds[(i+1)*7 +(j+1)*2 + k] = CRGB::Yellow;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for(int i=0; i<140; i++
|
|
{
|
|
Serial.println(leds[i]);
|
|
}
|
|
|
|
|
|
|
|
|
|
//points
|
|
|
|
if(displayPoints == false)
|
|
{
|
|
//éteindre les points
|
|
for(int m=125; m<=131; m++)
|
|
{
|
|
leds[m] = CRGB::Black;
|
|
}
|
|
}
|
|
else if(displayPoints)
|
|
{
|
|
//allumer les points
|
|
for(int m=379; m<=396; m++)
|
|
{
|
|
leds[m] = CRGB::Red; //adapter les points à la couleur de displaycolor
|
|
}
|
|
}
|
|
|
|
FastLED.show();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
|
|
|
|
|
|
leds[19] = CRGB::Green;
|
|
|
|
|
|
FastLED.show();
|
|
|
|
char message[9] = "000000019";
|
|
sevensegment(message, 0, true);
|
|
delay(10000);
|
|
|
|
}
|
|
|