然後一開始就遇到一個大麻煩,因為原本的Arduino UNO上就已經佔用了A0, A1, A2三個腳位擔任不同功能。接下來RGB就要用到A3, A4, A5。但是A4, A5會影響LCD顯示,試了幾次都失敗。後來齋戒沐浴後,問了阿簡大神,知道A4, A5雖然可以並聯一些sensor,但是不能用在可變電阻這種上面,所以就調整一下。把A1, A2 負責壓力和pH計的腳位移動到A4, A5,A0負責檔位調控, A1~A3就都給RGB燈泡了。
這個解決了就簡單了,就是讀取A1~A3的數值,用map縮成0-255,再讓D6, 9, 10輸出就行。然後再讓LCD.print出RGB的數值,就變成可以調控顏色的燈泡囉。
#include <Wire.h> // Arduino IDE 內建// LCD I2C Library,從這裡可以下載:// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads#include <LiquidCrystal_I2C.h>// Set the pins on the I2C chip used for LCD connections:// addr, en,rw,rs,d4,d5,d6,d7,bl,blpolLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址//以上是驅動LCD的部分#define LEDR 6 //定義輸出的腳位#define LEDG 9#define LEDB 1int potPinR = 1; //設定輸入訊號的腳位int potPinG = 2;int potPinB = 3;void setup() {Serial.begin(9600);pinMode(LEDR, OUTPUT);pinMode(LEDG, OUTPUT);pinMode(LEDB, OUTPUT);}int r = 0;int g = 0;int b = 0;void loop() {r = analogRead(potPinR);r = map(r, 0, 1023, 0, 255);analogWrite(LEDR, r);g = analogRead(potPinG);g = map(g, 0, 1000, 0, 255);analogWrite(LEDG, g);b = analogRead(potPinB);b = map(b, 0, 1023, 0, 255);analogWrite(LEDB, b);Serial.print("R= ");Serial.print(r);Serial.print(" G= ");Serial.print(g);Serial.print(" B= ");Serial.println(b);lcd.setCursor(0,0);lcd.print("R= ");lcd.print(r);lcd.print(" G= ");lcd.print(g);lcd.setCursor(0,1);lcd.print("B= ");lcd.print(b);}
沒有留言:
張貼留言