boolean : c le type de variable logique 0 (faux) ou 1 (vrai)pardon j'aurais du préciser : c'est une "fonction" ou une variable ?

PPE recharge autonome
#81
Posté 27 avril 2012 - 08:54
http://hmnrobots.blogspot.fr/
#82
Posté 28 avril 2012 - 03:56
tout d'abord merci pour ces réponses!
signe == à la place je pense
manque quelques ; aussi
Très juste, merci!bon sinon tu déclare deux fois etatcapteurT1 je suppose que le deuxième c'est T2 ^^
D'après ce que j'ai lu, on peut lire l'état d'un bit sans passer par les constantes HIGH LOW grâce à la fonction bitRead() directement sur le port du ATmega comme ceci : bitRead(PORTD, pin)tout part donc de cette valeur.
sur les PIC, en C CCS une entrée au niveau haut renvoie un 1 ou 0 c'est pourquoi j'avais proposé cette formule.Dans la référence Arduino je n'arrive pas à trouver la preuve (même si je le crois) que HIGH = 1 et que LOW = 0
si effectivement HIGH=1 alors la formule doit fonctionner, la conversion de type boolean 2 vers byte étant (pour moi) automatique
sinon plusieurs méthodes simples:
-conversion de type avec la fonction byte
-modif de la formule par ex : dirBalise =2*(etatCapteurT1==HIGH) + (etatCapteurT2==HIGH) ça marche en C l'opérateur == renvoie 1 ou 0
-création d'une fonction car je ne crois pas qu'elle existe dans la Lib Arduino iif : iif(test,valeur si vrai,valeur si faux) la formule devient alors :dirBalise= 2*iif(etatCapteurT1==HIGH,1,0) + iif(etatCapteurT2==HIGH,1,0)
on peut certainement faire plus compliqué!
(sources: http://stackoverflow...-pinmode-output et http://www.playardui...-votre-arduino/)
Ainsi on a non plus une constante booléenne mais un byte ou int sur lequel on peut appliquer la formule de base (en théorie, il faudra que j'essaye). Sinon j'utiliserai une de tes solutions!
Il sert à détecter la présence de la balise à proximité: dès qu'on sait que la balise se trouve quelque part dans un cercle de rayon n autour du robot, celui-ci tourne sur lui-même pour en trouver la direction à l'aide du "T"A quoi sert le pinCapteurCone ?
c'est vrai que c'est inutile de mettre un switch dans une condition, autant faire rentrer cette condition dans le switch ^^ je peux même y mettre le else en default:... merciA quoi sert le pinCapteurCone ?
Le switch peut gérer les 4 cas :
0:mode recherche
1:droite
2:gauche
3:devant

ce sont les entrées analogiques de la arduino (plus exactement les entrées du CAN de la arduinoensuite A0 c'est quoi ? idem pour A1 et A2

Void loop c'est la fonction principale du programme en arduino, un peu comme le main sauf que, comme son nom l'indique, elle est exécutée en boucle. Pour la suite je respecte à la lettre l'algo (en pj du premier post). Si tu veux je pourrais commenter le codebon après void loop je suis un peu perdu ( je ne sais même pas ce que ça veut dire x) )
Merci!Bon courage pour la suite swolf ! public/style_emoticons/default/wink.gif

Absolument!boolean : c le type de variable logique 0 (faux) ou 1 (vrai)


#83
Posté 28 avril 2012 - 06:43
http://hmnrobots.blogspot.fr/
#84
Posté 28 avril 2012 - 07:51
#85
Posté 28 avril 2012 - 08:14
tu n'utilises pas le simulateur ?Je sais pas j'ai pas pu tester, j'ai aucun materiel sous la main ^^ je fais les essais dès que je peux
http://hmnrobots.blogspot.fr/
#86
Posté 28 avril 2012 - 08:20


#87
Posté 28 avril 2012 - 08:43
je ne connais pas bien les possibilité de Proteus (je ne l'ai pas depuis longtemps!) mais j'ai vu qu'il existe d'autres outils comme celui ciProteus? Je pourrais en théorie mais comme on peut pas simuler des capteurs et pis qu'il faudrait que je compile mon programme pour le mettre dans un ATmega virtuel bref toute une galere
donc je prefere les tester en "vrai" (et pi c'est plus marrant
)
je ne sais pas ce que ça vaut
http://hmnrobots.blogspot.fr/
#88
Posté 28 avril 2012 - 10:31
#89
Posté 29 avril 2012 - 09:54
Perso j'ai même pas trouvé comment insérer un pic xDProteus? Je pourrais en théorie mais comme on peut pas simuler des capteurs et pis qu'il faudrait que je compile mon programme pour le mettre dans un ATmega virtuel bref toute une galere donc je prefere les tester en "vrai" (et pi c'est plus marrant )
Sinon pour les capteurs tu peux mettre des switchs. Mais bon c'est sûr c'est moins fun que les vrais tests

#90
Posté 29 avril 2012 - 07:03
Sinon pour les tests p-ê que si on était au début des vacances j'aurai fait une simu mais j'aurais bientôt le matériel sous la main donc je peux attendre

#91
Posté 29 avril 2012 - 07:22
Je poste le code pour la partie déplacement "normal" du robot, c'est à dire uniquement la partie évitement d'obstacles:
int E2 = 6; //pin Enable moteur 1 int M2 = 7; //pin PWM moteur 1 int E1 = 5; //pin Enable moteur 1 int M1 = 4; //pin PWM moteur 1 int dist = 0; //distance de l'obstacle float sharpVoltage[] = { 3.01, 2.71, 2.33, 2, 1.77, 1.56, 1.4, 1.25, 1.04, 0.92, 0.8, 0.76, 0.65, 0.51, 0.41, 0.49, 0.3 }; //mesures réalisées grace au graph constructeur int sharpCms[] = { 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 25, 30, 35, 40 }; //mesures réalisées grace au graph constructeur int valC = 0; //valeur moyennée int avg = 7; //nombre d'échantillons de mesure int s=0; //variable flip flop int i=0; //variable de boucle //============================================================================================================================================================ void setup() { pinMode(M1, OUTPUT); //définit le pin moteur 1 en sortie pinMode(M2, OUTPUT); //définit le pin moteur 2 en sortie Serial.begin(9600); //initialisation de la fréquence de transmission (en baud) -pour le débuggage- } void loop() //boucle principale (comportement du robot) { int dist=lecture_distance(); //on récupère la distance de l'obstacle if (dist<15 && dist!=0) { //si un obstacle est détecté à moins de 15cm arret(); //on s'arrete reculer(150); //on recule à vitesse moyenne delay(900); //pendant 900ms //on tourne à gauche ou à droite selon la direction précedente if (s=0) { droite(255); s=1; } else if (s=1) { gauche(255); s=0; } delay(1000); //pendant 1s } else { //sinon (si pas d'obstacle) avancer (230); //on continue d'avancer } } //============================================================================================================================================================ void avancer(int vitesse) { //fonction avancer: les deux moteurs à la vitesse donnée dans le sens avant digitalWrite(M1, HIGH); digitalWrite(M2, HIGH); analogWrite(E1, vitesse); analogWrite(E2, vitesse); } void reculer(int vitesse) { //fonction reculer: les deux moteurs à la vitesse donnée dans le sens arriere digitalWrite(M1, LOW); digitalWrite(M2, LOW); analogWrite(E1, vitesse); analogWrite(E2, vitesse); } void droite(int vitesse) { //fonction tourner à droite: le moteur droit à la vitesse donnée dans le sens avant et l'autre dans le sens arriere analogWrite (E1,vitesse); digitalWrite(M2,LOW); analogWrite (E2,vitesse); digitalWrite(M1,HIGH); } void gauche(int vitesse) { //fonction tourner à gauche: le moteur gauche à la vitesse donnée dans le sens avant et l'autre dans le sens arriere analogWrite (E1,vitesse); digitalWrite(M1,LOW); analogWrite (E2,vitesse); digitalWrite(M2,HIGH); } void arret() { //fonction arret: les deux moteurs en arret digitalWrite(E1, LOW); digitalWrite(E2, LOW); } //============================================================================================================================================================ float lectureTension(){ //récupération de la valeur analogique du capteur, puis conversion en tension int valeur = analogRead(A0); //récupération de la valeur analogique du capteur // Convertit la lecture en tension float tension = valeur * 5.0; tension /= 1024.0; return tension; //renvoi la tension du capteur } int distance_l(){ //fonction de corrélation distance/tension à partir du graph constructeur float tension = lectureTension(); // si tension inférieure à 0.3v on est soit très loin, soit très près // Donc la distance est considérée comme inconnue if( tension < 0.3 ) return -1; // Localiser la position dans le tableau OU la tension // lue sur le senseur est plus grande que la valeur du tableau // de référence int index = 0; while( sharpVoltage[index] > tension ){ index++; // Si on sort du tableau, la distance est inconnue! if( index == 17 ) return -1; } return sharpCms[index]; // renvoi la distance en cm } int lecture_distance() { float tension = lectureTension(); //on lit la tension du capteur grace à la préce=édente fonction int distance = distance_l(); //on la fait correspondre à une distance en cm for (i=1;i<avg;i++){ float tension = lectureTension(); int distance = distance_l(); valC += distance; //on fait la somme de plusieurs échantillons de mesures } valC/=avg; //puis la moyenne if (valC<3) { //on élimine les "déchets" valC=0; } return valC; //et on renvoie la valeur moyennée }
Dites moi-ce que vous en pensez!
#92
Posté 29 avril 2012 - 08:35

Bon quelques média pour pimenter:
différentes vues du "T":




à propos j'ai une question: j'ai mit pendant le collage un petit peu de colle (cyanuroacrylate) sur les capteurs IR (tsop4838)... Je voudrais essayer de l'enlever pour pas que ça empêche ou détériore la réception; j'ai vu que l'ammoniaque (ou bien le
détach glu)
permettait de bien enlever la colle et je pensais en passer sur le tsop avec un coton-tige mais j'ai peur que l'ammoniaque abîme le capteur... Qu'est ce que vous en pensez? (je sais, c'est pas très courant
petite vidéo des premiers pas du robot (là c'est juste une séquence programmée, j'ai pas le télémètre chez moi):

EDIT: j'avais pas vu que les photos étaient en bmp, ça vous embête? :/ pour la vidéo j’essayerai de la mettre sur youtube
#93
Posté 29 avril 2012 - 09:30
J'avoue que ça m'intéresse merci ! ^^ (mais bon fais ça quand t'as du temps ça urge pasPour le PIC si tu veux je t'explique par mp peut-être qu'après le bac je ferais un petit tuto dessus (un truc vraiment rapide pour les bases...)
Sinon pour les tests p-ê que si on était au début des vacances j'aurai fait une simu mais j'aurais bientôt le matériel sous la main donc je peux attendre

PS : ça a de la gueule !

#94
Posté 29 avril 2012 - 11:15
PS : ça a de la gueule !
Merci!

pour isis je t'ai mp

#96
Posté 30 avril 2012 - 06:45

#98
Posté 05 mai 2012 - 01:20
j'ai programmé le PIC et testé le programme: ça marche mais on a un fréquence de 39kHz et des poussières et comme j'ai entendu que le 4838 était capricieux au niveau fréquence, je ne pense pas que ça va marcher... Heureusement, je me suis rendu compte que le pic16f88 avait un module PWM (ccp1) qui pourrait me permettre d'avoir mon signal précisément!
du coup j'ai refait le programme, il faudra que je le reflash pour tester. J'ai pas pu le simuler sous ISIS car mon compilateur .hex de Flowcode ne marche pas et MikroC me dit que le 16f88 n'a pas de module PWM (?). J'attends donc d'être au lycée pour faire tous les tests (à moins qu'un robot-maker soit assez gentil pour répondre ici


Pour le capteur de suivi de ligne vous pouvez voir ici que je rencontre pas mal de soucis

Pour ce qui est du robot lui même, j'ai cramé un diode des régulateurs en me trompant de sens de branchement (shame on me) mais apparemment le lycée peut la changer!
Bref je pense qu'on est maudits parce que rien ne marche (même le programmateur de PIC du lycée avait des problèmes...) mais nous sommes dans une phase on on progresse pas mal (malgré les dieux cruels qui tentent d'empêcher notre mission).
#99
Posté 05 mai 2012 - 01:26
Bon des nouvelles:
j'ai programmé le PIC et testé le programme: ça marche mais on a un fréquence de 39kHz et des poussières et comme j'ai entendu que le 4838 était capricieux au niveau fréquence, je ne pense pas que ça va marcher... Heureusement, je me suis rendu compte que le pic16f88 avait un module PWM (ccp1) qui pourrait me permettre d'avoir mon signal précisément!
du coup j'ai refait le programme, il faudra que je le reflash pour tester. J'ai pas pu le simuler sous ISIS car mon compilateur .hex de Flowcode ne marche pas et MikroC me dit que le 16f88 n'a pas de module PWM (?). J'attends donc d'être au lycée pour faire tous les tests (à moins qu'un robot-maker soit assez gentil pour répondre ici)
![]()
Pour le capteur de suivi de ligne vous pouvez voir ici que je rencontre pas mal de soucisdonc je vais faire un dernier essai grâce au lien de hmnrobots et si ça ne marche pas je pense que j’achèterai le capteur suivi de ligne de lextronic... (sacrilège!)
Pour ce qui est du robot lui même, j'ai cramé un diode des régulateurs en me trompant de sens de branchement (shame on me) mais apparemment le lycée peut la changer!
Bref je pense qu'on est maudits parce que rien ne marche (même le programmateur de PIC du lycée avait des problèmes...) mais nous sommes dans une phase on on progresse pas mal (malgré les dieux cruels qui tentent d'empêcher notre mission).
Courage



Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#100
Posté 05 mai 2012 - 01:52
Courage
Je te donne tout le soutient que je peux par la pensé
![]()
merci

Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users