1

私のarduinoコードに問題があります。私のコードには、LED の個々の色を変更する 3 つのポテンショメータと、赤、緑、青にフェードするボタンがあります (押すと 1 回循環し、保持すると連続して循環します)。以前は動いていたのですが、RGBの各値を表示する液晶画面を追加しようとしたら動かなくなってしまいました。私はそれが最善の方法で書かれていないことを知っています.Arduinoを手に入れたばかりで、慣れようとしているだけの実験的なコードです. プラグを差し込むと、LCD は一番上の行にすべて白い四角形を印刷し、LED は赤く青く点滅し、ボタンを押してもポットを回しても何も起こりません。コードは次のとおりです。

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int potPin1 = 14 ; // select the input pin for the potentiometer, ANALOG
int potPin2 = 15;
int potPin3 = 16; 

int potVal1 = 0; // variable to store the value coming from the sensor
int potVal2 = 0;
int potVal3 = 0; 

int ledPin1 = 6; // select the pin for the LED, PWM for analogWrite capability?
int ledPin2 = 9;
int ledPin3 = 10;

int buttonPin = 7;
int buttonState= LOW;

String printCycleVal1 = (""); //print values when cycling colors
String printCycleVal2 = ("");
String printCycleVal3 = ("");

String printVal1 = ("");//print values when not cycling colors
String printVal2 = ("");
String printVal3 = ("");

int val1 = 0; //values to store rgb colors in
int val2 = 0;
int val3 = 0;

void setup() 
{
  pinMode(potPin1, INPUT);
  pinMode(potPin2, INPUT);
  pinMode(potPin3, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin, INPUT);
  lcd.begin(2,16);
}

void loop()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("RGB Values: ");
  lcd.setCursor(0,1);

  potVal1 = analogRead(potPin1);
  val1 = map(potVal1, 0, 1023, 0, 255);
  analogWrite(ledPin1, val1);
  printVal1 += ("V1: ");
  printVal1 += (val1);
  printVal1 += (" | ");

  potVal2 = analogRead(potPin2);
  val2 = map(potVal2, 0, 1023, 0, 255);
  analogWrite(ledPin2, val2);
  printVal2 += ("V2: ");
  printVal2 += (val2);
  printVal2 += (" | ");

  potVal3 = analogRead(potPin3);
  val3 = map(potVal3, 0, 1023, 0, 255);
  analogWrite(ledPin3, val3);
  printVal3 = ("V3: ");
  printVal3 += (val3);

  buttonState = digitalRead(buttonPin);

  while (buttonState == HIGH)
    cycle();
}

void cycle() {
  setColourRgb(0, 0, 0);
  unsigned int rgbColour[3];

  // Start off with red.
  rgbColour[0] = 255;
  rgbColour[1] = 0;
  rgbColour[2] = 0;  

  // Choose the colours to increment and decrement.
  for (int decColour = 0; decColour < 3; decColour += 1) {
    int incColour = decColour == 2 ? 0 : decColour + 1;

    // cross-fade the two colours.
    for(int i = 0; i < 255; i += 1) {
      rgbColour[decColour] -= 1;
      rgbColour[incColour] += 1;

      setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("RGB Values: ");
      lcd.setCursor(0,1);

      printCycleVal1 += ("V1: ");
      printCycleVal1 += (rgbColour[0]);
      printCycleVal1 += (" | ");

      printCycleVal2 += ("V2: ");
      printCycleVal2 += (rgbColour[1]);
      printCycleVal2 += (" | ");

      printCycleVal3 += ("V3: ");
      printCycleVal3 += (rgbColour[2]);
      delay(5);
    }
    buttonState = LOW;   n
  }
}

void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) {
  analogWrite(ledPin1, red);
  analogWrite(ledPin2, green);
  analogWrite(ledPin3, blue);
}
4

0 に答える 0