GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
KURUMI上のフルカラーLEDですが、RGBがそれぞれ22,23,24番ピンに接続され、SoftwarePWMでanalogWriteできたはずですが、V1.05で少し挙動がおかしいようです。
以下のコードはV1.04ではLEDが点滅しますが、V1.05では点きっぱなしになってしまいます。analogWriteの部分を245ではなく0で実行すれば点滅します(何故?)。
今回analogWriteの修正が入ったと思いますので、それ関連かと思いますが、よろしくお願い致します。
/*GR-KURUMI Sketch Template Version: V1.05*/#include <Arduino.h>
// Pin 22,23,24 are assigned to RGB LEDs.int led_red = 22; // LOW activeint led_green = 23; // LOW activeint led_blue = 24; // LOW active
// the setup routine runs once when you press reset:void setup() { //setPowerManagementMode(PM_STOP_MODE, 0, 1023); //Set CPU STOP_MODE in delay() //setOperationClockMode(CLK_LOW_SPEED_MODE); //Set CPU clock from 32MHz to 32.768kHz
// initialize the digital pin as an output. Serial.begin(9600); pinMode(led_red, OUTPUT); pinMode(led_green, OUTPUT); pinMode(led_blue, OUTPUT);
}
// the loop routine runs over and over again forever:void loop() { analogWrite(led_red, 245); analogWrite(led_green, 245); analogWrite(led_blue, 245); delay(500); // wait 500ms
analogWrite(led_red, 255); analogWrite(led_green, 255); analogWrite(led_blue, 255); delay(500); // wait 500ms}
岡宮さん
すいません、蒸し返すようなのですが、V1.06でもやはり挙動がおかしいように思います。
255の出力でLEDが消灯しません。また、255の直後に0を与えた時に、消灯されます。再度0を与えると完全点灯します。
255送信→わずかにLEDがついた状況
0送信→消灯
0送信→点灯した状況
1〜254に関しては、きちんと動いているように見受けられます。それらの値から0への遷移も、普通に行われます。
255を与えて消灯させる場合だけがおかしいように感じられます。
Fujitaさん、ご確認とご提案ありがとうございます。
そうですね、まず一瞬ピカはanalogWriteの中で_pinModeを呼び出したときにLOW出力してましたのでそうなっていました。
Arduinoのサンプルでは、analogWriteを呼ぶ前にpinModeでOUTPUTに指定しており、感覚的には不定のまま出力になるためいまいちなんですよね。
Fujitaさんの変更に関してですが、仕様的にpinModeで出力を固定化するのはどうでしょうね。たとえば
digitalWrite(22, HIGH);
pinMode(22, OUTPUT);
とした場合、ユーザの期待はHIGH出力だと思っているのですが、LOW出力になるということですよね。この辺についてご意見あればいただきたいです。
お疲れ様です。
添付のRLduino78_basic.cppを導入してみました。
自分の手元で全ての条件のテストができているとは思いませんが、自分の利用する範囲では問題が発生しないようです。
これまで発生していたような問題はなく、動いています。
また、ピカっとしない初期化についても承知いたしました。なるほどですね。これは即組み込みます。
ありがとうございました。
あと、本来はスレ違いですが、内蔵eepromなんですけど、現在のバージョンもnoInterupt()しないといけない状況でしょうか。
2KBの連続書き込みをしようと思うと猛烈に遅く、また割り込み入れられないのでシリアル出力などができないので、
プログレス表示などもできなくて、現在は諦めて外付けのI2CEEPROMを利用することにしてしまいました。
このへんも改善されるといいなぁ。別スレッド立てたほうが良ければこの件もあげます。
(v1.04での話です。前述のとおり外付けのEEPROMを使うことにしたので最近のバージョンでは試していません。)
おおっと、書き込みしようと思ってだらだらしてたら、いつの間にかスレが進行してた!
Fujitaさん、毎度毎度検証ありがとうございます。毎度、自分の検証の甘さを思い知るなぁ。
一度ライブラリの主要部分目を通したほうがいいのかしらん。
digitalWrite(22, HIGH); pinMode(22, OUTPUT); とした場合、ユーザの期待はHIGH出力だと思っているのですが、LOW出力になるということですよね。
digitalWrite(22, HIGH); pinMode(22, OUTPUT);
digitalWrite(pin, HIGH) と pinMode(pin, INPUT) を併用するとプルアップ入力になるという記述はArduino のリファレンスにはあるので、同等に pinMode(pin, OUTPUT) を設定する前に digitalWrite() を実行した場合の挙動はマニュアルに記述があれば良いと思います。Arduino 実機の動作がどうなのかは予め確認しておいたほうが良いでしょう。
今回提案させていただいたのは pinMode() の挙動を変えるということではなく、内部の _pinMode() の動作を拡張するということなので、ユーザに対する説明は現状と変わらずで良い筈です。
Fujitaさん、だいぶ間が空いてしまいました。
pinModeでのポート設定については、一旦保留としてポート設定はしない方向でV1.07としてアップしたいと思います。
スケッチリファレンスにはその辺、記載するようにしたいと思います。
1.04で動いていたanalogWriteが、1.09では動かなくなってしまいました。見た目ですが0を書いた時以外はちゃんと出力できていない?
なんでしょう?
chobichanさん、PWMが出力できる(3,5,6,9,10,11)以外を指定しているということはないですか?
昔Fujitaさんに教わった以下のイルミネーションはV1.09で最近やりました。5,6,10をRGBのLEDにつなげてます。
static double t = 0.0;
while(1){
analogWrite(5, int(255.0 * pow(0.5 - 0.49 * cos(t / 2.0), 2.0)));
analogWrite(6, int(255.0 * pow(0.5 - 0.49 * cos(t / 3.0), 2.0)));
analogWrite(10, int(255.0 * pow(0.5 - 0.49 * cos(t / 5.0), 2.0)));
t = fmod(t + (2 * M_PI / 1000 * 10), 60.0 * M_PI);
delay(1);
D3です
以下のもわっとLEDプログラムで試したのですが、3ピンのanalogWriteできました。でもV1.04で動いてV1.09で動かないのですよね。PWM以外に使用している機能を教えていただくことできますか?
// the setup routine runs once when you press reset:
void setup() {
// the loop routine runs over and over again forever:
void loop() {
for(int i = 0; i < 256; i++){
analogWrite(3, i);
delay(10);
基板上のフルカラLEDへのanalogWriteと競合する機能がリストアップされてると嬉しいです。
e2 studio V4とE1でのデバックが絶不調で、頻繁にデバッカーが落ちてしまうので、ちょっと訳がわからなくなっています。
基板上のフルカラLEDへのanalogWriteと競合する機能
D11 と D22~D24 のソフトウェア PWM で、タイマ割り込みにタイマ・アレイ・ユニットのチャネル 6 を使ってるだけで他との競合はない筈。
ただソフトウェア PWM の割り込み周期が 32kHz と結構高速なので、割り込み禁止を頻繁に行う処理をしながらではまともに機能しない可能性が大。
原因は判らないけれど、現象はanalogWriteのPWM値をまず0を書いてスタートさせないと、それ以降PWMを変更しても何も波形を出さない事が判った。
あと、今PWMの周波数を38Khzにしている。ただこれが影響しているかは怪しい。