Oui je t'invite à aller voir du coté du pdf du tuto sur la partie voie série. Tu pourras déjà faire un premier truc avec un fil USB qui pendouille. Une fois que ca marche on pourra sans trop de difficulté se passer du fil pour introduire une transmission sans fil...
Tutoriel pas mal, mais a partir de la page 236, il y a une erreur de compilation est aprés le mec nous explique que il y a un emulateur mais aucune idée pour le trouver
Oui je t'invite à aller voir du coté du pdf du tuto sur la partie voie série. Tu pourras déjà faire un premier truc avec un fil USB qui pendouille. Une fois que ca marche on pourra sans trop de difficulté se passer du fil pour introduire une transmission sans fil...
J'arrive déjà à afficher des info grâce à mon câble USB ça ce n'est pas le probléme
Tutoriel pas mal, mais a partir de la page 236, il y a une erreur de compilation est aprés le mec nous explique que il y a un emulateur mais aucune idée pour le trouver
Comme c'est pas moi qui est écrit cette partie (je ne suis pas qualifié pour le faire) je ne peux pas t'aider de ce point de vue, en revanche je pourrais te conseiller de voir du côté du logiciel "Processing". Je suis plutôt partisan pour ce logiciel car il utilise le même langage qu'Arduino, la même interface, etc. (en fait c'est Arduino qui s'inspire de Processing, mais bon, on s'en fiche).
Pourquoi ? Eh bien car il permet de réaliser assez rapidement des interfaces toutes simple (dans ton cas, par exemple) tout en étant hyper puissant ! On peut manipuler la liaison série sans problème, interagir avec l'ordinateur aussi, etc. On peut même créer le programme de sorte à ce qu'il soit compatible sur Android. Comme ça tu peux même téléguider le robot avec ton téléphone.
Tu compte relier comment ton robot à ton ordinateur ? Quel moyen (fil, sans-fil) ?
Bonjour;
rien ne t'empêche de faire une interface avec le langage de programmation de ton choix. Tu peux très bien faire du Java sur une tablette android et dans ton code envoyer des informations via bluetooth.
Sinon, je te conseil le Python sur PC (avec pyQt pour faire l'interface), car tu peux envoyer n'importe quoi sur le port série en moins de 10 lignes;
Je peux te passer un exemple de chenillard (c'est l'exemple le plus simple que j'ai en ma possession) controllable via une interface en C++ (Qt) avec le script python (je sais que j'aurais pu utiliser pyQt, mais je ne l'ai plus sur mon PC principal)
Sinon, le processing peut-être aussi très pratique.
Ba ici, j'ai lu quelque choses sur le VB pour crée un interface, je vais essayer de le mettre en application.
J'ai déjà appris il y a longtemps les bases du C++ mais n'ayant plus pratiquer depuis longtemps je n'ai plus les compétence pour crée un interface relier au port COM.
Personnellement, j'avais fait la liaison au port com en python, de mémoire ça donnait :
import serial
import sys
import time
ser = serial.Serial("/dev/ttyACM0", 9600) #connection au port
time.sleep(3) #le temps que ça se connecte
ser.write(sys.argv[1]) #ici on envoie l'argument passé au démarrage à l'arduino.
#Par exemple, dans le terminal, j'ai juste à taper "python nomFichier.py 18" pour envoyer 18... tu peux bien sur faire ser.write("machin")
Et dans l'interface, j'avais juste 5 boutons et au clic on avait genre :
QProcess::startDetached("python nomFichier.py 18"); Rien de bien compliqué
J'ai réussi à créer un interface mais j'ai quelque probléme, voici mon code :
if (Serial.read() == 'a')
{
Serial.println("test");
}
Enfaite, lorsque j'envoie la lettre "a" ou "avancer" mon arduino me renvoie bien "test" mais le probléme lorsque je fait ceci :
if (Serial.read() == 'avancer')
{
Serial.println("test");
}
et que lorsque j'envoie le mot "avancer" il me renvoie rien. J'ai remarquer que celà vien du fait que l'arduino ne prend en compte que le 1er caractére.
- Serial.read() ne lit qu'un seul caractères (donc on ne peut pas le comparer à une chaine entière
- Une chaine s'écrit avec des guillemets double ( " ) et non pas avec des simples ( ' ) (ces derniers sont utilisés pour désigner un caractère unique)
Une solution :
Fais la lecture du mot en entier en le stockant dans un tableau de char ou dans un objet String puis, lorsque la lecture est faite, compare le à ta chaine de référence.
Ok Ok, merci à vous pour vos réponse, pour finir j'ai utiliser la lecture de 1 seul caractère : a = avancer, r = reculer etc etc.
Pour le moment tout marche mon interface est correct parcontre je suis encore sur un petit probléme :/ (oui je suis ennuyeux lol)
Enfaite j'ai fait un bouton qui permet de lancer mon robots automatique (fonction du style aspirateur robots) .
Mon probléme vien du fait que j'ai du crée une boucle infinie (for(;;)) pour pouvoir faire que mon robots recoit toujours des valeur différent.
MAIS j'aimerais créer un bouton 'arrêter la mise en automatique' que j'ai nommée 'i' mais je ne trouve aucun moyen d'arreter cette chaine si quelqu'un pourrais m'aider
Voici mon code :
if (received == 'h')
{
for (;;)
{
unsigned int uS = sonar.ping();
obstacle = uS / US_ROUNDTRIP_CM;
Serial.print("Ping: ");
Serial.print(obstacle);
Serial.println("cm");
avancer(40);
if (obstacle < 40 && obstacle >= 5){
avancer(obstacle);
}
if (obstacle < 5 && obstacle > 0){
arret();
avancer(-20);
delay(500);
tourner(20);
}
if(obstacle == 0){
avancer(40);
}
delay(100);
}
if (received == 'i')
{
while(1);
}
}
}
Bon, j'ai pas trop trop compris ce que tu voulais faire mais bon...
if (received == 'h')
{
for (;;)
{
unsigned int uS = sonar.ping();
obstacle = uS / US_ROUNDTRIP_CM;
Serial.print("Ping: ");
Serial.print(obstacle);
Serial.println("cm");
avancer(40);
if (obstacle < 40 && obstacle >= 5){
avancer(obstacle);
}
if (obstacle < 5 && obstacle > 0){
arret();
avancer(-20);
delay(500);
tourner(20);
}
if(obstacle == 0){
avancer(40);
}
delay(100);
if (Serial.read()== 'i') // Si ça renvoie le charactère 'i'
break; // On sort du "for"
}
}
Si tu met la condition dans ta boucle infinie, suivie de "break", ça devait te faire sortir du for.
Bon le truc embêtant avec mon code, c'est que tu vas être obligé d'attendre que tous les Delays soient finis (peut-être mettre en place des interruptions?) .
Par contre, juste un conseil, même si c'est un peu compliqué avec l'éditeur du SdZ, fait attention à ton indentation, c'est pas évident à lire.
Comme je l'ai dis, tu devrais utiliser des interruptions.
En gros, lorsqu'il y aura de la donnée valide dans le buffer de l'UART, ça va te générer une interruption et ensuite tu n'as plus qu'à lire le buffer, voir si ça correspond à "i" et sortir de ta boucle.
N'étant pas utilisateur d'Arduino, je ne sais pas comment on gère les ISR. J'ai trouvé ce post sur le forum Arduino (voir la deuxième réponse). A vérifier.
De plus, le break, mis a part dans un switch, je ne le conseille pas, ca donne du code illisible !
Utilise un while ou do while, avec comme test : while(serial.read()!='i')
ou du genre.
@Zbeb, Je suis pas sur qu'avoir l'interrupt sur UART soit judicieux, car tu ne pourras pas sortir de la boucle jusqu'a ce que tu lises le caractere. Je pense meme que le serial.read est exactement ce que tu décris, lire le buffer.
Au niveau du probleme des "delays" il faut implementé des delays passif au lieu de delay actifs. Pareil, je connais pas Arduino, mais ca doit etre possible...
Il faut enclenché une interruption de type "timer" (ou du genre, voir la datasheet des ton uC) et la configurer pour qu'elle trig toutes les 1, 10 ou 100 ms. ensuite recoder ton morceau pour qu'il prenne en compte ses changements.
pas trop le temps de répondre mais une bonne piste pour cette histoire de délai passif : utiliser la fonction millis() et un système de mémoire (ou alors carrément un timer comme le dit bounce)
Merci j'ai tester et sa marche Par contre je fait encore appel à vous car ici j'essaye de renvoyé des information que mon capteur infrarouge du robots reçoit dans mon programme C++ or je ne trouve aucun tutoriel qui explique comment faire :/ j'ai essayer avec la fonction :
J'utilise Visual studio 2012 c++ (je l'utilise uniquement pour l'interface graphique et j'inclu mon code c++ dedans)
Voici mon code capteur :
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup()
{
Serial.begin(9600);
Servo1.attach(9);
Servo2.attach(10);
}
void loop()
{
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
obstacle = uS / US_ROUNDTRIP_CM;
Serial.print("Ping: ");
Serial.print(obstacle); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
avancer(40);
if (obstacle < 40 && obstacle >= 5){
avancer(obstacle);
}
if (obstacle < 5 && obstacle > 0){
arret();
avancer(-20);
delay(500);
tournerdroite(40);
}
if(obstacle == 0){
avancer(40);
}
delay(100);
}
De plus le prof ma enfin donnée mon recepteur bleutoot or il me dis que je doit configuré en 4800 mais lorsque je met du 4800 rien en fonctionne tout bug ! mais cette étape je la referais en dernier
× 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.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !