start:arduino:minitel:programme
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| start:arduino:minitel:programme [2022/07/05 23:25] – [Programme 2] gerardadmin | start:arduino:minitel:programme [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 15: | Ligne 15: | ||
| *prise Arduino GND sur 2 minitel (Masse) | *prise Arduino GND sur 2 minitel (Masse) | ||
| + | ==== Minitel Demo==== | ||
| + | |||
| + | == Minitel-Esp32 Test Laison serie entre minitel et terminal arduino ou esp32=== | ||
| + | <code c ESP32_Minitel-Demo000.ino> | ||
| + | // OK apres test | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | Serial2.begin(1200, | ||
| + | } | ||
| + | |||
| + | |||
| + | void loop() { | ||
| + | // redirection debug -> minitel | ||
| + | while (Serial.available() > 0) { | ||
| + | Serial2.write(Serial.read()); | ||
| + | } | ||
| + | // redirection minitel -> debug | ||
| + | while (Serial2.available() > 0) { | ||
| + | Serial.write(Serial2.read()); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == Minitel-ESP32 Test differant affichage== | ||
| + | <code c ESP32_Minitel-Demo001.ino> | ||
| + | // Code OK apres test | ||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | /* | ||
| + | | ||
| + | | ||
| + | |||
| + | >> | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | 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 | ||
| + | | ||
| + | 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); | ||
| + | |||
| + | int wait = 10000; | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | 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(" | ||
| + | | ||
| + | // Mode texte | ||
| + | | ||
| + | minitel.println(" | ||
| + | for (int i=0x20; i<=0x7F; i++) { | ||
| + | minitel.writeByte(i); | ||
| + | } | ||
| + | minitel.moveCursorReturn(2); | ||
| + | | ||
| + | minitel.println(" | ||
| + | minitel.attributs(DEBUT_LIGNAGE); | ||
| + | for (int i=0x20; i<=0x7F; i++) { | ||
| + | minitel.writeByte(i); | ||
| + | } | ||
| + | minitel.attributs(FIN_LIGNAGE); | ||
| + | minitel.moveCursorReturn(2); | ||
| + | |||
| + | // Mode semi-graphique | ||
| + | | ||
| + | minitel.textMode(); | ||
| + | minitel.println(" | ||
| + | minitel.graphicMode(); | ||
| + | for (int i=0x20; i<=0x7F; i++) { | ||
| + | minitel.writeByte(i); | ||
| + | } | ||
| + | minitel.moveCursorReturn(2); | ||
| + | | ||
| + | minitel.textMode(); | ||
| + | minitel.println(" | ||
| + | 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(" | ||
| + | minitel.textMode(); | ||
| + | minitel.println(" | ||
| + | minitel.println(); | ||
| + | minitel.graphicMode(); | ||
| + | minitel.attributs(DEBUT_LIGNAGE); | ||
| + | minitel.writeByte(0x7F); | ||
| + | minitel.attributs(FIN_LIGNAGE); | ||
| + | minitel.textMode(); | ||
| + | minitel.print(" | ||
| + | minitel.graphicMode(); | ||
| + | minitel.writeByte(0x7F); | ||
| + | minitel.textMode(); | ||
| + | minitel.println(" | ||
| + | minitel.println(); | ||
| + | String chaine = ""; | ||
| + | chaine += " | ||
| + | minitel.textMode(); | ||
| + | minitel.print(chaine); | ||
| + | minitel.graphicMode(); | ||
| + | minitel.graphic(0b101011); | ||
| + | minitel.textMode(); | ||
| + | minitel.println(); | ||
| + | minitel.println(); | ||
| + | chaine = ""; | ||
| + | chaine += " | ||
| + | minitel.print(chaine); | ||
| + | minitel.graphicMode(); | ||
| + | minitel.graphic(0b110110, | ||
| + | minitel.noCursor(); | ||
| + | delay(2*wait); | ||
| + | } | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | void demoTailles() { | ||
| + | newPage(" | ||
| + | minitel.println(" | ||
| + | minitel.attributs(DOUBLE_HAUTEUR); | ||
| + | minitel.print(" | ||
| + | minitel.attributs(DOUBLE_LARGEUR); | ||
| + | minitel.println(); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(DOUBLE_GRANDEUR); | ||
| + | minitel.println(" | ||
| + | minitel.println(); | ||
| + | minitel.attributs(GRANDEUR_NORMALE); | ||
| + | minitel.attributs(DEBUT_LIGNAGE); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(FIN_LIGNAGE); | ||
| + | minitel.println(); | ||
| + | delay(wait); | ||
| + | } | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | void demoCouleurs() { | ||
| + | newPage(" | ||
| + | for (int i=0; i<=1; i++) { | ||
| + | if (i==0) { minitel.textMode(); | ||
| + | if (i==1) { minitel.graphicMode(); | ||
| + | minitel.attributs(INVERSION_FOND); | ||
| + | minitel.print(" | ||
| + | minitel.attributs(FOND_NORMAL); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_ROUGE); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_VERT); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_JAUNE); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_BLEU); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_MAGENTA); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_CYAN); | ||
| + | minitel.println(" | ||
| + | minitel.attributs(CARACTERE_BLANC); | ||
| + | minitel.println(" | ||
| + | minitel.println(); | ||
| + | } | ||
| + | delay(wait); | ||
| + | } | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | void demoCurseur() { | ||
| + | minitel.cursor(); | ||
| + | newPage(" | ||
| + | minitel.moveCursorXY(20, | ||
| + | for (int i=1; i<=100; i++) { | ||
| + | delay(100); | ||
| + | switch (random(4)) { | ||
| + | case 0: minitel.moveCursorRight(1+random(3)); | ||
| + | case 1: minitel.moveCursorLeft(1+random(3)); | ||
| + | case 2: minitel.moveCursorDown(1+random(3)); | ||
| + | case 3: minitel.moveCursorUp(1+random(3)); | ||
| + | } | ||
| + | } | ||
| + | newPage(" | ||
| + | minitel.textMode(); | ||
| + | for (int i=1; i<1000; i++) { | ||
| + | minitel.moveCursorXY(1+random(40), | ||
| + | minitel.writeByte(0x20 + random(0x60)); | ||
| + | } | ||
| + | | ||
| + | minitel.newScreen(); | ||
| + | minitel.textMode(); | ||
| + | minitel.noCursor(); | ||
| + | for (int i=1; i<1000; i++) { | ||
| + | if (random(4)< | ||
| + | else { | ||
| + | minitel.graphicMode(); | ||
| + | minitel.attributs(DEBUT_LIGNAGE); | ||
| + | } | ||
| + | minitel.attributs(0x4C+random(5)); | ||
| + | minitel.writeByte(0x20 + random(0x60)); | ||
| + | minitel.attributs(FIN_LIGNAGE); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | //////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== ESP32-Minitel Pong ==== | ||
| + | |||
| + | <code c Esp32-Minitel_Pong.ino> | ||
| + | |||
| + | //Programme OK | ||
| + | |||
| + | #include < | ||
| + | |||
| + | #define MINITEL_PORT Serial2 //for ESP32 | ||
| + | //#define MINITEL_PORT Serial1 //for Leonardo | ||
| + | |||
| + | #define DEBUG true | ||
| + | #define DEBUG_PORT Serial | ||
| + | |||
| + | #if DEBUG // Debug enabled | ||
| + | #define debugBegin(x) | ||
| + | #define debugPrint(x) | ||
| + | #define debugPrintHEX(x) | ||
| + | #define debugPrintBIN(x) | ||
| + | #else // Debug disabled : Empty macro functions | ||
| + | #define debugBegin(x) | ||
| + | #define debugPrint(x) | ||
| + | #define debugPrintHEX(x) | ||
| + | #define debugPrintBIN(x) | ||
| + | #endif | ||
| + | |||
| + | // SOUND FX | ||
| + | #define SOUND 1 // score using bip | ||
| + | //#define SOUND2 1 // hit using modem connection | ||
| + | |||
| + | // SCREEN SIZE | ||
| + | #define WIDTH 40 | ||
| + | #define HEIGHT 24 | ||
| + | |||
| + | // GAME FIELD | ||
| + | #define X1 2 //player1 column | ||
| + | #define X2 40 //player2 column | ||
| + | #define XNET 21 //net column | ||
| + | #define SPACE 2 //score digit space | ||
| + | #define YSCORE 2 //score top row | ||
| + | #define WSCORE 2 //score width | ||
| + | #define HSCORE 4 //score height | ||
| + | #define XSCORE1 14 //player 1 score column - align right | ||
| + | #define XSCORE1_U XSCORE1-WSCORE+1 //unit digit | ||
| + | #define XSCORE1_T XSCORE1_U-WSCORE-SPACE //tenth digit | ||
| + | #define XSCORE2 26 //player 2 score column - align left | ||
| + | #define XSCORE2_T XSCORE2 // unit digit | ||
| + | #define XSCORE2_U XSCORE2+WSCORE+SPACE // tenth digit | ||
| + | |||
| + | // GAME PARAMETER | ||
| + | #define NBALL 15 //NB OF BALLS IN THE MATCH | ||
| + | |||
| + | // BALL DIRECTION | ||
| + | #define HAUT_DROITE 1 | ||
| + | #define BAS_DROITE 2 | ||
| + | #define BAS_GAUCHE 3 | ||
| + | #define HAUT_GAUCHE 4 | ||
| + | |||
| + | Minitel minitel(MINITEL_PORT); | ||
| + | |||
| + | int yP1 = 13; //player1 position | ||
| + | int yP2 = 13; //player2 position | ||
| + | int xBall = 0; | ||
| + | int yBall = 0; | ||
| + | int xBallOld = 0; | ||
| + | int yBallOld = 0; | ||
| + | int d = HAUT_DROITE; | ||
| + | int p1 = 0; //player1 score | ||
| + | int p2 = 0; //player2 score | ||
| + | int startingCounter = 0; | ||
| + | int level = 2; //the smaller the quicker | ||
| + | int bypassCounter = 0; | ||
| + | int hitCounter = 0; //nb hit | ||
| + | bool ping = true; | ||
| + | |||
| + | const byte digit[10][WSCORE*HSCORE] = { // digit de 0 à 9 sur 2 cellules par 4 | ||
| + | // les cellules sont décrites horizontalement de gauche a droite et de haut en bas | ||
| + | {0b111110, | ||
| + | {0b000000, | ||
| + | {0b111100, | ||
| + | {0b111100, | ||
| + | {0b101010, | ||
| + | {0b111110, | ||
| + | {0b101010, | ||
| + | {0b111100, | ||
| + | {0b111110, | ||
| + | {0b111110, | ||
| + | }; | ||
| + | |||
| + | |||
| + | // image of welcome page | ||
| + | // made from jpg using processing IDE | ||
| + | // +jpgtovdt2.pde (PAMAL) to get vdt from jpg | ||
| + | // +conversion_videotex_hex (Eserandour) to get hex from vdt | ||
| + | typedef unsigned char PROGMEM prog_uchar; | ||
| + | |||
| + | const int LONGUEUR_TRAME_IMAGE = 1650; | ||
| + | const prog_uchar IMAGE[] PROGMEM = {0x0C, | ||
