2017-10-14 2 views
-1

Hallo, ich beginne gerade mit der Programmierung in C++ mit meinem Arduino Uno. Jetzt möchte ich etwas wie eine lebendige Farbe machen. Ich mache das Schritt für Schritt und jetzt ist mein letztes Problem, dass die Lichter nicht ausgehen, wenn ich meinen nächsten Fall habe.C++ Schalter Fall, "Standard" funktioniert nicht

Der erste Teil ist nicht wirklich wichtig (ich weiß, es kann besser sein). Aber das Problem für mich ist im letzten Teil: default.

Ich hoffe, jemand wird mir erklären, was ich falsch mache, damit die Lichter nach jedem aufgehen, und ich kann die Helligkeit von jedem ändern, und vielleicht auch andere Vorschläge.

Sorry für mein schlechtes Englisch.

-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

Das Problem ist fast sicher im Code standardmäßig ausgeführt (d. H. In Ihrer 'analogWrite()' Funktion). Da dies keine Standardfunktion ist, kann Ihnen niemand helfen - es ist nicht so, dass Menschen telepathisch ableiten können, was eine unbekannte Funktion tun soll, und Fehler darin zu identifizieren. – Peter

+0

@Peter es ist eine Standard-Arduino-Funktion https://www.arduino.cc/en/Reference/AnalogWrite – Eelke

+0

@Eelke - Mit der Frage C++ markiert das OP die Aufmerksamkeit von C++ - Entwickler im Allgemeinen - nicht nur diejenigen, die wissen über Arduino - und erwarten, dass sie helfen können. Dies wird auch in der Art und Weise vorgeschlagen, wie die Frage gestellt wird - was bedeutet, dass das Problem in der Arbeit eines Sprachmerkmals ("switch"/"default") liegt. Wenn dies die Erwartung ist, ist es Aufgabe des OP, diese Behauptung zu begründen - d. H. Eine Überzeugung zu rechtfertigen, dass die Funktion korrekt aufgerufen wird, um die gewünschten Ergebnisse zu erzielen. Andernfalls sollte die Frage nicht mit C++ markiert sein. – Peter

Antwort

2

Sie Zurücksetzen x auf 0 im Fall 3 und dann ist es wieder ansteigt, bevor der Schalter und bevor es so nur Farbe Farbe zugewiesen bekommt die Werte 1,2 und 3 Es ist nie ein Wert, der die Standardklausel auslöst.

Das Verschieben der x=0;-Anweisung in die Standardklausel würde 4 erreichen, um den Standardwert auszulösen.