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/04/29 11:28] – gerardadmin | start:arduino:minitel:programme [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
[[https:// | [[https:// | ||
- | {{ : | + | {{ : |
- | *prise Arduino D2 sur 3 minitel | + | *prise Arduino D2(RX) sur 3 minitel |
- | *prise Arduino D3 sur 1 minitel | + | *prise Arduino D3(TX) sur 1 minitel |
- | *prise Arduino GND sur 2 minitel | + | *prise Arduino GND sur 2 minitel |
+ | ==== 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, |