bonjour,
je cherche a contrôler des moteurs depuis un jeux d'orgues de théâtre, mes driver moteur (sabertooth) acceptent les commandes émanant de la lib servo.h
mon arduino est couvert d' un shield dmx , et mes tests son validés,
toutefois je cherche à réguler différemment mes vitesses de rotation, je m'explique:
je reçois une valeur 8 bit via dmx donc entre 0 et 255,
mon programme (qui suit) l’interprète sur une valeur "servo" soit 0 ->180
-à 90 mon moteur est arrêté et Sa vitesse augmente en s'en éloignant dans un sens ou dans l'autre (vers 0 en avant et vers 180 en arriere)
(je dis mon moteur mais j'en ai 6 qui fonctionnent à l'identique.)
je cherche a améliorer mon code pour n'avoir que les basses valeurs car je n'ai pas besoin de vitesse, mais sur une longue courbe,
Pour résumer je veux avoir des valeurs "servo" (désolé si je manque de clarté, je ne suis pas trop scientifique ) comprise entre 85 et 95 seulement sur toute la course de mon potentiomètre (0->255)
est-ce compréhensible ?
par mesure de facilité j'ai une zone neutre de 122 à 133 pour compenser le manque de fiabilité de mes potards d'ou les -5.5 et +5.5 dans le code suivant
voici le code et merci à toutes les bonne volonté qui nous hissent vers la connaissances ...Code://dmx progressif avec stop et stabil /// /*adressage st 2-3-5 on !!ATTENTION le grand master doit etre à full */ #include <Conceptinetics.h> #define DMX_SLAVE_CHANNELS 6 #include <Servo.h> Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS ); void setup() { myservo1.attach(11, 1475,1525); // pin 11 controle moteur1 myservo1.write(90);//stabilise a 0 myservo2.attach(10); // pin 10 controle moteur2 myservo2.write(90);//stabilise a 0 myservo3.attach(9); // pin 9 controle moteur3 myservo3.write(90);//stabilise a 0 myservo4.attach(6); // pin 6 controle moteur4 myservo4.write(90);//stabilise a 0 myservo5.attach(5); // pin 5 controle moteur5 myservo5.write(90);//stabilise a 0 myservo6.attach(3); // pin 3 controle moteur6 myservo6.write(90);//stabilise a 0 dmx_slave.enable (); dmx_slave.setStartAddress (101); } void loop() { unsigned char dmx1 = dmx_slave.getChannelValue (6); unsigned char dmx2 = dmx_slave.getChannelValue (5); unsigned char dmx3 = dmx_slave.getChannelValue (4); unsigned char dmx4 = dmx_slave.getChannelValue (3); unsigned char dmx5 = dmx_slave.getChannelValue (2); unsigned char dmx6 = dmx_slave.getChannelValue (1); //moteur1 if ( dmx1 <= 122) myservo1.write(dmx1/1.4+5.5); else if ( dmx1 >= 133 ) myservo1.write(dmx1/1.4-5.5); else myservo1.write(90); //moteur2 if ( dmx2 <= 122 ) myservo2.write(dmx2/1.4+5.5); else if ( dmx2 >= 133 ) myservo2.write(dmx2/1.4-5.5); else myservo2.write(90); //moteur3 if ( dmx3 <= 122 ) myservo3.write(dmx3/1.4+5.5); else if ( dmx3 >= 133 ) myservo3.write(dmx3/1.4-5.5); else myservo3.write(90); //moteur4 if ( dmx4 <= 122 ) myservo4.write(dmx4/1.4+5.5); else if ( dmx4 >= 133 ) myservo4.write(dmx4/1.4-5.5); else myservo4.write(90); //moteur5 if ( dmx5 <= 122 ) myservo5.write(dmx5/1.4+5.5); else if ( dmx5 >= 133 ) myservo5.write(dmx5/1.4-5.5); else myservo5.write(90); //moteur6 if ( dmx6 <= 122 ) myservo6.write(dmx6/1.4+5.5); else if ( dmx6 >= 133 ) myservo6.write(dmx6/1.4-5.5); else myservo6.write(90); }
-----