besoin d'aide pour remise en route d'une interface lego 70909 grace a arduino

a marqué ce sujet comme résolu.

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.Image utilisateur 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

+0 -0

Bon tu as raté le formattage avec les balises codes, mais je pense à 2 trucs :

  1. Le serial pour le démarrage, pas besoin de le mettre dans loop() vu que c’est qu’une fois, tu peux le mettre dans le setup().
  2. Pour ne pas bloquer, au lieu de delay(), tu peux prendre millis().

Sinon si c’est de la communication Serie ça devrait pas poser de problèmes avec le tutu du caribou.

(PS: Ouai Eskimon en tutu)

Bonjour, J’ai enfin reçu mon module max232. Forcément rien ne marche… j’ai légèrement modifié le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
int etat = 0; //stock l'état de la situation
char mot[20]; //le mot lu sur la voie série

long temps = millis();
void setup() {


  Serial.begin(38400); //On démarre la voie série avec une vitesse de 9600 bits/seconde
  Serial.println("###Do you byte, when I knock?$$$");



}
void loop() {

  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()
    comparerMot(mot);

  }
  if (etat > 0)
  {

    if (millis() - temps > 2000)
    {
      Serial.println("2");
      temps = millis();

    }

  }
}
void lireVoieSerie(void)
{
  int i = 0; //variable locale pour l'incrémentation des données du tableau

  //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';
  Serial.println(mot);
}



int comparerMot(char mot[])
{
  //on compare les mots 
  if (strcmp(mot, "ok") == 0)
  {
    etat = 1;
  }

}

J’ai deux problèmes qui me bloque dés le début.

Premièrement je dois envoyer le "bonjour" p\0###Do you byte, when I knock?$$$

le problème est que dans l’état le message s’arrête après le p à cause du /0 je pense que j’ai du mal comprendre l’information provenant du site :

The computer sends "p\0###Do you byte, when I knock?$$$".

  1. Upon receiving the above message, the Interface B sends "###Just a bit off the block!$$$".

Deuxièmement la fonction comparermot() de mon code fonctionne bien si j’utilise un simple OK, mais pas si j’utilise la reponse ###Just a bit off the block!$$$ à la place

Voilà si quelqu’un pouvait m’éclairer.

j’ai également trouvé une application visulabasic je devrais surmène pouvoir trouver les infos dans le code, mais je ne sais pas comment faire voici le lienhttp://www.lgauge.com/technic/LEGOInterfaceB/LEGOInterfaceBsource.zip

Merci

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte