Version avec sortie ABCD sur même connecteur
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"); }