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.
Dependencies: SDFileSystemDMA mbed
Fork of DmdFullRGB_0_1 by
Diff: SD.h
- Revision:
- 1:353c1902483f
- Parent:
- 0:d5f38b9d7c7a
- Child:
- 2:2f5b7e5faf83
--- a/SD.h Sat Dec 02 12:27:01 2017 +0000
+++ b/SD.h Sun Dec 03 17:24:56 2017 +0000
@@ -3,7 +3,7 @@
* decembre 2017 par Christophe Girardot Aka Aganyte
*/
-#define SPI_CLOCK_HZ ( 25 * 1000000 ) // Vitesse de communication SPI 25 MHz
+#define SPI_CLOCK_HZ ( 40 * 1000000 ) // Vitesse de communication SPI 40 MHz
SDFileSystem sd(MOSI, MISO, SCLK, CS, "sd", SPI_CLOCK_HZ); // Ouverture de la liaison SPI
@@ -27,33 +27,14 @@
}
}
-/* Fonction de lecture d'un fichier de donnée (les données lues son placées dans le buffer de lecture)
+/* Fonction de lecture d'un fichier de donnée (les données lues son placées dans le buffer donné en argument)
+* Le nombre de kilo-octet à lire est donné en argument
* Renvois le nombre de caractères lu, 0 si rien à lire
*/
-unsigned int read4KB()
+unsigned int readKB(unsigned char *Destination, unsigned char KB)
{
- unsigned int readed = 0;
-
- if (file != NULL)
- readed = file->read(Display_Ram, 4096);
- else
- pc.printf("Impossible de lire le fichier\n");
-
- return(readed);
-}
-
-/* Fonction de lecture d'un fichier de donnée de scrolling (les données lues son placées dans le buffer du scrolling)
-* Renvois le nombre de caractères lu, 0 si rien à lire
-*/
-unsigned int read40KB()
-{
- unsigned int readed = 0;
-
- if (file != NULL)
- readed = file->read(Scrolling_Buffer, 40960);
- else
- pc.printf("Impossible de lire le fichier\n");
-
+ unsigned int readed = 0;
+ readed = file->read(Destination, KB*1024);
return(readed);
}
@@ -77,6 +58,23 @@
}
}
+/* Fonction qui cherche et lit un nombre après un symbole donné
+* ne change pas la valeur si trouve rien
+*/
+char Search_Read_Char(char ThisChar, char Result) // Result => valeur d'origine
+{
+ char Buffer[1];
+ Search_Char(ThisChar); // lire jusqu'au prochain caractère donné
+ Index->read(Buffer, 1); // Lire le nombre
+ if( (Buffer[0]-'0' >= 0) & (Buffer[0]-'0' <= 9) ) //Accépter seulement les nombres de 0 à 9
+ return (Buffer[0]-'0'); // renvoyer le nouveau nombre
+ else
+ {
+ pc.printf("Erreur sur ce parametre : %d\n",Buffer[0]-'0');
+ return(Result); // ou renvoyer l'ancien
+ }
+}
+
/* Fonction qui lit le fichier timestamp.txt
*/
void Read_Timestamp()
@@ -85,7 +83,6 @@
FileHandle* Timestamp;
while(1)
{
- delete Timestamp;
Timestamp = sd.open("time.TXT", O_RDONLY); // ouverture du fichier timestamp.TXT
if(Timestamp != NULL)
{
@@ -135,26 +132,14 @@
for(unsigned char count = 0; count < Replay; count++) // Jouer l'animation en fonction du nombre de répétition
{
Try_Open_File(); // Essayer d'ouvrir le fichier
- int readed = 0;
- unsigned int image = 0;
while(1)
{
- // Charger une trame dans la mémoire vidéo
- readed = read4KB();
- // détection de la fin de l'animation
- if(readed == 0)
+ // lecture d'une trame avec détection de la fin de l'animation
+ if(readKB(Display_Ram,4) == 0)
break;
- // détection d'un problème de lecture
- if(readed == -1)
- {
- pc.printf("Erreur de lecture du fichier %s apres %d image(s)\n",FileName,image);
- break;
- }
// Affichage de la trame avec gestion de la vitesse
for(unsigned char count = 0; count < (10-Speed); count++)
refresh();
- // Incrémenter le compteur d'image
- image++;
}
}
pc.printf("fin de l'animation %s\n\n",FileName);
@@ -171,13 +156,9 @@
Search_Char('='); // lire jusqu'au prochain =
Index->read(FileName, 12); // lire le nom de fichier
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Replay = Character[0]-'0'; // Stocker le nombre de lecture à effectuer
-
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire la vitesse de lecture
- Speed = Character[0]-'0'; // stocker la vitesse de lecture
+ Replay = Search_Read_Char('=',Replay);
+
+ Speed = Search_Read_Char('=',Speed);
// affichage dans la console
pc.printf("Lecture de %s\n",FileName);
@@ -198,16 +179,14 @@
Search_Char('='); // lire jusqu'au prochain =
Index->read(FileName, 12); // lire le nom de fichier
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps de lecture
+ Sleep = Search_Read_Char('=',Sleep);
// affichage dans la console
pc.printf("Affichage de l'image %s pendant %d secondes\n\n",FileName,Sleep);
Try_Open_File(); // Essayer d'ouvrir le fichier
- read4KB(); // Charger une trame dans la mémoire vidéo RGB
+ readKB(Display_Ram,4); // Charger une trame dans la mémoire vidéo RGB
Image(Sleep); // Afficher l'image
}
@@ -219,10 +198,8 @@
* >Write Temp=5 L1=XXXXXXXXXXXXXXXX L2=XXXXXXXXXXXXXXXX L3=XXXXXXXXXXXXXXXX L4=XXXXXXXXXXXXXXXX
*/
void Read_Text()
-{
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps d'affichage
+{
+ Sleep = Search_Read_Char('=',Sleep);
pc.printf("Affichage d'un texte pendant %d secondes\n",Sleep); // affichage dans la console
@@ -249,10 +226,8 @@
Search_Char('='); // lire jusqu'au prochain =
Index->read(FileName, 12); // lire le nom de fichier
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps d'affichage
-
+ Sleep = Search_Read_Char('=',Sleep);
+
pc.printf("Affichage d'un score pendant %d secondes\n",Sleep); // affichage dans la console
// Placer les 4 lignes dans le buffer vidéo monochrome
@@ -266,13 +241,11 @@
pc.printf("\n");
Try_Open_File(); // Essayer d'ouvrir le fichier
- read4KB(); // Charger une trame dans la mémoire vidéo RGB
+ readKB(Display_Ram,4); // Charger une trame dans la mémoire vidéo RGB
- Convert_Mono_To_RGB(); // Convertir le buffer mono avec superposition dans le buffer couleur
+ Convert_Bool_To_RGB(); // Convertir le buffer mono avec superposition dans le buffer couleur
Image(Sleep); // Afficher l'image
-
- //Refresh_in_seconds();
}
/* Fonction de lecture d'une commande de réglage des couleurs
@@ -283,26 +256,11 @@
*/
void Set_Color()
{
- unsigned char CR;
- unsigned char CG;
- unsigned char CB;
-
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- CR = Character[0]-'0'; // stocker la valeur de la couleur rouge
+ Color_R = Search_Read_Char('=',Color_R);
+ Color_B = Search_Read_Char('=',Color_G);
+ Color_G = Search_Read_Char('=',Color_B);
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- CG = Character[0]-'0'; // stocker la valeur de la couleur vert
-
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- CB = Character[0]-'0'; // stocker la valeur de la couleur bleu
-
- pc.printf("Reglages des couleurs du mode monochrome avec R=%d,G=%d,B=%d\n\n",CR,CG,CB); // affichage dans la console
- Color_R = CR;
- Color_B = CB;
- Color_G = CG;
+ pc.printf("Reglages des couleurs du mode monochrome avec R=%d,G=%d,B=%d\n\n",Color_R,Color_G,Color_B); // affichage dans la console
}
/* Fonction de lecture d'une commande horloge
@@ -313,9 +271,7 @@
*/
void Read_Clock()
{
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps d'affichage
+ Sleep = Search_Read_Char('=',Sleep);
pc.printf("Affichage de l'heure pendant %d secondes\n\n",Sleep); // affichage dans la console
@@ -330,16 +286,13 @@
*/
void Read_Temperature()
{
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps d'affichage
+ Sleep = Search_Read_Char('=',Sleep);
pc.printf("Affichage de la temperature pendant %d secondes\n\n",Sleep); // affichage dans la console
Temperature();
}
-
/* Fonction de lecture d'une commande lecture de la pile de backup
*
* Exemple d'utilisation:
@@ -348,9 +301,7 @@
*/
void Read_Backup()
{
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le nombre de répétition
- Sleep = Character[0]-'0'; // Stocker le temps d'affichage
+ Sleep = Search_Read_Char('=',Sleep);
pc.printf("Affichage de la tension de la batterie pendant %d secondes\n\n",Sleep); // affichage dans la console
@@ -372,17 +323,13 @@
Index->read(Line_Buffer, 3); // lire 16 caractères
unsigned int height = atoi(Line_Buffer); // Convertion de la valeur de Ascii vers un entier
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire la vitesse de lecture
- Speed = Character[0]-'0'; // stocker la vitesse de lecture
+ Speed = Search_Read_Char('=',Speed);
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le sens de lecture
- Up = Character[0]-'0'; // stocker le sens de lecture
+ Up = Search_Read_Char('=',Up);
Try_Open_File(); // Ouvrir le fichier
- read40KB(); // Charger le scrolling dans la mémoire
+ readKB(Scrolling_Buffer,40); // Charger le scrolling dans la mémoire
pc.printf("Affichage du scrolling vertical %s de 128x%d pixels depuis la carte SD a la vitesse de %d avec Up=%d\n\n",FileName,height,Speed,Up);
@@ -399,7 +346,6 @@
}
else
{
-
for(unsigned char decal = (height-32); decal!=0; decal--) {
// Remplir la mémoire vidéo avec une image
for(unsigned int count = 0; count<4096; count++)
@@ -427,17 +373,13 @@
Index->read(Line_Buffer, 4); // lire 16 caractères
unsigned int width = atoi(Line_Buffer); // Convertion de la valeur de Ascii vers un entier
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire la vitesse de lecture
- Speed = Character[0]-'0'; // stocker la vitesse de lecture
+ Speed = Search_Read_Char('=',Speed);
- Search_Char('='); // lire jusqu'au prochain =
- Index->read(Character, 1); // Lire le sens de lecture
- Left = Character[0]-'0'; // stocker le sens de lecture
-
+ Left = Search_Read_Char('=',Left);
+
Try_Open_File(); // Ouvrir le fichier
- read40KB(); // Charger le scrolling dans la mémoire
+ readKB(Scrolling_Buffer,40); // Charger le scrolling dans la mémoire
pc.printf("Affichage du scrolling horizontal %s de %dx32 pixels depuis la carte SD a la vitesse de %d avec Left=%d\n\n",FileName,width,Speed,Left);
@@ -470,32 +412,52 @@
Flush_ascii_buffer(Line_Buffer);
}
+/* Fonction de réglage du brightness (de 0 à 9)
+* Exemple: Brightness=5
+*/
+void Set_Brightness()
+{
+ Brightness_level = Search_Read_Char('=',Brightness_level); // Lire le brightness souhaité
+
+ pc.printf("Reglages du niveau de brightness sur %d\n\n",Brightness_level); // affichage dans la console
+
+ Time_Shade0 = Start_Time_Shade0 / Correction_Brightness[Brightness_level] ;
+ Time_Shade1 = Start_Time_Shade1 / Correction_Brightness[Brightness_level] ;
+ Time_Shade2 = Start_Time_Shade2 / Correction_Brightness[Brightness_level] ;
+ Time_Shade3 = Start_Time_Shade3 / Correction_Brightness[Brightness_level] ;
+ Time_Shade4 = Start_Time_Shade4 / Correction_Brightness[Brightness_level] ;
+ Time_Shade5 = Start_Time_Shade5 / Correction_Brightness[Brightness_level] ;
+ Time_Shade6 = Start_Time_Shade6 / Correction_Brightness[Brightness_level] ;
+}
+
/* Lire et effectuer la prochaine commade du fichier index.txt */
void Read_Next_Command()
{
Search_Char('>'); // Chercher le prochain début de commande
Index->read(Command, 5); // lire la commande
- if( strcmp("Anima", Command) == 0) // A => Animation
+ if( strcmp("Anima", Command) == 0) // Animation
Read_Animation();
- else if(strcmp("Write", Command) == 0) // W => Write
+ else if(strcmp("Write", Command) == 0) // Write
Read_Text();
else if(strcmp("Clock", Command) == 0)
- Read_Clock(); // C => Clock
+ Read_Clock(); // Clock
else if(strcmp("Tempe", Command) == 0)
- Read_Temperature(); // T => Temperature
+ Read_Temperature(); // Temperature
else if(strcmp("Backu", Command) == 0)
- Read_Backup(); // B => pile de Backup
+ Read_Backup(); // pile de Backup
else if(strcmp("Setco", Command) == 0)
- Set_Color(); // S => changement des couleurs du mode monochrome
+ Set_Color(); // changement des couleurs du mode monochrome
else if(strcmp("Verti", Command) == 0)
- Vertical_Scrolling_SD(); // V => Scrolling vertical depuis la SD
+ Vertical_Scrolling_SD(); // Scrolling vertical depuis la SD
else if(strcmp("Horiz", Command) == 0)
- Horizontal_Scrolling_SD(); // H => Scrolling Horizontal depuis la SD
+ Horizontal_Scrolling_SD(); // Scrolling Horizontal depuis la SD
else if(strcmp("Image", Command) == 0)
- Image_SD(); // I => Image depuis la SD
+ Image_SD(); // Image depuis la SD
else if(strcmp("Score", Command) == 0)
- Score_SD(); // I => Superposer une Image avec du texte depuis la SD (scores)
+ Score_SD(); // Superposer une Image avec du texte depuis la SD (scores)
+ else if(strcmp("Brigh", Command) == 0)
+ Set_Brightness(); // Régler le niveau de brightness
else
pc.printf("Aucune Commande dans le fichier index.ini\n");
}
