le deuxieme ne vibre pas à chaque position du moteur mais plus complexe .
j'aimerais à chaque fois qu'un jour me calcule un angle faire bouger le moteur du même angle .
j'avais penser à modifier à ce niveau la
void loop() {
valor = alfa_1 // de mon ancien programme alfa_1 = 360*now.day()/maxday;
graus = map(valor, 0, 360, 0, 360);
je ne sais pas si cela pourrais convenir .
la c'est super complexe pour moi amateur .d'avance merci .
bonne soirée à tout le monde
[code=arduino]
/*
Motor Pas a Pas moviment per valor entrat des d'un potenciòmetre
Gira els graus que li indiquem des del potenciòmetre
El motor necessita de 512 passos per recórrer els 360 graus d'una volta.
360 1
El factor de conversió de graus a voltes és: --- = -------
512 1,42222
Utilitzem el port analògic A0 pel senyal del potenciometre.
El potenciomentre donarà valors entre 0 i 1023, que al motor pas a pas li traduirem en valors entre 0 i 360 graus.
La funció map es basa en la següent fórmula:
(valor_llegit_potenciometre - valor_minim_potenciometre) * (valor_màxim_servo - valor_mínim_servo) / (valor_màxim_potenciometre - valor_mínim_potenciometre) + valor_mínim_servo
O sigui: (valor - 0) * (360-0) / (1023-0) + 0
Robòtica educativa - CRP del Tarragonès
*/
int retard = 5; // Temps de retard entre els passos del motor
int numPasos = 0; // Guarda en graus el punt on es troba el motor
int graus = 0; // Valor en graus de la cadena entrada per l'usuari
int valor = 0; // Valor adquirit des del potenciòmetre
void setup() {
Serial.begin(9600); // Inicialització del port sèrie a 9600 baudis// inversion de sens 8,11,
pinMode(11, OUTPUT); // Pin 11 conectat a IN4 del mòdul ULN2003
pinMode(10, OUTPUT); // Pin 10 conectat a IN3 del mòdul ULN2003
pinMode(9, OUTPUT); // Pin 9 conectat a IN2 del mòdul ULN2003
pinMode(8, OUTPUT); // Pin 8 conectat a IN1 del mòdul ULN2003
pinMode(A0, INPUT); // Entrada de valor del potenciòmetre
}
void loop() {
valor = analogRead(0); // llegeix el valor del potenciometre (dóna un valor entre 0 i 1023)
graus = map(valor, 0, 1023, 0, 360); // escala el valor obtingut del potenciometre al valor que necessita el motor (0 és 0 i 1023 és 360)
if (graus != numPasos){
Serial.print("Valor del potenciòmetre: "); // Envia per pantalla la posició del motor en graus
Serial.print(valor);
Serial.println(" sobre 1024");
Serial.print("Posició del motor: "); // Envia per pantalla la posició del motor en graus
Serial.print(numPasos/1.4222222222);
Serial.println(" graus");
Serial.print("Posició demanada: "); // Envia per pantalla el valor entrat en graus
Serial.print(graus);
Serial.println(" graus");
delay(retard);
graus = (graus * 1.4222222222); // Ajusta els 512 passos de cada volta als 360 graus
while (graus > numPasos){ // Gira a l'esquerra en graus
pasEsquerra();
numPasos = numPasos + 1;
}
while (graus < numPasos){ // Gira a la dreta en graus
pasDreta();
numPasos = numPasos -1;
}
}
atura(); // Atura del motor per tal d'evitar que es calenti
}
void pasDreta(){ // Pasos a la dreta
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retard);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retard);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retard);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retard);
}
void pasEsquerra() { // Pasos a l'esquerra
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retard);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retard);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retard);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retard);
}
void atura() { // Atura del motor
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
[/code]