Je viens d'arriver il n'y a pas si longtemps que ça sur le forum, et j'aimerais présenter un peit projet qui n'est pas très avancé mais qui pourra servir de base pour certains qui seront interressés : MiniOS.
MiniOS est un OS pour Minitel. C'est grâce à un arduino que l'on communique avec un Minitel par le biais de la prise péri-informatique située à l'arrière des Minitels.
Le montage n'est pas difficile il suffit de connecter un prise mâle DIN comme sur le schéma ci-dessous :
.
Pour communiquer avec un Minitel il faut utiliser un débit de 1200 bauds, le code dans le prochain post
Le code n'est composé que d'un seul fichier car l'OS est assez basique...
// Commandes de mise en page
byte gauche = 8;
byte droite = 9;
byte bas = 10;
byte haut = 11;
byte debutDeLigne = 13;
byte hautGauche = 30;
byte hautGaucheEfface = 12;
byte separateurDeSousArticle = 31;
byte remplissageEspace = 24; //Remplit le reste da la rangée avec des espaces
void setup() {
UCSR1C = B00100100; // passage en mode 7bits + bit de parité
Serial1.begin(1200);
presentation(); // écran de démarrage
Serial.begin(9600); // pour debug
}
void loop() {
//Serial.print(menu()); //(Pour debug seulement)
switch (menu())
{
case 49 :
fakebook();
break;
case 50 :
credits();
break;
}
}
void presentation() {
int i =0;
Serial1.print(hautGaucheEfface);
while(i<11)
{
Serial1.print(bas, BYTE);
i++;
}
i=0;
while(i<16)
{
Serial1.print(droite, BYTE);
i++;
}
Serial1.print(27, BYTE);
Serial1.print(79, BYTE); //Grossit la police
Serial1.print("MiniOS");
Serial1.print(27, BYTE);
Serial1.print(76, BYTE); //Police normale
Serial1.print(bas);
Serial1.print(bas);
i = 0;
while(i<13)
{
Serial1.print(gauche);
i++;
}
Serial1.print("The Minitel OS");
i=0;
while(i<6)
{
Serial1.print(bas, BYTE);
i++;
}
i=0;
while(i<22)
{
Serial1.print(droite, BYTE);
i++;
}
Serial1.print(27, BYTE);
Serial1.print(72, BYTE); // clignotement
Serial1.print("Appuyez sur une touche...");
Serial1.print(27, BYTE);
Serial1.print(73, BYTE); // fixe
Serial.print(7, BYTE);
while(Serial1.available() <= 0) {
}
Serial1.read(); // Attente d'une touche
}
int menu(){
Serial1.print(hautGaucheEfface);
Serial1.print(27, BYTE);
Serial1.print(77, BYTE); // lettres de double hauteur
Serial1.print(bas);
Serial1.print(" ### Menu ###");
Serial1.print(27, BYTE);
Serial1.print(76, BYTE); //Police normale
Serial1.print(bas);
Serial1.print(bas);
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("1 - Fakebook");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("2 - Credits");
int inByte = 0;
while(Serial1.available() <= 0) {
}
Serial1.print(hautGaucheEfface);
inByte = Serial1.read();
return inByte;
}
void fakebook(){
Serial1.print(hautGaucheEfface, BYTE);
Serial1.print(bas);
Serial1.print(27, BYTE);
Serial1.print(77, BYTE); // lettres de double hauteur
Serial1.print(" 3615 ");
Serial1.print(27, BYTE);
Serial1.print(79, BYTE); // lettres de double grandeur
Serial1.print("FACEBOOK");
Serial1.print(27, BYTE);
Serial1.print(77, BYTE); // lettres de double hauteur
Serial1.print(bas);
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("Amis Mon Statut");
Serial1.print(27, BYTE);
Serial1.print(76, BYTE); // police normale
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("- Mikou Coco ......................");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("- Matthieu Gaill ......................");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("- Nielsou Ptich ......................");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("- Mel Gormany ......................");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(" ......................");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("- voir mes amis valider le statut");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(" ");
Serial1.print(27, BYTE);
Serial1.print(93, BYTE); //Inversion de fond
Serial1.print(" ENVOI ");
Serial1.print(27, BYTE);
Serial1.print(76, BYTE);
Serial1.print(27, BYTE);
Serial1.print(92, BYTE); //Inversion de fond // police normale
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("----------------------------------------");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(27, BYTE);
Serial1.print(77, BYTE); // lettres de double hauteur
Serial1.print(" Actualites :");
Serial1.print(27, BYTE);
Serial1.print(76, BYTE); // police normale
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(" Soranne Guilly :");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(" A vu des screenshots du prochain");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print(" Windows 2.1!");
while(Serial1.available() <= 0) {
}
Serial1.read(); // Attente d'une touche
}
void credits() {
Serial1.print(hautGaucheEfface);
Serial1.print("MiniOS by Ronan Gaillard");
Serial1.print(bas);
Serial1.print(debutDeLigne);
Serial1.print("Powered by Arduino");
while(Serial1.available() <= 0) {
}
Serial1.read(); // Attente d'une touche
}
Voilà, si vous avez des questions n'hésitez pas...
Je prévoit de programmer une classe Minitel afin de simplifier tout ça et de permettre à plusieurs personnes de pouvoir utiliser ce terminal comme écran.
Je met ici quelques screenshots pour ceux qui voudraient voir à quoi ça ressemble :o :
Voilà; ça c'est le montage sur un Arduino Mega comme vous pouvez le voir ;). Les DELS servent justent de témoins.
C'est excellent ! Un "Aller vers le passé"1 qui me plait bien. En plus, on retombe en enfance, ça faisait un sacré moment que je n'avais pas vu de minitel en marche.
Sinon, pour les photos, comme Jean-François : plus petites svp.
Salut,
Merci beaucoup pour le partage du code Avec un ami on a parsé les touches pour le menu (mais il manque les premières lettres de l'alphabet :O), on a ajouté 2/3 pages (dont une qui joue de la musique sur un haut parleur), etc.
Pour tous ceux qui ont un Arduino Duemillanove, remplacez tous les Serial1 par Serial et le bidule des 7 bits + bit de parité.
Enjoy
32 = Espace
33 = !
34 = "
35 = #
36 = $
37 = %
38 = &
39 = '
40 = (
41 = )
42 = *
43 = ;
44 = ,
45 = -
46 = .
47 = /
48 = 0
49 = 1
50 = 2
51 = 3
52 = 4
53 = 5
54 = 6
55 = 7
56 = 8
57 = 9
58 = :
59 = ;
60 = <
61 = =
62 = >
63 = ?
64 = @
65 = ENVOI
66 = RETOUR
67 = RÉPÉTION
68 = GUIDE
69 = ANNULATION
70 = SOMMAIRE
71 = CORRECTION
72 = SUITE
73 = CTRL + CONNEXION / FIN
74 = J
75 = K
76 = L
77 = M
78 = N
79 = O
80 = P
81 = Q
82 = R
83 = S
84 = T
85 = U
86 = V
87 = W
88 = X
89 = Y
90 = Z
91 = [
92 = \93 = ]
94 = "FLECHE HAUT"
97 = CTRL + A
98 = CTRL + B
99 = CTRL + C
100 = CTRL + D
101 = CTRL + E
102 = CTRL + F
103 = CTRL + G
104 = CTRL + H
105 = CTRL + I
106 = CTRL + J
107 = CTRL + K
108 = CTRL + L
109 = CTRL + M
110 = CTRL + N
111 = CTRL + O
112 = CTRL + P
113 = CTRL + Q
114 = CTRL + R
115 = CTRL + S
116 = CTRL + T
117 = CTRL + U
118 = CTRL + V
119 = CTRL + W
120 = CTRL + X
121 = CTRL + Y
122 = CTRL + Z
Salut, j'ai un problème la presentation ne s'affiche et je ne peux mettre plus de 3pages. J'ai un Arduino Duemilanove Atmega168.
EDIT : J'ai viré le Serial.begin(9600); sinon ça bugger et j'ai remplacé les Serial1 par Serial et modifier les 7bits + bit de parité par UCSR0C = B00100100;
Je suis débutant et je n'arrive pas à connecter mon minitel à l'Arduino Duemilanove. En fait je ne sais pas comment faire le branchement. Quelqu'un pourrait-il m'expliquer comment je dois faire ? D'avance merci.
Salut à tous, j'aimerai faire un truc ou quand tu vas sur une page il y a ON et OFF et quand j'appuie sur la touche 1 ça allume une LED et 0 ça l'éteint mais j'ai essayé avec switch mais impossible de le faire marcher. Quelqu'un sait comment ?