Bonjour, Je suis actuellement professeur de technologie dans un collège ; ce collège dispose de très peu de matériel et le budget est assez limité. J’ai donc fouillé les vieilles armoires et trouvé des boites de lego des années 90. L’interface dispose de 8 entrées et 8 sorties programmables. Génial juste ce que je veux! sauf que… 2 gros problèmes: la communication avec l’ordinateur ce fait avec un port série grâce à un câble male/femelle nul modem que je n’ai pas trouvé. Le logiciel et sous MS-DOS et ne marche pas sous xp/seven
Après avoir bien réfléchi, je me suis dit que je pourrais surement bricoler un truc avec arduino via RX/TX J’ai découvert arduino il y’a 2 semaines donc malheureusement, mais connaissance sont limité (j’ai lu presque tous les tutus d’eskimon). Donc voilà je viens vous demander de m’aider.
Voilà ou j’en suis: j’ai commandé un module max232 pour arduino pas encore reçu. j’ai trouvé se site qui détail la communication: http://www.lgauge.com/technic/LEGOInterfaceB/9751.htm un autre sur un scratch like compatible nommé sniff! (je n’ai pas réussi à le faire fonctionné) http://www.sniff.org.uk/2016/03/lego-dacta-control-lab-b.html
Première étape le câble: je me retrouve avec deux ports série femelle, puis je utiliser un câble VGA?
deuxieme etape le code de demarage: en gros je doit envoyer p\0###Do you byte, when I knock?$$$ l’interface doit répondre ###Just a bit off the block!$$$ voici mon idée de base inspirée du tuto d’eskimon sur les drapeaux
1 | void loop() |
{ Serial.print("p\0###Do you byte, when I knock?$$$"); / vérifier la présence de caractère sur la voie série //s’il y a des données disponibles sur la voie série (Serial.available() renvoi un nombre supérieur à 0) if(Serial.available()) { //alors on va lire le contenu de la réception lireVoieSerie(); //on entre dans une variable la valeur retournée par la fonction comparerMot() etat = comparerMot(mot); }
void lireVoieSerie(void) { int i = 0; //variable locale pour l’incrémentation des données du tableau
1 2 3 4 5 6 7 8 9 10 11 12 13 | //on lit les caractères tant qu'il y en a //OU si jamais le nombre de caractères lus atteint 19 (limite du tableau stockant le mot - 1 caractère) while(Serial.available() > 0 && i <= 19) { //on enregistre le caractère lu mot[i] = Serial.read(); //laisse un peu de temps entre chaque accès a la mémoire delay(10); //on passe à l'indice suivant i++; } //on supprime le caractère '\n' et on le remplace par celui de fin de chaine '\0' mot[i] = '\0'; |
}
1 | int comparerMot(char mot[]) |
{
//on compare les mots "VERT" (surveillant, calme)
if(strcmp(mot, "###Just a bit off the block!$$$") == 0)
{
// la je doit faire Serial.print("2") toutes les deux secondes mais je ne sais pas comment faire sans bloquer le reste;
}
if(strcmp(mot, ...................
la je doit recuperer les entrées et le mettre dans des variables pour m’en servir dans le programme
}
}
Voilà pour le moment. Si quelqu’un veut bien me dire si ça va marcher ou pas et ça peut m’aider. Par la suite je vais créer les block dans mblock pour que les élevés puissent l’utiliser.
Merci