ARDUINO Fonction return

a marqué ce sujet comme résolu.

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();
}

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.

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);
}

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);
   }
}

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.

+0 -0

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 .

Bonjour , si c ’ est pour un exercice et que utiliser return est un imperatif de l ’ exercice , je pense que l’ auteur veut que utilise un truc du style :

void loop() { /* du code

/ unevariable // et du code } mafonction () { / du code

*/ return unevariable ; }

Une remarque en passant , au debut tu met ca : " int buttonValue = 0; int previousButtonValue = 0; " plus tard dans ton code tu met : " buttonValue = LOW; " " buttonValue = HIGH; " qui ne sont pas des entiers bien sur … buttonValue = 1; ( pour high ) irait mieux a mon avis .

De plus si tu veux repartir comme avant le loop , mais dans le loop , il suffit de changer " previousButtonValue = buttonValue; " par previousButtonValue = 0; a l ’ interieur du loop .

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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