Contrôler le servo avec un clavier ou d’autres boutons matériels?

Je viens juste de commencer à utiliser Arduino et je n’ai pratiquement aucune idée de ce qui est avancé. Cela semble assez simple. Maintenant, je suis de ceux qui aiment généralement intégrer deux périphériques ensemble. Je me demandais donc si je pouvais contrôler un servo avec le clavier de l’ordinateur ou deux boutons-poussoirs matériels connectés à la carte Arduino.

Si cela peut aider, j’utilise une carte Arduino Uno. Voici l’exemple de code que j’utilise pour balayer le servo pour l’instant

// Sweep // by BARRAGAN  // This example code is in the public domain. #include  Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { myservo.attach(11); // attaches the servo on pin 9 to the servo object } void loop() { for(pos = 0; pos =1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(10); // waits 15ms for the servo to reach the position } } 
  1. Maintenant, disons que je voulais changer l’angle du servo en appuyant sur les touches fléchées gauche / droite du clavier de mon ordinateur. Comment pourrais-je m’y prendre?

  2. Sinon, si je joignais deux boutons-poussoirs à l’Arduino, le fait d’en appuyer sur l’un déplacerait le servo soit à gauche, soit à droite, en fonction du bouton. Dans quels ports devrais-je twigr les boutons? Tous les exemples de code ou diagrammes seraient d’une grande aide!

Pour déplacer un servo attaché à un arduino attaché à un ordinateur, vous aurez besoin de deux composants.

Vous aurez besoin d’un logiciel sur votre ordinateur pour accepter les commandes du clavier et envoyer des commandes à l’arduino via le port série. Je recommanderais un langage comme Python ou Java pour le faire, car une application simple peut être écrite assez facilement.

Vérifiez ce lien de terrain de jeu pour un exemple d’utilisation de Java. Et pour un exemple en python, consultez ce projet .

Il y a un bug / une fonctionnalité intégrée dans l’arduino qui vous causera du chagrin à mesure que vous avancez ici. L’arduino est conçu pour se réinitialiser automatiquement lorsqu’une connexion série lui est établie via USB. Cette page contient une description détaillée du problème et cite plusieurs façons de le résoudre.

Vous devrez modifier l’esquisse sur l’arduino pour écouter le port série et ajuster la position du servo en fonction des commandes reçues de votre ordinateur. Consultez le lien python ci-dessus. Il s’agit d’un projet complet (matériel, logiciel informatique et arduino sketch) conçu pour faire quelque chose de très similaire à ce que vous essayez de faire.

Je vous recommande de commencer avec l’un des composants et d’essayer de le faire fonctionner. Lorsque vous rencontrez des problèmes, envoyez votre code et quelqu’un se fera un plaisir de vous aider.

Quant à la deuxième question, append des boutons à l’arduino est assez simple. Vous allez les connecter aux entrées numériques. Il y a des centaines d’exemples sur le Web. Recherchez “add button to arduino” et voyez ce que vous obtenez. (lol … 1,3 million de hits). Là encore, essayez-le et publiez des détails pour obtenir de l’aide.

Pour la communication en série, utilisez du mastic
c’est un client multi-plateforme série et ssh

pour les commandes fléchées gauche et droite:
il n’y a pas de caractères ascii pour les flèches: mais il y a utf-8;
putty ou un autre client envoie des caractères utf-8 car les caractères ascii de base sont utf-8 et ascii exactement les mêmes;

et l’arduino ne lit que les caractères ascii;

l’arduino lit
->: 27, 91, 67
<-: 27, 91, 68

il n’est donc pas si simple de lire cela.

vous pourriez utiliser quelque chose comme ça

 int pos = 0; Serial.flush(); // flush all received data while(Serial.avaialble()<3); // wait for the 3 ascii chars if(Serial.read()==27){ // first char if(Serial.read()==91){ //second char switch (Serial.read()){ case 67: // Right arrow myservo.write(++pos); // increment pos with 1 before write it break; case 68: // left arrow myservo.write(--pos); // derement pos with 1 before write it break; case 65: // up arrow myservo.write(++pos); // increment pos with 1 before write it break; case 66: // down arrow myservo.write(--pos); // decrement pos with 1 before write it break; case default: break; } } } 

mais ce n'est pas une bonne solution car le caractère de flèche est envoyé sur 3 octets et lorsque vous le videz, il est possible de vider le 27, vous pouvez donc lire 91, 97, 27; et ce n'est pas valide alors en ne fonctionne pas

vous pouvez écrire un algorithme pour soustraire la commande de flèche sur 5 caractères de ascii

ou vous pouvez utiliser 4 pour aller à gauche et 6 pour aller à droite; qui sont des caractères ascii et dans un pavé numérique sont des flèches dessinées sur ces touches