2007.7.28
pwm制御しているのだけど、メモ。
High:Lowで、Highの値を大きくするとクオリティ高くなると一瞬思う。
- try1
- 明るめ、3:1だと見やすい。(単位msec)
- 暗め、3:30だともうかなり醜い。
- try2
- 明るめ、10:1だと見やすい。
- 暗め、10:12の時点で醜い。
明るさ確認用プログラム
/* Blinking LED -> firefly
* ------------
*/
int ledPin = 10; // LED connected to digital pin 10
int i = 0;
int d = 15;
int PW1,PW2;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
PW1 = 3;
PW2 ++;
Serial.println(PW2);
for(i=0;i<=100;i++){
digitalWrite(ledPin, HIGH);// sets the LED on
delay(PW1);// waits for 10-PW (PW=1000 -> 1sec)
digitalWrite(ledPin, LOW);// sets the LED off
delay(PW2);
}
}
コメント
2007.7.27
値を処理し、LEDを制御するための、今までのとは違うアルゴリズムを思いついたので、それをやってみようと思う。
不安定なので絶対やらないが、LEDアナログ制御の方法メモ
(LED 明→暗/analogWright 1→255)
/*
* Code for cross-fading 3 LEDs, red, green and blue,
* or one tri-color LED, using PWM
* The program cross-fades slowly from red to green,
* green to blue, and blue to red
* The debugging code assumes Arduino 0004,
* as it uses the new Serial.begin()-style functions
* Clay Shirky <clay.shirky@nyu.edu> の、改版
*/
// Output
int redPin = 10;
int greenPin = 11;
int bluePin = 12;
// Program variables
int redVal = 255;
int greenVal = 1;
int blueVal = 1;
int i = 0;
int wait = 50;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
// Main program
void loop()
{
i += 1; // Increment counter
if (i < 255) // First phase of fades
{
redVal -= 1; // Red down
greenVal += 1; // Green up
blueVal = 1; // Blue low
}
else if (i < 509) // Second phase of fades
{
redVal = 1; // Red low
greenVal -= 1; // Green down
blueVal += 1; // Blue up
}
else if (i < 763) // Third phase of fades
{
redVal += 1; // Red up
greenVal = 1; // Green low
blueVal -= 1; // Blue down
}
else // Re-set the counter, and start the fades again
{
i = 0;
}
// Write current values to LED pins
analogWrite(redPin, redVal);
analogWrite(greenPin, greenVal);
analogWrite(bluePin, blueVal);
delay(wait);
Serial.println(redVal);
}
(LED 明→暗/digitalWright H1,L1 → H1,L20 → H0)
int ledPin = 10;
int previousMillis = 0;
int value = LOW;
int interval = 1000;
long i=0;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
// pwm操作
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1);
digitalWrite(ledPin, LOW); // sets the LED off
delay(5);
digitalWrite(ledPin, value);
}
で、実行してみたところ、ノイズは相変わらずだったけど、やばいくらいに操作性が高くなった!
コメント
2007.7.26
思い切って見切りをつけたのはいいが、良い解決策が思い浮かばない。
結局LED制御もマイコン使わないと駄目なんじゃ・・・とか思いつつ。
コメント
2007.7.24
思い切って、実装の方法を違う方法にしました。
なぜなら、プログラム実行速度の不安定さが解消されないから!
図7.24 プログラムの実行速度
■プログラム部分
平均取るforループ{
平均値計算
黄色LED制御
(1)点灯 or (2)消灯
赤、青色LED制御
(3)赤色LED点灯、青色LED消灯
(4)赤色LED消灯、青色LED点灯
}
平均値を使って、温度が上昇しているか下降しているか判断{
上昇していたらLED点灯(1)へ
下降していたらLED消灯(2)へ
}
平均値を使って最大値を計算
振幅幅が減少したら赤色LED点灯、青色LED消灯(3)へ
振幅幅が増加したら赤色LED消灯、青色LED点灯(4)へ
■プログラム部分
平均取るforループ{
平均値計算
}
平均値を使って、温度が上昇しているか下降しているか判断{
上昇していたらLED点灯(1)へ
下降していたらLED消灯(2)へ
}
平均値を使って最大値を計算
振幅幅が減少したら赤色LED点灯、青色LED消灯(3)へ
振幅幅が増加したら赤色LED消灯、青色LED点灯(4)へ
■実装部分
黄色LED制御
(1)点灯 or (2)消灯
赤、青色LED制御
(3)赤色LED点灯、青色LED消灯
(4)赤色LED消灯、青色LED点灯
コメント
today: -
yesterday: -
最終更新:2007年07月29日 00:57