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