// Code OK apres test //////////////////////////////////////////////////////////////////////// /* Minitel1B_Hard - Démo - Version du 11 juin 2017 à 16h00 Copyright 2016, 2017 - Eric Sérandour >> Légèrement adapté pour l'ESP32 par iodeo Documentation utilisée : Spécifications Techniques d'Utilisation du Minitel 1B http://543210.free.fr/TV/stum1b.pdf //////////////////////////////////////////////////////////////////////// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // DEBUT DU PROGRAMME //////////////////////////////////////////////////////////////////////// #include Minitel minitel(Serial2); // Le port utilisé sur ESP32 int wait = 10000; //////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200); // Le port de débug minitel.changeSpeed(minitel.searchSpeed()); } //////////////////////////////////////////////////////////////////////// void loop() { demoCaracteres(); demoGraphic(); demoTailles(); demoCouleurs(); demoCurseur(); } //////////////////////////////////////////////////////////////////////// void newPage(String titre) { minitel.newScreen(); minitel.println(titre); for (int i=1; i<=40; i++) { minitel.writeByte(0x7E); } minitel.moveCursorReturn(1); } //////////////////////////////////////////////////////////////////////// void demoCaracteres() { newPage("LES CARACTERES"); // Mode texte minitel.println("MODE TEXTE SANS LIGNAGE :"); for (int i=0x20; i<=0x7F; i++) { minitel.writeByte(i); } minitel.moveCursorReturn(2); minitel.println("MODE TEXTE AVEC LIGNAGE :"); minitel.attributs(DEBUT_LIGNAGE); // En mode texte, le lignage est déclenché par le premier espace rencontré (0x20). for (int i=0x20; i<=0x7F; i++) { minitel.writeByte(i); } minitel.attributs(FIN_LIGNAGE); minitel.moveCursorReturn(2); // Mode semi-graphique minitel.textMode(); minitel.println("MODE SEMI-GRAPHIQUE SANS LIGNAGE :"); minitel.graphicMode(); for (int i=0x20; i<=0x7F; i++) { minitel.writeByte(i); } minitel.moveCursorReturn(2); minitel.textMode(); minitel.println("MODE SEMI-GRAPHIQUE AVEC LIGNAGE :"); minitel.graphicMode(); minitel.attributs(DEBUT_LIGNAGE); for (int i=0x20; i<=0x7F; i++) { minitel.writeByte(i); } minitel.attributs(FIN_LIGNAGE); minitel.moveCursorReturn(2); delay(wait); } //////////////////////////////////////////////////////////////////////// void demoGraphic() { newPage("LA FONCTION GRAPHIC"); minitel.textMode(); minitel.println("Un caractère semi-graphique est composé de 6 pseudo-pixels :"); minitel.println(); minitel.graphicMode(); minitel.attributs(DEBUT_LIGNAGE); minitel.writeByte(0x7F); minitel.attributs(FIN_LIGNAGE); minitel.textMode(); minitel.print(" avec lignage ou "); minitel.graphicMode(); minitel.writeByte(0x7F); minitel.textMode(); minitel.println(" sans lignage."); minitel.println(); String chaine = ""; chaine += "minitel.graphic(0b101011) donne "; minitel.textMode(); minitel.print(chaine); minitel.graphicMode(); minitel.graphic(0b101011); minitel.textMode(); minitel.println(); minitel.println(); chaine = ""; chaine += "minitel.graphic(0b110110,30,15) donne "; minitel.print(chaine); minitel.graphicMode(); minitel.graphic(0b110110,30,15); minitel.noCursor(); delay(2*wait); } //////////////////////////////////////////////////////////////////////// void demoTailles() { newPage("LES TAILLES"); minitel.println("GRANDEUR_NORMALE"); minitel.attributs(DOUBLE_HAUTEUR); minitel.print("DOUBLE_HAUTEUR"); minitel.attributs(DOUBLE_LARGEUR); minitel.println(); minitel.println("DOUBLE_LARGEUR"); minitel.attributs(DOUBLE_GRANDEUR); minitel.println("DOUBLE_GRANDEUR"); minitel.println(); minitel.attributs(GRANDEUR_NORMALE); minitel.attributs(DEBUT_LIGNAGE); // En mode texte, le lignage est déclenché par le premier espace rencontré (0x20). minitel.println("SEULEMENT EN MODE TEXTE"); minitel.attributs(FIN_LIGNAGE); minitel.println(); delay(wait); } //////////////////////////////////////////////////////////////////////// void demoCouleurs() { newPage("LES COULEURS"); for (int i=0; i<=1; i++) { if (i==0) { minitel.textMode(); } if (i==1) { minitel.graphicMode(); } minitel.attributs(INVERSION_FOND); minitel.print("CARACTERE_NOIR, FOND_BLANC"); minitel.attributs(FOND_NORMAL); minitel.println(" (INVERSION)"); minitel.attributs(CARACTERE_ROUGE); minitel.println("CARACTERE_ROUGE"); minitel.attributs(CARACTERE_VERT); minitel.println("CARACTERE_VERT"); minitel.attributs(CARACTERE_JAUNE); minitel.println("CARACTERE_JAUNE"); minitel.attributs(CARACTERE_BLEU); minitel.println("CARACTERE_BLEU"); minitel.attributs(CARACTERE_MAGENTA); minitel.println("CARACTERE_MAGENTA"); minitel.attributs(CARACTERE_CYAN); minitel.println("CARACTERE_CYAN"); minitel.attributs(CARACTERE_BLANC); minitel.println("CARACTERE_BLANC"); minitel.println(); } delay(wait); } //////////////////////////////////////////////////////////////////////// void demoCurseur() { minitel.cursor(); newPage("DEPLACER LE CURSEUR"); minitel.moveCursorXY(20,12); for (int i=1; i<=100; i++) { delay(100); switch (random(4)) { case 0: minitel.moveCursorRight(1+random(3)); break; case 1: minitel.moveCursorLeft(1+random(3)); break; case 2: minitel.moveCursorDown(1+random(3)); break; case 3: minitel.moveCursorUp(1+random(3)); break; } } newPage("POSITIONNER LE CURSEUR"); minitel.textMode(); for (int i=1; i<1000; i++) { minitel.moveCursorXY(1+random(40),3+random(22)); minitel.writeByte(0x20 + random(0x60)); } minitel.newScreen(); minitel.textMode(); minitel.noCursor(); for (int i=1; i<1000; i++) { if (random(4)<3) { minitel.textMode(); } else { minitel.graphicMode(); minitel.attributs(DEBUT_LIGNAGE); } minitel.attributs(0x4C+random(5)); minitel.writeByte(0x20 + random(0x60)); minitel.attributs(FIN_LIGNAGE); } } ////////////////////////////////////////////////////////////////////////