Aller au contenu


Photo
- - - - -

Cela ne fonctionne pas ?


  • Veuillez vous connecter pour répondre
22 réponses à ce sujet

#1 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 15 mai 2011 - 09:59

Bonjour,

Voila mon 1er blocage causé par une erreur mais pas dans mon code car pas d'erreur de compilation.

Le suis en train de tester les listes de cas

mais les LEDs ne s'allument pas quand je presse les boutons (ron ron)
Voilà le code (qui semble bon)
Mon 1er montage
Allume une LED bicolor e successivement 3 couleurs

*/


//int LEDpin = 5;
int switchPin_1 = 6;
int switchPin_2 = 7;
int switchPin_3 = 8;
boolean inter_1 = false;
boolean inter_2 = false;
boolean inter_3 = false;


void setup() {

pinMode(6, INPUT);
inter_1 = digitalRead(8);
pinMode(7, INPUT);
inter_2 = digitalRead(8);
pinMode(8, INPUT);
inter_3 = digitalRead(8);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}

void loop() {

if (digitalRead(inter_1) == HIGH)
inter_1 = !inter_1;
switch (inter_1) {
case 1:
inter_2 == true;
digitalWrite(12, HIGH);
break;
case 2:
inter_2 == true;
digitalWrite(13, HIGH);
break;
case 3:
inter_3 == true;
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
default: // cas par défaut
digitalWrite(12, LOW);
digitalWrite(12, LOW);
}

}
[/code]

Montage avec 3 poussoirs
1 LED bi-colors (et 2 résistances qui vont bien)
J'obtien
du vert quand la pin 12 eu HIGH
du rouge quand la pin 12 est HIGH
du orange quand les pins 12 et 13 sont sur HIGH

Les inters sont connectés
Tous à la masse d'un coté
inter_1 pin 6
inter_2 7
inter_3 8

Que peut il bien y avoir qui cloche ?

Merci de votre aide

Cdlt
Yves

#2 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 15 mai 2011 - 10:47

Oulala !

Alors deja ton inter_1 est un booleen et ensuite tu fais un switch dessus avec comme case possible 1, 2 ou 3, donc forcement 2 et 3 ne sortiront jamais (1 peut etre non plus d'ailleurs, ca dépends comment est implémenté le booleen).
En gros, si tu as un booleen, mets juste un if/else.

Ensuite, rajoute au moins un delay dans la boucle, j'ai remarqué que sans delay les IOs ne marchent pas tjrs (de plus, quand tu vas appuyer sur ton inter, tu ne vas pas rester appuyer dessus juste 0.0001 sec, donc ton "inter = !inter" va s'executer plusieurs fois).

Essaies deja de corriger tout ca, tu nous diras si il reste d'autres erreurs.

#3 webshinra

webshinra

    Membre passionné

  • Membres
  • PipPipPip
  • 510 messages

Posté 16 mai 2011 - 08:01

[quote"Jbot"](1 peut etre non plus d'ailleurs, ca dépends comment est implémenté le booleen).[/quote]
normalement en standard true vaut 1 ( en C, on doit pouvoir convertir tout les types en nombres).
aprés, normalement gcc doit te mettre un warning :
% g++ ./a.cpp
./a.cpp: In function ‘int main()’:
./a.cpp:14:6: attention : case label value exceeds maximum value for type [enabled by default][/code]

#4 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 02:49

Bonjour,

Tout d'abord, merci pour vos réponses.

Pour commencer,
@ Jbot
J'ai essayé d'utiliser des if normalement plus simple à gérer)
Lorsque je suivait un tuto ca marchait (avec un If)
Lorsque j'ai essayé avec mes rois If afin de donner le choix entre mes 3 boutons, cela ne marche pas non plus.
J'ai mis des delay, mais les delay que j'ai mis ne règlent que le temps d'allumage de la LED.

Voilà mon code avec des if (ce code est censé avoir exactement la même fonction que le code proposé plus haut avec les cases

_____________________________________________________________________________
| Montage permettant d'allumer une LED bi-colors de 3 couleurs differentes |
| Rouge, Vert, Orange à l'aide de 3 boutons poussoirs |
|____________________________________________________________________________|

*/
int switchPin_1 = 6;
int switchPin_2 = 7;
int switchPin_3 = 8;
int inter_1 = 0;
int inter_2 = 0;
int inter_3 = 0;


void setup() {

pinMode(6, INPUT);
inter_1 = digitalRead(6);
pinMode(7, INPUT);
inter_2 = digitalRead(7);
pinMode(8, INPUT);
inter_3 = digitalRead(8);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}

void loop() {
//digitalWrite(12, LOW);
// digitalWrite(13, LOW);

if (digitalRead(6)== HIGH)
digitalWrite(12, HIGH);
delay (2000);
if (digitalRead(7)== HIGH)
digitalWrite(13, HIGH);
delay (2000);
if (digitalRead(8)== HIGH)
digitalWrite(12, HIGH);
delay (2000);
digitalWrite(13, HIGH);
delay (2000);

}
[/code]

Bon j'explique ce que j'ai voulu faire ou ce n'est as la peine ?
En fait je ne suis pas certain de mettre mes if au bon endroit.
Je m'explique, en VB pour éviter d'avoir à inventer la roue à chaque fois, nous utilisons des fonctions.
Mais la je dois avouer que je ne comprend pas le déroulement de ma boucle.

Nous avons
Une 1ere "zone" ou nous déclarons nos variables
Une autre "Zone" ou nous déclarons les pins utilisées et si elles serviront en entrée ou en sortie
Une autre "Zone"ou nous mettons notre code qui utilise les variables et les pins que nous avons déclarées.

Mais il y a d'autres "modules" que nous devons "encapsuler" entre "{"et "}"
Donc un module If ou If / Then Ou If / Then / Else
Dont on les separer du reste du code ?
Nous avons le module Loop (et je suppose que c'est de lui dont tu parlais quand tu me demandais de mettre un "delay" mais impossible quelque soit l'endroit ou j'ai essayé de le mettre le compilateur me renvoyait un message d'erreur.

@ Webshira
je ne comprend pas ...


Sinon, y a t'il une console permettant de tester la valeur d'une variable à un point précis du code ?

Cdlt
Yves


En fait, je suppose qu'il me faut un minimum de base pour me lancer et après tout vas rouler tout seul...

#5 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 16 mai 2011 - 03:48

Salut,

Je dirais qu'un truc dans le genre devrait marcher. A tester car j'ai la flemme de faire le montage pour tester :p

_____________________________________________________________________________
| Montage permettant d'allumer une LED bi-colors de 3 couleurs differentes |
| Rouge, Vert, Orange à l'aide de 3 boutons poussoirs |
|____________________________________________________________________________|

*/
int switchPin_1 = 6;
int switchPin_2 = 7;
int switchPin_3 = 8;


void setup() {

pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}

void loop() {
delay (100);

if (digitalRead(6)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
else if (digitalRead(7)== HIGH) {
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
}
else if (digitalRead(8)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
}
}
[/code]



#6 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 04:52

Merci

Même si je préfère en règle générale une explication à un travail tout fait.

Mais ne soyons pas plus exigeants que je ne le suis déjà ;)



Sinon, côté fonctionnement

Ca ne marche toujours pas.... ?????



Mo, montage peut-être ?






Décidément

J'espère tout de même de pas m'être planté sur un câblage aussi simple...

Sinon quelle honte.



Cdlt

Yves

#7 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 16 mai 2011 - 05:00

Il faut peut être que tu rajoutes des pull-up sur tes boutons poussoir.

#8 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 05:07

C'est a dire utiliser cette ligne supplémentaire pour activer la résistance Pull UP ?

pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors

Merci

#9 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 16 mai 2011 - 05:09

Oui je confirme, pull up sur les inter. Il y a moyen d'utiliser les pull up internes à l'arduino:
dans ton setup, après les pinMode(i,INPUT), fais digitalWrite(i,HIGH) , avec i=6, 7 et 8.

edit: j'avais pas vu ta réponse, c'est exactement cela.

#10 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 05:11

Cela nous donnerais cela alors ?

/*
_____________________________________________________________________________

| Montage permettant d'allumer une LED bi-colors de 3 couleurs differentes |

| Rouge, Vert, Orange à l'aide de 3 boutons poussoirs |
|____________________________________________________________________________|



*/

int switchPin_1 = 6;
int switchPin_2 = 7;
int switchPin_3 = 8;

void setup() {
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}

void loop() {
delay (100);
if (digitalRead(6)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
else if (digitalRead(7)== HIGH) {
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
}
else if (digitalRead(8)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
}

}


[/code]

Si oui, toujours rien...



#11 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 16 mai 2011 - 05:13

Non, mettre une résistance de pull-up sur ton schéma, histoire de pas avoir d'états flottant. En gros une resistance entre ta pin6 et le VCC, pareil pin7 et 8.



#12 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 16 mai 2011 - 05:17

Essaies de voir sur le terminal si les boutons marchent deja, j'ai rajouté le code correspondant.

Si ca marche, c'est que la led ne marche pas. Sinon, c'est qu'il y a un probleme avec les boutons (pull up ou autre).

/*
_____________________________________________________________________________

| Montage permettant d'allumer une LED bi-colors de 3 couleurs differentes |

| Rouge, Vert, Orange à l'aide de 3 boutons poussoirs |
|____________________________________________________________________________|



*/

int switchPin_1 = 6;
int switchPin_2 = 7;
int switchPin_3 = 8;

void setup() {
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);

Serial.begin(9600);

}

void loop() {
delay (100);
if (digitalRead(6)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
Serial.println("1");
}
else if (digitalRead(7)== HIGH) {
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
Serial.println("2");
}
else if (digitalRead(8)== HIGH) {
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
Serial.println("3");
}

}


[/code]


Tiens, dd'ailleurs d'aprés ton schema, ca serait plutot des (digitalRead(6)== LOW) qu'il faudrait mettre je pense.

#13 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 05:28

Merci a toi
A toi aussi Alexy

Mais pour l'heure je dois m'occuper des devoirs de mon fils.
Je reprends des qu'il a finit (sûrement après le repas du soir.)

Donc merci et a plus tard.

Cdlt
Yves

#14 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 16 mai 2011 - 05:39

Ok, au pire connectes toi sur msn ce soir, normalement je serais connecté étant donné que mon robot a décidé de ne plus marcher, va falloir que je bosse dessus.

#15 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 16 mai 2011 - 07:47

normalement ça marche sans résistances externes (déja testé)...

#16 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 09:58

Bon et bien ca y est ca marche

Mon sauveur, Jbot qui a délaissé son bébé malade (son nouveau né ramasseur de jetons ;) ) pour m'aider.... (son re-jeton quoi ;) )

Alors le code

int switchPin_2 = 7;
int switchPin_3 = 8;

void setup() {
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);

Serial.begin(9600);

Serial.println("Demarrage !");
}

void loop() {
delay (100);
if (digitalRead(6)== LOW) {
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
Serial.println("1");
}
else if (digitalRead(7)== LOW) {
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
Serial.println("2");
}
else if (digitalRead(8)== LOW) {
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
Serial.println("3");
}

}[/code]

Mais ce n'était pas un problème de code. (ni un problème de schéma, celui que je montre plus haut est bon)
Le conseil que je puisse donner après cette expérience est de toujours tester les composants avant de les installer.
aujourd'hui, sans y prêter garde j'avais pris 3 poussoirs bien mais 3 poussoirs ouvert au travail...
Donc quand vous achetez des lots de composants, testez les avant de les insérer dans vos montages
sinon, vous aurez les même problèmes que moi.

Cdlt
Yves

#17 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 16 mai 2011 - 10:10

héhé,
toi qui est pourtant un peu philosophe, tu aurais du t'inspirer de Descartes et tout remettre en question :p

N'empèche que c'est agréable quand ça fonctionne hein? :)

#18 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 16 mai 2011 - 10:34

Oui Alexis
Moi je dirais même que c'est mieux, bien mieux...

Mais en temps normal, j'aurais immédiatement testé les tensions ou sonné les inters.
Mais comme je manque de confiance en mon code, j'ai même pas imaginé autre chose...

A si vous n'étiez pas là, mes débuts seraient vraiment laborieux.



#19 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 21 mai 2011 - 06:12

Bravo JBot. Faut dire qu'on a fait tous les deux nos études au même endroit, mais ce n'est pourtant pas "Aidons-Yves Les Bains".


#20 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 21 mai 2011 - 06:19

[quote"Luj"] "Aidons-Yves Les Bains".
[/quote]

Je tiens à préciser que je n'ai aucun rapport (ni familiale ni de fortune) avec certaines personnes (et portant le même nom) très implantés dans les villes thermales. :o

Car je suppose que l'allusion était là non ? ou nom . :D

Cdlt
Yves




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users