Bonjour a tous, en ce moment je fais un projet.
Je comprend vite mais l écriture du code n'est pas mon fort
Mon problème est que je dois configurer un bouton rotatif a plusieurs possibilités. elles sont au nombre de 10
J ai donc fait un code permettant cela mais impossible d avoir une autre possibilité que la première....
Voici le code en question :
1. pinMode(buttonPin1, INPUT);
2. pinMode(buttonPin2, INPUT);
3. pinMode(buttonPin4, INPUT);
4. pinMode(buttonPin8, INPUT);
5. Serial.begin(9600);
6. }
7. void loop() {
8.
9. buttonState1 = digitalRead(buttonPin1);
10. buttonState2 = digitalRead(buttonPin2);
11. buttonState4 = digitalRead(buttonPin4);
12. buttonState8 = digitalRead(buttonPin8);
13.
14. if (digitalRead(buttonPin1) == HIGH) {
15. delay(1000);
16. Serial.println("je suis classe 1");
17.
18. }
19. else if (digitalRead(buttonPin2) == HIGH){
20. delay(1000);
21. Serial.println("je suis salle 2");
22.
23. }
24. else if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin2) == HIGH){
25. delay(1000);
26. Serial.println("je suis salle 3");
27. }
28. else if (digitalRead(buttonPin4) == HIGH){
29. delay(1000);
30. Serial.println("je suis salle 4");
31. }
32. else if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin4) == HIGH){
33. delay(1000);
34. Serial.println("je suis salle 5");
35. }
36. else if (buttonState2 && digitalRead(buttonPin4) == HIGH){
37. delay(1000);
38. Serial.println("je suis salle 6");
39. }
40. else if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin2) == HIGH && digitalRead(buttonPin4) == HIGH){
41. delay(1000);
42. Serial.println("je suis salle 7");
43. }
44. else if (digitalRead(buttonPin8) == HIGH){
45. delay(1000);
46. Serial.println("je suis salle 8");
47. }
48. else if (digitalRead(buttonPin1) == HIGH && digitalRead(buttonPin8) == HIGH){
49. delay(1000);
50. Serial.println("je suis salle 9");
51. }
52. else if (digitalRead(buttonPin2) == HIGH && digitalRead(buttonPin8) == HIGH){
53. delay(1000);
54. Serial.println("je suis salle 10");
55. }
56. else {
57. delay(1000);
58. Serial.println("je suis dans aucune salle");
59. }
60. }
La rédaction de votre message ne répond pas aux critères attendus. Il n’aura sans doute pas de réponse tant que vous n’aurez pas pris en compte et mis en application les recommandations listées dans « Les bonnes pratiques du Forum Francophone”
Merci d’éditer votre post pour rajouter les balises de de code, c’est quasiment illisible tel quel:
sélectionner la partie du texte qui correspond au code
appuyez sur l’icône </> dans la barre d’outils pour indiquer que c’est du code
(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)
Quelques infos sur le câblage de l'ensemble pourrait nous aider à t'aider, car le comportement que tu rencontres pourrait être causé par un câblage mal adapté.
Au début pour le câblage j ai un peux galérer et en gros j ai brancher le bouton de façon a faire passer 5V dans le bouton et avoir une sortie et connecter les différents ports 1 2 4 et 8 au pin de la carte 2 4 7 8 (digitales)...mais le code marche le câblage a l air de fonctionner aussi c est juste sur le moniteur série je n arrive que a avoir la première valeur je suis en "classe 1" et même si je change la position du bouton cela continue de me mettre je suis en classe 1.
Bonjour j'ai 6 pates sur mon bouton, (patte 1 2 4 8 et une entrée pour la tension )
Si ça ma fais penser a du binaire c'est ce que ma expliquer mon professeur, les position sont en Hexa et le transfert de donnée en binaire...
je dois rendre mon projet pour le 17 juin
as tu regardé la data sheet du micro controleur?
as tu fait la relation entre un PORT et un octet?
as tu regardé un PIN MAP de la carte UNO?
le port B devrait t'interresser
les résistances de pullup aussi pour ton sélecteur rotatif (je parle des résistances internes du mico controleur).
JML te donne une des façons de coder ton exercice, je m'orientais vers une autre
oui, c'est bien à cela que je pensais
mon code en complément de celui de JML
tout est dans les commentaires
//code pour platine UNO
//le selecteur rotatif donne une information codée en Hexadécimal codé Binaire
//les 4 fils de sortie du sélecteur rotatif sont raccordés
//aux 4 bits de poids faible ( lsb ) du port B sont utilisés
//selon leurs poids respectifs ( 1, 2, 4, 8)
//le commun du sélecteur rotatif sera raccordé à GND
const int buttonPin1 = 8; //pb0 sur 328 et D8 sur UNO
const int buttonPin2 = 9; //pb1 sur 328 et D9 sur UNO
const int buttonPin4 = 10; //pb2 sur 328 et D10 sur UNO
const int buttonPin8 = 11; //pb3 sur 328 et D11 sur UNO
byte bouton = 0; //variable de lecture du port B
byte mask = 0b00001111; //masque pour ne conserver que le lsb du port B
void setup()
{
Serial.begin(115200);
pinMode(buttonPin1, INPUT_PULLUP);//portB bit 0 ==>valeur 1
pinMode(buttonPin2, INPUT_PULLUP);//portB bit 1 ==>valeur 2
pinMode(buttonPin4, INPUT_PULLUP);//portB bit 2 ==>valeur 4
pinMode(buttonPin8, INPUT_PULLUP);//portB bit 3 ==>valeur 8
}
void loop()
{
bouton= ((PINB&mask)^mask);
//exemple:
//si PINB=01011110 alors sélecteur est sur position 1 car PB0 = 0
//AND 00001111 and avec le mask
// 00001110 il reste le lsb de PINB
//XOR 00001111 ou exclusif entre le lsb et le mask
// 00000001bil reste le bit 0 de poids 1
Serial.print (bouton);
switch (bouton)
{ //bits 76543210
case 1 : { //PINB=xxxx1110 = complement à 2 de 1
Serial.println("je suis classe 1");
delay(1000);
} break; //bits 76543210
case 2 : { //PINB=xxxx1101 = complement à 2 de 2
Serial.println("je suis classe 2");
delay(1000);
} break; //bits 76543210
case 3 : { //PINB=xxxx1100 = complement à 2 de 3
Serial.println("je suis classe 3");
delay(1000);
} break; //bits 76543210
case 4 : { //PINB=xxxx1011 = complement à 2 de 4
Serial.println("je suis classe 4");
delay(1000);
} break; //bits 76543210
case 5 : { //PINB=xxxx1010 = complement à 2 de 5
Serial.println("je suis classe 5");
delay(1000);
} break; //bits 76543210
case 6 : { //PINB=xxxx1001 = complement à 2 de 6
Serial.println("je suis classe 6");
delay(1000);
} break; //bits 76543210
case 7 : { //PINB=xxxx1000 = complement à 2 de 7
Serial.println("je suis classe 7");
delay(1000);
} break; //bits 76543210
case 8 : { //PINB=xxxx0111 = complement à 2 de 8
Serial.println("je suis classe 8");
delay(1000);
} break; //bits 76543210
case 9 : { //PINB=xxxx0110 = complement à 2 de 9
Serial.println("je suis classe 9");
delay(1000);
} break; //bits 76543210
case 10 : { //PINB=xxxx0110 0x0A
Serial.println("je suis classe 10");
delay(1000);
} break;
default : { //toutes les autres valeurs 11,12,13,14,15
Serial.println("je ne suis dans aucune classe"); //0x0B, 0x0C, 0x0D, 0x0E, 0x0F
} break;
}
delay(100); //pour ne pas saturer le moniteur serie
}
j ai suivis ton conseil et du coup j ai refais mon code :
int buttonPin1 = 6; // the number of the pushbutton pin
int buttonPin2 = 7;
int buttonPin4 = 8;
int buttonPin8 = 9;
// variables will change:
int buttonState1 = 0; // variable for reading the pushbutton status
int buttonState2 = 0;
int buttonState4 = 0;
int buttonState8 = 0;
void setup() {
Serial.begin(9600);
// initialize the pushbutton pin as an input:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin8, INPUT);
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState4 = digitalRead(buttonPin4);
buttonState8 = digitalRead(buttonPin8);
// read the state of the pushbutton value:
if (buttonState1 == HIGH && buttonState2 == LOW && buttonState4 == LOW && buttonState8 == LOW){
Serial.println("Je suis en salle 1.");
delay(3000);
}
if (buttonState1 == LOW && buttonState2 == HIGH && buttonState4 == LOW && buttonState8 == LOW){
Serial.println("Je suis en salle 2.");
delay(3000);
}
if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState4 == LOW && buttonState8 == LOW){
Serial.println("Je suis en salle 3.");
delay(3000);
}
if (buttonState1 == LOW && buttonState2 == LOW && buttonState4 == HIGH && buttonState8 == LOW){
Serial.println("Je suis en salle 4.");
delay(3000);
}
if (buttonState1 == HIGH && buttonState2 == LOW && buttonState4 == HIGH && buttonState8 == LOW){
Serial.println("Je suis en salle 5.");
delay(3000);
}
if (buttonState1 == LOW && buttonState2 == HIGH && buttonState4 == HIGH && buttonState8 == LOW){
Serial.println("Je suis en salle 6.");
delay(3000);
}
if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState4 == HIGH && buttonState8 == LOW){
Serial.println("Je suis en salle 7.");
delay(3000);
}
if (buttonState1 == LOW && buttonState2 == LOW && buttonState4 == LOW && buttonState8 == HIGH){
Serial.println("Je suis en salle 8.");
delay(3000);
}
if (buttonState1 == HIGH && buttonState2 == LOW && buttonState4 == LOW && buttonState8 == HIGH){
Serial.println("Je suis en salle 9.");
delay(3000);
}
if (buttonState1 == LOW && buttonState2 == HIGH && buttonState4 == LOW && buttonState8 == HIGH){
Serial.println("Je suis en salle 10.");
delay(3000);
}
else {
Serial.println("Je suis dans aucune salle.");
delay(3000);
}
}