Nous sommes deux étudiants en 1e année de fac et nous avons un projet de robotique à réaliser. Il s'agit de programmer un robot Lynxmotion en Java pour qu'il joue au morpion. Cependant nous somme en totale autonomie et personne ne nous a dit comment "donner" du code au microcontrôleur et nous n'avons pas trouvé comment faire. Quelqu'un peut-il nous aider ?
As-tu fais des recherches dans la documentation de ton microcontrôleur pour commencer ? Je déplace ce sujet dans une autre section du forum correspondant plus à ta demande.
Je ne suis plus modérateur, ne me contactez plus pour des demandes, je n'y répondrai pas.
Quel type de microcontroleur ? Si il s'agit d'un PIC, il existe des programmateurs dit ISCP (in circuit serial programming). Les PIC sont prévus pour, avec des broches dédies et tout un protocole ..
Pensez aux +1 qui font toujours plaisir ! Visitez mon site, il est encore en développement, une première version:WLElectronic.free.fr
Le microcontrôleur est un ATMEGA168. Nous avons trouvé une documentation technique sur le site d'Atmel mais nous ne l'avons pas encore lue (c'est en fait assez technique donc nous ne sommes pas sûr de comprendre).
D'accord, donc la programmation du microcontrôleur ce fais via un bus série, il s'agit d'une programmation ISP (In-System Programming) Ce genre de programmation nécessite la mise en place d'un connecteur relier a ton programmateur aux broches MOSI, MISO SCLK, RESET au GND et au VCC.
Pour ce qui est de la programmation du microcontrôleur et des broches en question, je te conseil de googler la programmation ISP sur les ATMega.
Pour le fonctionnement, la il faut lire la doc ..
Pensez aux +1 qui font toujours plaisir ! Visitez mon site, il est encore en développement, une première version:WLElectronic.free.fr
Nous avons trouvé que pour utiliser notre robot, il fallait lui envoyer des chaines de caractères par le biais d'un port série.
Nous avons donc importé la librairie RXTX dans eclipse, puis nous avons écrit un programme. Seulement, celui-ci nous donne une erreur que nous ne comprenons pas.
Exception in thread "main" java.io.FileNotFoundException: COM3 (Accès refusé)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.PrintStream.<init>(Unknown Source)
at AL5C.Déplacement.main(Déplacement.java:107)
Tu programmes sur Windows ?
Il va falloir executer le programme en mode "administrateur" apparemment car là il te dit que ton port COM 3 est bloqué. Soit parce qu'il est utilisé par un autre programme (terminal série déjà ouvert) soit parce que tu n'as pas les droits d'administration nécessaire
J'ai avancé dans mon programme et je pense avoir réussi à me connecter à un port série. En revanche je n'arrive pas à transmettre des information au robot afin qu'il bouge. Il faut que je lui donne une donnée de type string (#3 P1000 par exemple). J'ai pour cela crée un Outputstream mais lorsque j'écris dedans rien ne se passe. pouvez vous m'aider ? Merci.
package Robot_AL5C;
import java.io.*;
import gnu.io.*;
public class GestionnairePortSérie {
private SerialPort serialPort;
private OutputStream outStream;
private InputStream inStream;
/** Connection au port série */
public void connect(String portName) throws IOException {
try {
// Obtenir un objet CommPortIdentifier pour le port à ouvrir
CommPortIdentifier portId = CommPortIdentifier
.getPortIdentifier(portName);
// Ouverture du port
serialPort = (SerialPort) portId.open("Application", 5000);
// Paramètres de connection.
setSerialPortParameters();
// Ouverture des input et output (streams) pour la connection.
outStream = serialPort.getOutputStream();
inStream = serialPort.getInputStream();
System.out.println("Connecté à " + portName);
} catch (NoSuchPortException e) {
throw new IOException(e.getMessage());
} catch (PortInUseException e) {
throw new IOException(e.getMessage());
} catch (IOException e) {
serialPort.close(); // Fermuture du port si échec de connection
throw e;
}
}
/** Paramètres du port série */
private void setSerialPortParameters() throws IOException {
int baudRate = 9600; // 9600bps
try {
// Initialisation du port série
serialPort.setSerialPortParams(baudRate, // 9600bps
SerialPort.DATABITS_8, // 8 bits de données
SerialPort.STOPBITS_1, // 1 bits d'arrêt
SerialPort.PARITY_NONE); // Pas de bit de parité
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
} catch (UnsupportedCommOperationException ex) {
throw new IOException("Paramêtre du port non supporté.");
}
}
/** Déconnection du port série */
public void disconnect() {
if (serialPort != null) {
try {
// Fermeture des i/o streams.
outStream.close();
inStream.close();
} catch (IOException ex) {
}
// Fermeture du port.
serialPort.close();
System.out.println("Déconnecté");
}
}
/** Mouvement du robot */
public void bouger() throws IOException {
String cmd = "#5 P1000 S2000";
try {
OutputStream outStream = serialPort.getOutputStream();
outStream.write(cmd.getBytes());
System.out.println("Mouvement effectué");
} catch (IOException ex) {
System.out.println("Mouvement non effectué");
}
}
/** Pause du programme */
public static void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/** Main */
public static void main(String[] args) {
GestionnairePortSérie main = new GestionnairePortSérie();
try {
main.connect("COM5");
pause(2000); // Laisser le temps au robot d'effetuer son mouvement.
main.bouger();
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
main.disconnect();
}
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Je ne suis plus modérateur, ne me contactez plus pour des demandes, je n'y répondrai pas.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !