Page 1 sur 1

Exemple de code

Posté : dim. 22 janv. 2023 21:28
par mumu83
Bonjour, j'ai récemment fait l'acquisition d'un arpschuino 32.
Je suis déjà parvenu à faire fonctionner une carte relais et un moteur pas à pas via l'interface web, jusque-là tout va bien...

Maintenant je me rends compte que pour mener à bien mon projet je vais devoir coder et je suis complètement novice...

J'ai téléchargé le code source de l'arpschuino 32, j'ai utilisé Visual Studio et je suis parvenu à téléversé un programme dans arpschuino 32., et vous pouvez me croire c'est déjà pour moi une sacrée prouesse !

Si j'ai bien compris je vais donc être obligé d'éditer le fichier custom_port CPP.

Je suis donc à la recherche d'exemples de code pour piloter un moteur pas à pas avec possibilité de le stopper avec un fin de course, en attendant le tuto sur le custom mode.

@+

Re: Exemple de code

Posté : lun. 23 janv. 2023 08:23
par Jacques
Bonjour mumu83, bienvenu sur le forum.
Voici un sujet abordé de nombreuses fois sur ce forum. Vous êtes nombreux à vouloir utiliser des fins de course.
Dans la prochaine mise à jour du firmware (1.1 à venir bientôt), il y aura un exemple dans Custom_port.cpp.
En attendant le voici :

Code : Tout sélectionner

//////////// port B //////////////
//4 steppers with homing

ArpStepper stepper0(Arp1,Arp0,800);//800 stp/revol
ArpStepper stepper1(Arp3,Arp2,800);
ArpStepper stepper2(Arp5,Arp4,800);
ArpStepper stepper3(Arp7,Arp6,800);	

uint8_t zeroSwitch0=Arp16;//No internal pullup in input Arp16 to 19. 
uint8_t zeroSwitch1=Arp17;//So you have to do it Using an external resistor.
uint8_t zeroSwitch2=Arp18;//see : https://roboticsbackend.com/arduino-input_pullup-pinmode/
uint8_t zeroSwitch3=Arp19;

void setupB()   //this loop is executed once at startup
{   
    //(RPM_min(>0), RPM_max , revolutions, resolution(default 255))				
	stepper0.init(1, 500, 12, _8bits);
  stepper1.init(1, 500, 12, _8bits);
  stepper2.init(1, 500, 12, _8bits);
  stepper3.init(1, 500, 12, _8bits);

  pinMode(zeroSwitch0, INPUT);
  pinMode(zeroSwitch1, INPUT);
  pinMode(zeroSwitch2, INPUT);
  pinMode(zeroSwitch3, INPUT);

  stepper0.refresh(255, 30);//we define a direction of rotation (255, to go in the other direction : 0), and a speed (here 30 for a slow speed) 
  stepper1.refresh(255, 30);
  stepper2.refresh(255, 30);
  stepper3.refresh(255, 30);


  while (digitalRead(zeroSwitch0))//as long as the limit switch is not pressed ((! zeroSwitch) reverses the behavior) 
  {
    stepper0.continuous();//turn !
  }

  while (digitalRead(zeroSwitch1))//as long as the limit switch is not pressed ((! zeroSwitch) reverses the behavior) 
  {
    stepper1.continuous();//turn !
  }

  while (digitalRead(zeroSwitch2))//as long as the limit switch is not pressed ((! zeroSwitch) reverses the behavior) 
  {
    stepper2.continuous();//turn !
  }

  while (digitalRead(zeroSwitch3))//as long as the limit switch is not pressed ((! zeroSwitch) reverses the behavior) 
  {
    stepper3.continuous();//turn !
  }

  portB.setNbDmxChannels(8);//the number of channels used in this port. REQUIRED !
}

void action_B(const std::vector<uint8_t> & DMXslice)  //this loop is executed at each signal reception
{
    stepper0.refresh(DMXslice[0], DMXslice[1]);
    stepper1.refresh(DMXslice[2], DMXslice[3]);
    stepper2.refresh(DMXslice[4], DMXslice[5]);
    stepper3.refresh(DMXslice[6], DMXslice[7]);
}

void at_each_loop_B()   //this loop is executed continuously
{
    stepper0.perform();
    stepper1.perform();
    stepper2.perform();
    stepper3.perform();
}
C'est un exemple de "homing" : le moteur tourne jusqu'à rencontrer le switch à son point zéro. Il doit bien sur être adapté à ton usage.

Re: Exemple de code

Posté : mer. 25 janv. 2023 14:13
par RitoonL
Hello,

c'est déjà très bien de pouvoir compiler le code source. pour le code n'hésites pas à poser tes questions ici, on est en plein dans les problématiques de stepper et ça nous fait avancer. Si tu as des difficultés à adapter le code, le forum est fait pour ça et on t'aidera à avancer.

Bon prototypage !

Eric