ARDUINO Fonction return

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, je n'arrive pas à utiliser la fonction return. Pourriez-vous m'expliquer ce que je fais de mal ? Merci.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
int buttonPin = 2;
int buttonValue = 0;
int previousButtonValue = 0;
int ledPin = 8;
int ledPin2 = 7;
int ledPin3 = 6;
int ledPin4 = 5;
int ledPin5 = 4;
int counter = 0;


void setup() 
{
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
}

void loop() 
{
  buttonValue = digitalRead(buttonPin);

  if(previousButtonValue != buttonValue)
    {
      if(buttonValue == HIGH)
      {
        counter++;
      }
    }
  previousButtonValue = buttonValue;


   if(counter == 0)
   {
    digitalWrite(ledPin, LOW);
    delay(10);
   }
   else if(counter == 1)
   {
    digitalWrite(ledPin, HIGH);
    delay(10);
   }
   else if(counter == 2)
   {
    digitalWrite(ledPin2, HIGH);
    delay(10);
   }
   else if(counter == 3)
   {
    digitalWrite(ledPin3, HIGH);
    delay(10);
   }
   else if(counter == 4)
   {
    digitalWrite(ledPin4, HIGH);
    delay(10);
   }
   else if(counter == 5)
   {
    digitalWrite(ledPin5, HIGH);
    delay(10);
   }
   else
   {
      digitalWrite(ledPin, LOW);
      delay(10);
      digitalWrite(ledPin2, LOW);
      delay(10);
      digitalWrite(ledPin3, LOW);
      delay(10);
      digitalWrite(ledPin4, LOW);
      delay(10);
      digitalWrite(ledPin5, LOW);
      delay(10);
   }
  return void();
}
+0 -0
Auteur du sujet

Je débute en lisant Le grand livre d'arduino et c'est un des exercice. Donc, ce que je souhaite, c'est allumer les leds une par une, ensuite les éteindre et qu'en r-appuyant, le cycle recommence. En mettant return; ça ne fonctionne pas non plus.

+0 -0
Auteur du sujet

Je te remercie, mais je ne vois pas comment l'utiliser autrement. Dans le loop, ça ne fonctionne pas mais je n'ai pas d'erreur. En le plaçant différemment, cela créer une erreur.

+0 -0

De manière générale, il ne faut pas mettre de return dans la loop() sinon ca quitte et ton programme sera figé

Eskimon

T'es sur ? Pour moi ça finit cette occurrence de loop, arduino fait son éventuelle tambouille interne, puis rappelle loop.

+1 -0
Auteur du sujet

Je vous remercie, mais ça ne fonctionne pas. Je ne sais pas où sont mes erreurs. Je ne sais pas quoi mettre exactement comme expression dans les parenthèses du while. Pourriez-vous encore me donner un coup de main ? Merci.

+0 -0

Bonjour

Qu'est ce qui ne fonctionne pas exactement ? Le code compile, mais ne réalise pas ce que tu souhaitais qu'il fasse ou le compilateur retourne une erreur ?

Dans ce dernier cas, laquelle ?

+0 -0
Auteur du sujet

Avant la compilation était bonne mais ça ne fonctionnait pas comme je le voulais. Le programme s'arrêter au lieu de reprendre au début. Avec la solution d'Eskimon, que j'utilise très certainement mal, le compilateur m'indique l'erreur :

Arduino : 1.6.5 (Windows 7), Carte : "Arduino Uno"

Les options de compilation ont été modifiées, tout sera recompilé

test_bouton_3:2: error: '::main' must return 'int' test_bouton_3:1: error: '::main' must return 'int' test_bouton_3.ino: In function 'int main()': test_bouton_3:24: error: expected primary-expression before ')' token test_bouton_3:83: error: void value not ignored as it ought to be '::main' must return 'int'

Ce rapport contiendrait plus d'informations si l'option "Montrer les informations de sortie pendant la compilation" était activée dans Fichier > Préférences.

+0 -0
Auteur du sujet

J'ai essayé de changé le void en int mais ça ne fonctionne pas non plus (pas de la façon que j'ai écrit le code). Le code allume des leds une par une à chaque fois que j'appuie sur un bouton, une fois toutes allumées, l'appuie suivant les éteints. A partir de là, je souhaiterais que le code reprenne en rallumant les leds une par une et ainsi de suite. J'ai essayé comme ceci, je n'ai pas défaut, mais ça ne fonctionne pas non plus :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
int main();

int buttonPin = 2;
int buttonValue = 0;
int previousButtonValue = 0;
int ledPin = 8;
int ledPin2 = 7;
int ledPin3 = 6;
int ledPin4 = 5;
int ledPin5 = 4;
int counter = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
}


void loop()
{
  buttonValue = digitalRead(buttonPin);

  if(previousButtonValue != buttonValue)
    {
      if(buttonValue == HIGH)
      {
        counter++;
      }
    }
  previousButtonValue = buttonValue;


   if(counter == 0)
   {
    digitalWrite(ledPin, LOW);
    delay(10);
   }
   else if(counter == 1)
   {
    digitalWrite(ledPin, HIGH);
    delay(10);
   }
   else if(counter == 2)
   {
    digitalWrite(ledPin2, HIGH);
    delay(10);
   }
   else if(counter == 3)
   {
    digitalWrite(ledPin3, HIGH);
    delay(10);
   }
   else if(counter == 4)
   {
    digitalWrite(ledPin4, HIGH);
    delay(10);
   }
   else if(counter == 5)
   {
    digitalWrite(ledPin5, HIGH);
    delay(10);
   }
   else
   {
      digitalWrite(ledPin, LOW);
      delay(10);
      digitalWrite(ledPin2, LOW);
      delay(10);
      digitalWrite(ledPin3, LOW);
      delay(10);
      digitalWrite(ledPin4, LOW);
      delay(10);
      digitalWrite(ledPin5, LOW);
      delay(10);
   }
 return void(loop);
}
+0 -0
Auteur du sujet

J'ai compris que return n'est pas utile puisque loop est une boucle. Mais dans mon code la boucle ne fonctionne pas. J'ai modifié le code comme ceci mais ça ne fonctionne toujours pas. Les leds s'allument une par une à chaque impulsion sur le bouton, mais à la fin le programme s'arrête. Je ne comprends pas et j'ai vraiment besoin d'aide.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
int buttonPin = 2;
int buttonValue = 0;
int previousButtonValue = 0;
int ledPin = 8;
int ledPin2 = 7;
int ledPin3 = 6;
int ledPin4 = 5;
int ledPin5 = 4;
int counter = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
}


void loop()
{
  buttonValue = digitalRead(buttonPin);

  if(previousButtonValue != buttonValue)
    {
      if(buttonValue == HIGH)
      {
        counter++;
      }
    }
  previousButtonValue = buttonValue;


   switch(counter)
   {

   case 1:

    digitalWrite(ledPin, HIGH);
    delay(100);
    break;

   case 2:

    digitalWrite(ledPin2, HIGH);
    delay(100);
    break;

   case 3:

    digitalWrite(ledPin3, HIGH);
    delay(100);
    break;

   case 4:

    digitalWrite(ledPin4, HIGH);
    delay(100);
    break;

   case 5:

    digitalWrite(ledPin5, HIGH);
    delay(100);
    break;

   case 6:

    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(500);
   }
}

J'ai aussi essayé comme ceci, la boucle fonctionne automatiquement, mais le bouton ne sert plus à rien (donc ce n'est pas le fonctionnement que je recherche)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
int buttonPin = 2;
int buttonValue = 0;
int previousButtonValue = 0;
int ledPin = 8;
int ledPin2 = 7;
int ledPin3 = 6;
int ledPin4 = 5;
int ledPin5 = 4;
int counter = 0;

void setup()
{
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
}


void loop()
{
  buttonValue = digitalRead(buttonPin);

  if(previousButtonValue != buttonValue)
    {
      if(buttonValue == HIGH)
      {
        counter++;
      }
    }
  previousButtonValue = buttonValue;


   for(int i = 0; i <= 7; i++)
   {

    counter = 1;
    digitalWrite(ledPin, HIGH);
    delay(200);

    counter == 2;
    digitalWrite(ledPin2, HIGH);
    delay(200);

    counter == 3;
    digitalWrite(ledPin3, HIGH);
    delay(200);

    counter == 4;
    digitalWrite(ledPin4, HIGH);
    delay(200);

    counter == 5;
    digitalWrite(ledPin5, HIGH);
    delay(200);

    counter == 6;
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(500);
   }
}
+0 -0

Salut, Ta première version à l'aire bonne, à part qu'il faut que tu remettes la variable counter à 0 dans le case 6:

Car actuellement, tu ne fait que d'un remonter la variable, donc une fois que tu as terminer la séquence, au lieu de repartir à 0, tu continue à compter.

En espérant que ma réponse puisse t'aider.

Les détails font la perfection, et la perfection n'est pas un détail

+0 -0
Auteur du sujet

Merci, il est vrai que ton raisonnement est logique. Mais après plusieurs essais, je ne sais pas comment faire pour mettre la variable counter à 0 dans la case 6. J'ai essayé plusieurs solution mais le résultat est identique, la boucle ne se fait pas .

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte