Go Down

Topic: Servo et processing? help? (Read 285 times) previous topic - next topic

Marsat

Jun 12, 2017, 04:57 pm Last Edit: Jun 12, 2017, 05:42 pm by Marsat
Bonjour

Je suis actuellement en train de me faire un petit robot à piloter à distance, et malheureusement les bras que j'ai reçus sont équipés de Servo 180°.
Or il y a quelque chose que je ne comprends pas: la semaine dernière, j'arrivais à les faire bouger un par un via processing (c'est l'interface que je me suis créer, je fonctionne en Serial).
Et depuis un moment, non... Je ne sais pas si mon code est mauvais car j'ai tenté pleins de solutions :/

Sauriez-vous me dire ou je me suis planté dans la fonction de mes moteurs? En gros, on clique sur un bouton sur processing, cela envois un nombre, qui ensuite est repris dans arduino pour exécuter une commande (easy quoi...):

Navré de demander, mais il me semble qu'a un moment on a tous besoin d'un oeil neuf quand on a trop travaillé sur un code :(


Voici les petites fonctions (je n'active que trois Servos pour le moment):

voici le setup:
Quote
#include <Servo.h>


Servo DavidGA; int DGA = 90;
Servo DavidGB; int DGB = 90;
Servo DavidGC; int DGC = 90;

boolean setupTest = false;


int angleClock = 160;
int angleClockWise = 20;


int delais = 25; //20 est une valeur bonne

void setup() {

  Serial.begin(9600);
  DavidGSetup();

  delay(delais);
}

void loop() {
  DavidGCom();
  DavidGLoop();

}

Quote
void DavidGSetup() {
  DavidGA.attach(22);
  DavidGB.attach(23);
  DavidGC.attach(24);

//All int at 90
  DavidGA.write(DGA);
  delay(delais);
  DavidGB.write(DGB);
  delay(delais);
  DavidGC.write(DGC);
  delay(delais);
}

void DavidGLoop() {
  if (setupTest == false) {
      DavidGA.write(DGA);
      DavidGB.write(DGB);
      DavidGC.write(DGC);

  }
}

void DavidGCom() {

  if (setupTest == false) {
    //if ( Serial.available()) {
      switch (Serial.read()) {
        /////////////////////////////////
        case 21:
          DGA = angleClock;
          delay(delais);
          break;

        case 22:
          DGA = angleClockWise;
          delay(delais);
          break;
        /////////////////////////////////
        case 23:
          DGB = angleClock;
          delay(delais);
          break;
        case 24:
          DGB =  angleClockWise;
          delay(delais);
          break;
        /////////////////////////////////
        case 25:
          DGC = angleClock;
          delay(delais);
          DGC = 90;
          break;
        case 26:
          DGC =  angleClockWise;
          delay(delais);
          DGC = 90;
          break;

        /////////////////////////////////
        default:
          DGA = 90;
          DGB = 90;
          DGC = 90;
          break;
      }
   // }
  }


}


infobarquee

bonjour,
qu'est ce qui a changé entre le moment où ca fonctionnait et maintenant?
c'est la question qu'il faut se poser avant tout.

je pense aussi que
Code: [Select]
   //if ( Serial.available()) {
doit y être pour quelque chose.

mets des serial print pour voir si tu recois quelque chose sur l'arduino et si tu rentre dans les conditions.
AUCUNE AIDE PAR MP

dfgh

Hello

sous processing, le port de liaison fait partie d'une "liste"

si lorsque cela fonctionnait, tu n'avais que ton robot branché sur les ports, dans processing, il
occupait la place 0 dans la liste. processing envoyait les ordres sur le port 0 et tout allait bien.

si depuis, tu as 3 ou 4 périphériques branchés en plus de ton robot, il est possible que le port pour le robot soit le 2 ème ou le 3 ème dans la liste. mais processing continue à envoyer sur le port 0 de sa liste...

remet toi en configuration de l'époque ou cela marchait.

Go Up