2017-10-14 7 views
-1

Bonjour Je commence avec la programmation en C++ avec mon Arduino Uno. Maintenant, je veux faire quelque chose comme une couleur vivante. Je fais cela étape par étape et maintenant mon dernier problème est que les lumières ne s'éteignent pas, quand j'ai mon prochain cas.C de cas de commutation, « par défaut » ne fonctionne pas

La première partie n'est pas vraiment importante (je sais que ça peut être mieux). Mais le problème pour moi est dans la dernière partie: default.

J'espère que quelqu'un m'expliquera ce que je fais mal afin que les lumières s'éteignent après chacun, et je peux changer la luminosité de chacun, et peut-être aussi d'autres suggestions.

Désolé pour mon mauvais anglais.

code

#define BUTTON_PIN2 10 

const int RGB_LED_BLUE = 6; 
const int RGB_LED_GREEN = 5; 
const int RGB_LED_RED = 3; 
const int POTPIN = A0; 

int color = 0; 
int x = 0; 
int potmeter = 0; 

boolean button_state = LOW; 
boolean current_button_state = LOW; 
boolean previous_button_state = LOW; 


void setup() 
{ 
    Serial.begin(9600); 
    pinMode(BUTTON_PIN2, INPUT); 
    pinMode(RGB_LED_BLUE,OUTPUT); 
    pinMode(RGB_LED_GREEN,OUTPUT); 
    pinMode(RGB_LED_RED,OUTPUT); 

} 

void loop() 
    { 
    current_button_state = digitalRead (BUTTON_PIN2); 
    if ((current_button_state == HIGH)&& 
    (current_button_state != previous_button_state)) 
    color = x=x+1; 

switch(color) 
    { 
     case 1: 
     { 
     potmeter = analogRead(POTPIN); 
     potmeter = potmeter /4; 
     analogWrite (RGB_LED_RED, potmeter); 
     } 

     break; 

     case 2: 
     { 
     potmeter = analogRead(POTPIN); 
     potmeter = potmeter /4; 
     analogWrite (RGB_LED_GREEN, potmeter); 
     } 
     break; 

     case 3: 
     { 
     potmeter = analogRead(POTPIN); 
     potmeter = potmeter /4; 
     analogWrite (RGB_LED_BLUE, potmeter); 
     x=0; 
     } 
     break; 

     default: 
     { 
     analogWrite (RGB_LED_RED, LOW); 
     analogWrite (RGB_LED_GREEN, LOW); 
     analogWrite (RGB_LED_BLUE, LOW); 
     } 
    } 
    previous_button_state = current_button_state; 
    delay(10); 
} 
+0

Le problème est presque certainement dans le code exécuté par défaut (c'est-à-dire dans votre fonction 'analogueWrite()'). Comme il s'agit d'une fonction non standard, personne ne peut vous aider - ce n'est pas comme si les gens pouvaient déduire télépathiquement ce qu'une fonction inconnue est supposée faire et identifier les bogues qu'elle contient. – Peter

+0

@Peter c'est une fonction Arduino standard https://www.arduino.cc/en/Reference/AnalogWrite – Eelke

+0

@Eelke - Après avoir tagué la question C++, l'OP attire l'attention des développeurs C++ en général - pas seulement ceux qui connaître Arduino - et s'attendre à ce qu'ils soient en mesure d'aider. Cela est également suggéré dans la façon dont la question est posée - impliquant le problème est dans le fonctionnement d'une fonctionnalité de langue ('switch' /' default'). Si telle est l'attente, il incombe à l'OP de justifier cette affirmation - c'est-à-dire de justifier la croyance que la fonction est appelée correctement pour obtenir les résultats souhaités. Sinon, la question ne doit pas être étiquetée C++. – Peter

Répondre

2

Vous réinitialisez x à 0 dans le cas 3 et il est augmente à nouveau avant que le commutateur et avant qu'il ne soit attribué à la couleur si la couleur ne reçoit que les valeurs 1,2 et 3 Ce n'est jamais une valeur qui déclenchera la clause default.

Déplacer l'instruction x=0; à la clause par défaut la laisserait atteindre 4 pour déclencher la valeur par défaut.