Go Down

Topic: programmation moteur pas à pas+interruption (Read 1 time) previous topic - next topic

fabdos28

:)
bonjour , nouveau sur le site car je débute sur arduino et je tente de programmer la marche d'un moteur pas à pas.
j'utilise un easydriver et n'ai besoin que de 2 port de sortie.
les programmes style stepper avec un tour en avant , un tour en arrière fonctionne parfaitement.
j'ai donc voulu faire mon propre programme avec un potentiomètre pour la vitesse, un bouton reset, un capteur de point zero, le tout gérant un disque rotatif.
le but est simple: si j'appuie sur reset , le moteur fait tourner le disque jusqu'à détecter le point zéro (avec variation de la vitesse par potentiomètre)

voici mon programme:
int reset=0;       // bouton reset

void setup() {               
  pinMode(3, OUTPUT);   //step 
  pinMode(2, OUTPUT);   //dir
  pinMode(5, INPUT);    //zero
  pinMode(6, INPUT);    //reset
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  Serial.begin(9600);
              }


void loop() {

  int vitesse = analogRead(A0); // lecture du potentiometre
  if (digitalRead(6)== 1)  {  reset = 1; } // active le mode reset
  if (reset=1) {
  digitalWrite(3, HIGH);
  delayMicroseconds(100+vitesse);         
  digitalWrite(3, LOW);
  delayMicroseconds(100+vitesse);
  delay(5);
  if (digitalRead(5)== 1)  { reset = 0;  }// desactivation du rest si position zéro
               }
        }

:smiley-sad-blue: rien ne va plus.....
la lecture du potentiomètre ne fonctionne pas, le reset et le point zéro n'ont pas d'influence, et le moteur tourne tout seul.

si je comprend pourquoi, grace à vous, je peut continuer mon programme et m'en sortir tout seul....le but étant de faire un plateau tournant au 1/10eme de degré, ordre donné par un pc, dans un sens comme dans l'autre.
merci d'avance pour vos réponses XD

Viproz

#1
Jun 21, 2013, 10:52 pm Last Edit: Jun 22, 2013, 02:42 pm by Viproz Reason: 1
Salut, pleins de choses à dire !

Premièrement, le code on le met etre des balises code (le bouton #)

Ensuite :

On ne met pas le numéro de pin en plein milieu du code, on met soit des préprocesseur soit des variables sinon c'est illisible



if (reset=1) {

il manque un =, là tu donne à reset la valeur 1

if (digitalRead(6)== 1)  {  reset = 1; } // active le mode reset

En général, on met == HIGH et non 1

int reset=0;       // bouton reset

Dans ton code, reset prend toujours la valeur 0 ou 1, pourquoi utiliser un int (2 octets) alors qu'un boolean (1 octet) suffirait ?

Après, je ne connais pas le fonctionnement d'un moteur pas à pas et tu n'as pas fourni de schéma donc je ne peux pas plus t'aider  ;)

B@tto


On ne met pas le numéro de pin en plein milieu du code, on met soit des préprocesseur soit des variables sinon c'est illisible


Vu la taille du code et la simplicité du code, c'est pas forcement ce qui dérange le plus xD


if (digitalRead(6)== 1)  {  reset = 1; } // active le mode reset

En général, on met == HIGH et non 1

[/quote]

Moi je le fais tout le temps, au moins ça veut dire qu'il a compris que HIGH = 1 = True


int reset=0;       // bouton reset

Dans ton code, reset prend toujours la valeur 0 ou 1, pourquoi utiliser deux octets avec un int (2 octets) alors qu'un boolean (1 octet) suffirait ?

[/quote]

1 octet = byte     boolean = 1 bit

Sinon avec la remarques sur les "==" de Viproz je pense que ça marchera, avec un simple "=", même dans une condition, tu forces reset à 1 en permanence ;)


Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Viproz


1 octet = byte     boolean = 1 bit


Malheureusement non, "A boolean holds one of two values, true or false. (Each boolean variable occupies one byte of memory.)"
http://arduino.cc/en/Reference/BooleanVariables

B@tto

Oh flûte j'en apprend une ! Je viens de faire le tour de différents langage que je pratique et j'avais jamais noté ce genre de blague, la palme au VB.NET : 1 byte = 1 byte   1 boolean = 2 bytes :s

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

fabdos28

Salut,
Merci pour vos commentaires.
Je me suis fait avoir comme un bleu : toujours metre == dans une comparaison. :smiley-mr-green:

Mon code n'est pas fini. Je pense qu'il y auras d'autre question  ;)

Go Up