arduino gérant 2servomoters et des leds avec 1 boutton poussoir

arduino gérant 2servomoters et des leds avec 1 boutton poussoir - Nano-ordinateur, microcontrôleurs, FPGA - Electronique, domotique, DIY

Marsh Posté le 17-11-2013 à 16:28:33    

Bonjour, je suis nouveau sur le site et en programation, je viens de me lancer dans le sujet "Arduino".
 
L'arduino en question est un "SainSmart" UNO, il est plus ou moins pareil et j'ai déjà réalisé des projet
avec bouton poussoir et une led, 2 servomoteur controlé par la carte avec un prog en boucle, mais je reste novice.
 
Mon but est qu'en appuyant une fois sur le bouton poussoir les 2 servomoteurs passe de 15° à 155° et
que les leds s'allume de plus en plus forte, ensuite si j'appuis à nouveau sur le bouton les leds s'éteignent
et les servomoteurs reviennent à leurs positions initial soit 15°.
 
J'ai vus pleins de programation différente en plusieurs langues et se qui me convenait le mieux est celui ci  
que j'ai eu grace à Devilflash que je remercie .
 
[#FFFF00]#include <Servo.h>
//servo 1
Servo myservo;
Servo myservo1;
int val; // variable for reading the pin status
int val2; // variable for reading the delayed/debounced status
int buttonState;
int pos = 15;
int pos1 = 155;
int servostatus = 0;
int switchPin =2; // Switch connected to digital pin 2
int ledPin = 5;
int ledPin3 = 6;
int ledPin2 = 18;
void setup() // run once, when the sketch starts
{
//servo 1
myservo.attach(3);
myservo1.attach(4);
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin3, OUTPUT);
buttonState = digitalRead(switchPin);
myservo.write(15);
myservo1.write(15);
pinMode(ledPin2, OUTPUT);
}
void loop() // run over and over again
//servo 1
{
val = digitalRead(switchPin); // read input value and store it in val
delay(10); // 10 milliseconds is a good amount of time
val2 = digitalRead(switchPin); // read the input again to check for bounces
if (val == val2) { // make sure we got 2 consistant readings!
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
if (servostatus == 0) { // is the light off?
servostatus = 1; // turn light on!
myservo.write(155);
myservo1.write(155);
delay(1000);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin3, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
digitalWrite(ledPin3, LOW);
delay(00);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin3, HIGH);
delay(50);
digitalWrite(ledPin, LOW);
digitalWrite(ledPin3, LOW);
delay(00);
// fading
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
analogWrite(ledPin3, fadeValue);
delay(30);
}
} else {
servostatus = 0; // turn light off!
digitalWrite(ledPin, LOW);
digitalWrite(ledPin3, LOW);
delay(15);
digitalWrite(ledPin2, LOW);
myservo.write(15);
myservo1.write(15);
}
}
}
buttonState = val; // save the new state in our variable
}
}
[/#0055AA]
 
les leds s'allument mais les servomoteurs eux se mettent juste a leurs point de départ mais ne réagissent pas.
 
Avez vous une idée ?
Merçi à vous ! :hello:

Reply

Marsh Posté le 17-11-2013 à 16:28:33   

Reply

Marsh Posté le 18-11-2013 à 09:27:21    

personne ?

Reply

Marsh Posté le 18-11-2013 à 11:48:51    

Bon, j'ai passé la nuit dessus et au final, il y a du mieux, voici le nouveau programme:

Code :
  1. #include <Servo.h>
  2. //servo 1
  3. Servo myservo;
  4. Servo myservo1;
  5. int val; // variable for reading the pin status
  6. int val2; // variable for reading the delayed/debounced status
  7. int buttonState;
  8. int pos = 0;
  9. int pos2 = 0;
  10. int servostatus = 0;
  11. int switchPin =2; // Switch connected to digital pin 2
  12. int ledPin = 8;
  13. int ledPin3 = 6;
  14. int ledPin2 = 7;
  15. void setup() // run once, when the sketch starts
  16. {
  17. //servo 1
  18. myservo.attach(5);
  19. myservo1.attach(4);
  20. pinMode(switchPin, INPUT);
  21. pinMode(ledPin2,OUTPUT);
  22. pinMode(ledPin, OUTPUT);
  23. pinMode(ledPin3, OUTPUT);
  24. buttonState = digitalRead(switchPin);
  25. myservo.write(10);
  26. myservo1.write(10);
  27. }
  28. void loop() // run over and over again
  29. //servo 1
  30. {
  31. val = digitalRead(switchPin); // read input value and store it in val
  32. delay(10); // 10 milliseconds is a good amount of time
  33. val2 = digitalRead(switchPin); // read the input again to check for bounces
  34. if (val == val2) { // make sure we got 2 consistant readings!
  35. if (val != buttonState) { // the button state has changed!
  36. if (val == LOW) { // check if the button is pressed
  37. if (servostatus == 0) { // is the light off?
  38. for(pos = 10; pos < 160; pos += 1)
  39. {
  40. servostatus = 1; // turn light on!
  41. myservo.write(pos);
  42. myservo1.write(pos);
  43. delay(10);
  44. }
  45. digitalWrite(ledPin2,HIGH);
  46. digitalWrite(ledPin, HIGH);
  47. digitalWrite(ledPin3, HIGH);
  48. delay(50);
  49. digitalWrite(ledPin2,LOW);
  50. digitalWrite(ledPin, LOW);
  51. digitalWrite(ledPin3, LOW);
  52. delay(00);
  53. digitalWrite(ledPin2,HIGH);
  54. digitalWrite(ledPin, HIGH);
  55. digitalWrite(ledPin3, HIGH);
  56. delay(50);
  57. digitalWrite(ledPin2,LOW);
  58. digitalWrite(ledPin, LOW);
  59. digitalWrite(ledPin3, LOW);
  60. delay(00);// fading
  61. for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {// sets the value (range from 0 to 255):
  62. analogWrite(ledPin, fadeValue);
  63. analogWrite(ledPin2, fadeValue);
  64. analogWrite(ledPin3, fadeValue);
  65. delay(30);
  66. }
  67. } else {
  68. servostatus = 0; // turn light off!
  69. for(pos2 = 160; pos > 10; pos -=1)
  70. myservo.write(pos2);
  71. myservo1.write(pos2);
  72. delay(10);
  73. digitalWrite(ledPin, LOW);
  74. digitalWrite(ledPin3, LOW);
  75. digitalWrite(ledPin2, LOW);
  76. delay(15);
  77. }
  78. }
  79. buttonState = val; // save the new state in our variable
  80. }
  81. }
  82. }


 
Alors maintenant les servos marchent, mais ils viennent à 10° puis vont à leurs positions initials soit 160°,
mais quand je r'appuis  sur le bouton les leds s'éteignent mais les servos ne bougent pas, si je r'appuis  
pour r'allumer les servos reviennent à 10° et ensuite se placent à 160°...
 
En appuyant sur le bouton pour la fonction "OFF" , quand mes leds s'éteignent mes servos doivent se mettre à 10°, ou est mon erreur ???
 
Se projet est pour un casque iron man pour mon fils  :sol: le casque est déjà fait manque plus que l'électronique et une paire de verres solaire.


Message édité par yannisa974 le 18-11-2013 à 23:00:04
Reply

Marsh Posté le 23-11-2015 à 18:41:34    

Ce sujet a été déplacé de la catégorie Hardware vers la categorie Electronique, domotique, DIY par TotalRecall


---------------
Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed