Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« on: November 07, 2012, 06:38:28 am » |
bonjour à tous, voilà je souhaite crée un asservissement d'un moteur en fonction de la variable rpm (capteur magnétique) mais le code suivant ne fonctionne pas car lorsque je dépasse 1000 rpm, le moteur reste sur la valeur 1, auriez vous une idée ? int motorVal_1 = 100; // variable moteur 1 int motorVal_2 = 255; // variable moteur 2
unsigned long rpmcount; // variable rpmcount long rpm; // variable rpm String rpm1;
void loop(){ // Tachymetre if (rpmcount > 100 ){ rpm = 1000000*60/(millis() - timeold)*rpmcount; timeold = millis(); rpmcount = 0; rpm1 = (String(rpm)); ELCD_Cursor_Position(5, 1); ELCD_put_chr(rpm1.charAt(0)); ELCD_Cursor_Position(6, 1); ELCD_put_chr(rpm1.charAt(1)); ELCD_Cursor_Position(7, 1); ELCD_put_chr(rpm1.charAt(2)); ELCD_Cursor_Position(8, 1); ELCD_put_str("0"); ELCD_Cursor_Position(9, 1); ELCD_put_str("0");
// Start if (startVal == 1){ analogWrite(motorPin, motorVal_1); motorState = 1; } else if ((startVal == 1) && (rpm > 1000)){ analogWrite(motorPin, motorVal_2); motorState = 2; else { analogWrite(motorPin, 0); motorState = 0; } }
ps: j'utilise les doubles parenthèses Barbudor, tu as vu 
|
|
|
|
« Last Edit: November 07, 2012, 06:46:33 am by Mike74 »
|
Logged
|
|
|
|
|
Bretagne
Offline
God Member
Karma: 8
Posts: 658
|
 |
« Reply #1 on: November 07, 2012, 06:43:51 am » |
Elles viennent d'où, tes variables motorVal_1 et motorVal_2? on ne peut rien te dire si on n'a pas toutes les données...
|
|
|
|
|
Logged
|
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #2 on: November 07, 2012, 06:46:58 am » |
oui désolé, voilà c'est corrigé 
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #3 on: November 07, 2012, 07:05:59 am » |
Le code semble incomplet. C'est incompréhensible.
|
|
|
|
|
Logged
|
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #4 on: November 07, 2012, 07:12:31 am » |
 J'ai bien évidement mis que la partie intéressée, je n'ai pas mis la partie setup
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #5 on: November 07, 2012, 07:21:57 am » |
Tel que le programme est là, la variable rpmcount ne change pas dans le cours du programme. Donc en pratique rien ne se passe puisqu'on ne rentre jamais dans le if (rpmcount > 100) De plus il doit manquer une accolade fermante dans le else if
|
|
|
|
|
Logged
|
|
|
|
|
Ales
Offline
Edison Member
Karma: 7
Posts: 1658
Do or DIY
|
 |
« Reply #6 on: November 07, 2012, 07:28:36 am » |
C'est normal que ça plante : ta premiere condition est (startval == 1), si elle est fausse les conditions de ton else le sont aussi. Si elle est vrai, alors ton else n'est pas executé.
|
|
|
|
|
Logged
|
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #7 on: November 07, 2012, 07:30:28 am » |
il faut que je mette if alors si je comprend bien ou à la méthode switch
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #8 on: November 07, 2012, 07:42:27 am » |
// Start if (startVal == 1){ analogWrite(motorPin, motorVal_1); motorState = 1; } else if ((startVal == 1) && (rpm > 1000)){ analogWrite(motorPin, motorVal_2); motorState = 2; else { analogWrite(motorPin, 0); motorState = 0; } Si startVal est à 1 on exécute le if et du coup on ne passera jamais dans le else if qui est derrière. Une autre écriture qui devrait plus coller à ce que tu veux. // Start if (startVal == 1){ if (rpm <= 1000){ analogWrite(motorPin, motorVal_1); motorState = 1; } else{ analogWrite(motorPin, motorVal_2); motorState = 2; } } else { analogWrite(motorPin, 0); motorState = 0; }
|
|
|
|
|
Logged
|
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #9 on: November 07, 2012, 08:04:21 am » |
ok super, merci.
|
|
|
|
|
Logged
|
|
|
|
|
Bretagne
Offline
God Member
Karma: 8
Posts: 658
|
 |
« Reply #10 on: November 07, 2012, 09:09:14 am » |
if (startVal == 1){ analogWrite(motorPin, motorVal_1); motorState = 1; } else if ((startVal == 1) && (rpm > 1000)){ analogWrite(motorPin, motorVal_2); motorState = 2; else { analogWrite(motorPin, 0); motorState = 0; } il ne te manque pas un } entre les lignes motorState = 2; et else { ???
|
|
|
|
|
Logged
|
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #11 on: November 07, 2012, 09:13:42 am » |
pourquoi ce code ne fonctionne pas ? // Start if (startVal == 1){ if ((rpm < 1000) && (rpm < 4000)){ analogWrite(motorPin, motorVal_1); motorState = 1; } else if ((rpm >= 1000) && (rpm < 4000)){ analogWrite(motorPin, motorVal_2); motorState = 2; } else if ((rpm >= 1000) && (rpm >= 4000)){ analogWrite(motorPin, motorVal_3); motorState = 3; }
} else { analogWrite(motorPin, 0); motorState = 0; }
|
|
|
|
|
Logged
|
|
|
|
|
France S-O ou exil en IDF
Offline
Edison Member
Karma: 12
Posts: 1053
|
 |
« Reply #12 on: November 07, 2012, 09:52:04 am » |
N'y aurait-il pas des erreurs dans l'écriture des conditions ?
if ((rpm < 1000) && (rpm < 4000)) Si rpm est inférieur à 1000 je ne vois pas comment il pourrait ne pas être inférieur à 4000 !
else if ((rpm >= 1000) && (rpm >= 4000)) Idem si rpm est supérieur à 4000, comment ne pourrait-il pas être supérieur à 1000 ?
C'est des "OU" ou des "ET" qu'il faut mettre ? Commence par énoncer les conditions en bon français et traduit les ensuite en ligne code.
|
|
|
|
|
Logged
|
Aides toi et la communauté t'aidera
|
|
|
|
Lausanne
Offline
Jr. Member
Karma: 0
Posts: 93
|
 |
« Reply #13 on: November 07, 2012, 09:55:42 am » |
oui tu as raison mais si je mets cela ? ca ne fonctionne pas // Start if (startVal == 1){ if (rpm < 1000){ analogWrite(motorPin, motorVal_1); motorState = 1; } else if ((rpm >= 1000) && (rpm < 4000)){ analogWrite(motorPin, motorVal_2); motorState = 2; } else if ((rpm >= 4000)){ analogWrite(motorPin, motorVal_3); motorState = 3; }
} else { analogWrite(motorPin, 0); motorState = 0; }
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #14 on: November 07, 2012, 10:29:45 am » |
est-ce que startVal vaut 1 ?
|
|
|
|
|
Logged
|
|
|
|
|
|