-2
我的Arduino控制着我的RGB-LED條,這有一個很大的問題。我可以控制藍色和綠色通道沒有任何問題(所有值從0-255都在工作),但我的紅色通道真的不想工作...我可以控制它,但它只會打開和關閉(0和255)但所有其他PWM頻率不起作用。它只會關閉LED。真奇怪的是,我可以消除這可能是因爲硬件故障而發生的,因爲當我開始一個新的草圖並命令Arduino(Nano)控制設置方法時,每個通道的每個值都像一個魅力...我是盲目的還是我的代碼有什麼問題。無法控制RGB條的顏色
我真的希望你們任何人都能幫助我。
#include <IRremote.h>
#include <EEPROM.h>
//Pins for RGB LEDs
#define rotPin 11 //redLED
#define gruenPin 6 // green LED
#define blauPin 9 // blue LED
//EEPROM 0=red, 1=green, 2=blue
int rVal, gVal, bVal;
boolean ersterStart = true;
//IR-recevier Stuff
const int RECV_PIN = A0; // Pin of the IR-Receiver
IRrecv irrecv(RECV_PIN); // defining of a receiver object
decode_results results; // variable for saving the IR-results
//IR-Codes for the IR transmitter
#define on 16236607
#define off 16203967
#define dunkler 16220287
#define heller 16187647
#define rot 16195807
#define gruen 16228447
#define blau 16212127
#define weiss 16244767
#define hellrot 16191727
#define orange 16199887
#define orangebraun 16189687
#define gelb 16197847
#define dunkelgrün 16224367
#define hellesdunkelgrün 16232527
#define hellgrün 16222327
#define tuerkis 16230487
#define dunkelblau 16208047
#define ultramarine 16216207
#define dunkelviolett 16206007
#define violett 16214167
#define flash 16240687
#define strobe 16248847
#define fadebtn 16238647
#define smooth 16246807
//Variables for Fading (fade())
byte r, g, b;
char farbe = 'b'; // letter for current color (Blue)
int fadePause = 8; // time for fading steps; smaller = faster, bigger = slower
int halteZeit = 500; // pause time between colors
unsigned long fadeZeit = 0; // variable for saving the current millis()
boolean ersterLauf = true; // needed to check if it's the first run of the program
boolean fadeOn = false; // defines if fademode should be turned on
void setup()
{
pinMode(rotPin, OUTPUT);
pinMode(gruenPin, OUTPUT);
pinMode(blauPin, OUTPUT);
ersterLauf=true;
irrecv.enableIRIn(); // initializes IR-receiver
Serial.begin(9600);
if(EEPROM.read(3)==1){
fadeOn=true;
}
else{
fadeOn=false;
}
if(fadeOn == false){
analogWrite(rotPin,EEPROM.read(0));
analogWrite(gruenPin,EEPROM.read(1));
analogWrite(blauPin,EEPROM.read(2));
}
}
void loop(){
if (irrecv.decode(&results)) {
//IR-basecodes
if(results.value == on){
analogWrite(rotPin, EEPROM.read(0));
analogWrite(gruenPin, EEPROM.read(1)); //load RGB values from EEPROM
analogWrite(blauPin, EEPROM.read(2));
irrecv.resume();
}
if(results.value == off){ //turns all LEDs off
analogWrite(rotPin,0);
analogWrite(gruenPin,0);
analogWrite(blauPin,0);
irrecv.resume();
}
if(results.value == weiss){ // turns on white color
analogWrite(rotPin,255);
analogWrite(gruenPin,255);
analogWrite(blauPin,255);
EEPROM.write(0,255);
EEPROM.write(1,255);
EEPROM.write(2,255);
irrecv.resume();
}
if(results.value == rot){ // turns on red color
analogWrite(rotPin,255);
analogWrite(gruenPin,0);
analogWrite(blauPin,0);
EEPROM.write(0,255);
EEPROM.write(1,0);
EEPROM.write(2,0);
irrecv.resume();
}
if(results.value == gruen){ // turns on green color
analogWrite(rotPin,0);
analogWrite(gruenPin,255);
analogWrite(blauPin,0);
EEPROM.write(0,0);
EEPROM.write(1,255);
EEPROM.write(2,0);
irrecv.resume();
}
if(results.value == blau){ // turns on blue color
analogWrite(rotPin,0);
analogWrite(gruenPin,0);
analogWrite(blauPin,255);
EEPROM.write(0,0);
EEPROM.write(1,0);
EEPROM.write(2,255);
irrecv.resume();
}
irrecv.resume();
}
if(Serial.available() > 0){
delay(500); // Serial Input Base-Code
if(Serial.peek() == 'r'){ //controls red color (not working properly)
Serial.read();
rVal = Serial.parseInt();
analogWrite(rotPin, rVal);
EEPROM.write(0, rVal);
}
if(Serial.peek() == 'g'){ //controls green color
Serial.read();
gVal = Serial.parseInt();
analogWrite(gruenPin, gVal);
EEPROM.write(1, gVal);
}
if(Serial.peek() == 'b'){ //controls blue color
Serial.read();
bVal = Serial.parseInt();
analogWrite(blauPin, bVal);
EEPROM.update(2, bVal);
}
if(Serial.peek() == 'f'){ //controls fading
Serial.read();
int fval = Serial.parseInt();
if(fval==1){
fadeOn = true;
}
if(fval==0){
fadeOn = false;
ersterLauf = true;
}
EEPROM.update(3,fval);
}
while(Serial.available() > 0){
Serial.read();
}
}
fade();
}
void fade(){ //fading function
// Blaue LED beim ersten Durchlauf einblenden
if (ersterLauf == true && millis()- fadeZeit > fadePause && fadeOn == true)
{
// Wenn b kleiner als 255 ist...
if (b < 255)
{
b++; // Zählt b um 1 hoch
analogWrite(blauPin, b); // Ausganbe von b am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn b bei 255 angekommen UND die halteZeit vergangen ist...
if (b == 255 && (millis()- fadeZeit) > (fadePause + halteZeit))
{
ersterLauf = false; // Erster Lauf ist abgeschlossen
}
}
// Wenn ersterLauf abgeschlossen ist UND fadePause vergangen ist...
if (ersterLauf == false && millis()- fadeZeit > fadePause && fadeOn == true && fadeOn == true)
{
// Wechsel von Blau zu Lila
if (farbe == 'b')
{
// Wenn r kleiner als 255 ist...
if (r < 255)
{
r++; // Zählt r um 1 hoch
analogWrite(rotPin, r); // Ausganbe von r am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn r bei 255 angekommen UND die halteZeit vergangen ist...
if (r == 255 && millis()- fadeZeit > fadePause + halteZeit)
{
farbe = 'l'; // Ändere Frabe auf "l" (Lila)
}
}
// Wechsel von Lila zu Rot
if (farbe == 'l')
{
// Wenn b größer als 0 ist...
if (b > 0)
{
b--; // Zählt b um 1 runter
analogWrite(blauPin, b); // Ausganbe von b am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn b bei 0 angekommen UND die halteZeit vergangen ist...
if (b == 0 && millis()- fadeZeit > fadePause + halteZeit && fadeOn == true)
{
farbe = 'r'; // Ändere Frabe auf "r" (Rot)
}
}
// Wechsel von Rot zu Gelb
if (farbe == 'r')
{
// Wenn g kleiner als 255 ist...
if (g < 255)
{
g++; // Zählt g um 1 hoch
analogWrite(gruenPin, g); // Ausganbe von g am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn g bei 255 angekommen UND die halteZeit vergangen ist...
if (g == 255 && millis()- fadeZeit > fadePause + halteZeit && fadeOn == true)
{
farbe = 'y'; // Ändere Frabe auf "y" (Gelb)
}
}
// Wechsel von Gelb zu Gruen
if (farbe == 'y')
{
// Wenn r größer als 0 ist...
if (r > 0)
{
r--; // Zählt r um 1 runter
analogWrite(rotPin, r); // Ausganbe von r am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn r bei 0 angekommen UND die halteZeit vergangen ist...
if (r == 0 && millis()- fadeZeit > fadePause + halteZeit && fadeOn == true)
{
farbe = 'g'; // Ändere Frabe auf "g" (Grün)
}
}
// Wechsel von Gruen zu Petrol
if (farbe == 'g')
{
// Wenn b kleiner als 255 ist...
if (b < 255)
{
b++; // Zählt b um 1 hoch
analogWrite(blauPin, b); // Ausganbe von b am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn b bei 255 angekommen UND die halteZeit vergangen ist...
if (b == 255 && millis()- fadeZeit > fadePause + halteZeit && fadeOn == true)
{
farbe = 'p'; // Ändere Frabe auf "p" (Petrol)
}
}
// Wechsel von Petrol zu Blau
if (farbe == 'p')
{
// Wenn g größer als 0 ist...
if (g > 0)
{
g--; // Zählt g um 1 runter
analogWrite(gruenPin, g); // Ausganbe von g am LED Pin
fadeZeit = millis(); // Aktuelle Zeit speichern
}
// Wenn g bei 0 angekommen UND die halteZeit vergangen ist...
if (g == 0 && millis()- fadeZeit > fadePause + halteZeit && fadeOn == true)
{
farbe = 'b'; // Ändere Frabe auf "b" (Blau)
}
}
}
}
如果您切換紅色和藍色電纜會發生什麼?如果你打印'rVal',會發生什麼? –
如果我在藍色和紅色之間切換電纜,藍色通道停止按預期工作,當打印出rVal時,打印正確的值 – spipsi1
您是否嘗試使用不同的pwm引腳,而不是11? –