Arduino

Arduinoと互換性のあるオープンソースのハードウェアおよびソフトウェアの開発者向けのQ&A

2
Arduinoの中断(ピン変更時)
割り込み関数を使用して、から受け取った値を配列に書き込みますdigitalRead()。 void setup() { Serial.begin(115200); attachInterrupt(0, test_func, CHANGE); } void test_func(){ if(digitalRead(pin)==HIGH){ test_array[x]=1; } else if(digitalRead(pin)==LOW){ test_array[x]=0; } x=x+1; } その問題は、印刷するときに、またはのtest_arrayような値があることです。111000 私が理解しているようにCHANGE、attachInterrupt()関数でオプションを使用する場合、データシーケンスは常に0101010101繰り返さないでください。 無線モジュールからのデータであるため、データは非常に速く変化します。
8 arduino-uno  c  isr 

3
PROGMEM:読み取りのためにフラッシュからRAMにデータをコピーする必要がありますか?
メモリ管理を理解するのが難しいです。 Arduinoのドキュメントによれば、文字列などの定数や、実行時に変更したくないものはプログラムメモリに保持することが可能です。私はそれをコードセグメントのどこかに埋め込んでいると考えています。これは、フォンノイマンアーキテクチャ内でかなり可能でなければなりません。そこからLCDのUIメニューを可能にしたい。 しかし、プログラムメモリからデータを読み取って出力するだけの命令には戸惑っています。 strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy. Serial.println( buffer ); アクセスする前に、どうしてコンテンツをRAMにコピーする必要があるのですか?そして、これが本当なら、すべてのコードはどうなりますか?実行前にRAMに読み込まれますか?コード(32kiB)は2kiB RAMだけでどのように処理されますか?フロッピーディスクを運ぶ小さなゴブリンはどこにいますか? そしてさらに興味深い:この式のようにリテラル定数に何が起こるか: a = 5*(10+7) 5、10、7をレジスタにロードする前に実際にRAMにコピーするのですか?信じられません。

3
複数の独立したLEDパターン
私は問題を抱えていますが、最初は(そしてArduinoを初めて使うのは)と思いましたが、Arduinoに最適なアプリケーションでした。しかし、それを実装しようとして失敗した後、私は自分自身を疑っています! 単に-私は多くのLEDを個別に制御する必要があります。それらの多くは独自のパターンを持っています-たとえば、「5秒オン-5秒オフ」。「連続点滅」-または「2回点滅、一時停止、1回点滅」などのシーケンス。明らかにスレッドの贅沢がなければ、私は少し行き詰まっています。a)Arduinoが最良の選択であり、b)もしそうである場合、どうすればこれに対処できますか? 前もって感謝します :)

5
スタックメモリは関数とローカル変数にどのように使用されますか?
一部の値をEEPROMに保存し、いくつかの変数宣言を回避してSRAMを解放したかったのですが、EEPROMメモリはバイト単位です。 int値を格納する場合は、いくつかの式を繰り返し使用する必要があります。それらのためにいくつかの機能を作りたいと思いました。しかし、関数を作成してもSRAMメモリを占有するのではないかと心配しています。EEPROMを使用する代わりにint変数を宣言した方がよいでしょう。 関数とローカル変数はSRAMにどのように保存されますか?フラッシュメモリーからの関数ポインターのアドレスのみを保存しますか、それともすべての変数とコマンドがスタックに保存されますか?

1
Arduino UnoにデジタルPWMピンが6つしかない場合、最大12のサーボをどのようにサポートできますか?
よると、この: サーボライブラリは、ほとんどのArduinoボードで最大12モーター、Arduino Megaで最大48モーターをサポートします。Mega以外のボードでは、ライブラリを使用すると、ピンにサーボがあるかどうかに関係なく、ピン9および10のanalogWrite()(PWM)機能が無効になります。Megaでは、PWM機能を妨げることなく最大12個のサーボを使用できます。12〜23個のモーターを使用すると、ピン11および12のPWMが無効になります。 しかし、によると、この: デジタルI / Oピン14(そのうち6つはPWM出力を提供) では、PWM出力を提供できるデジタルI / Oピンが6つしかない場合、Unoは6つ以上のサーボをどのように制御できますか?

4
Arduino Severinoはどのタイプのシリアル通信用に設計されていますか?
Arduinoは、どこから来たのか(Raspberry PIの価格の2/3)かなり高くつくため、Arduino Severinoクローンを作成しました。 私は、RS-232 Usb-Serialコンバーターを備えたデバイスを使用していました。しかし、しばらくすると、デバイスが機能しなくなりました。私の友人は、RS-232通信が+6から-6 Vの範囲(+3と-3ボルトのしきい値で)であるという点を思いつきました。 そこで、代わりに0〜5ボルトを使用するFT232を試しました。私は少しだけ持っています中国人 そのために設計されたFTDIチップ: ただし、接続後、予期しない動作をします。(PCがクラッシュし、通信LEDの1つが常にオンになっている...)Arduinoボードが別の理由で破損している可能性があることに気付きました(偶発的な短絡の可能性が非常に高いです)。 それで、この「Arduino」はどのタイプのコミュニケーションのために設計されたのですか?
8 serial 

3
マンチェスター図書館はAttiny85のためにコンパイルされません
Attiny85を使用してワイヤレスセンサーを作成しています。arduino unoにデータを送信したいので、315 MHzのRFリンクキットをSpark Funから購入しました。Attiny85にはTXがないため、マンチェスターライブラリを使用することにしましたが、Attiny85ではコンパイルできません。 私はこのブログの手順に従いました:http : //mchr3k-arduino.blogspot.mx/2012/01/wireless-sensor-node-part-2.html?showComment=1338749638806#c853067277980266192 これが私が使用しているコードです: #include <WProgram.h> //otherwise it says it can't find Arduino.h #include <Manchester.h> //include the library to comunicate #define TxPin 2 //the pin that is used to send data int sensorPin = 4; int ledPin = 3; int count = 50; void setup(){ pinMode …

1
最初のライブラリの作成-シリアルストリームオブジェクト
私はArduinoでかなりの数のプロジェクトを実行しましたが、Cで「Hello World」以上のことをしたことがありません。最初のライブラリを書いています。多くのオブジェクト指向のものが頭を悩ませています。とにかく、私のライブラリは想定どおりに機能しています。浮動小数点数を関数に渡し、適切にフォーマットしてシリアル経由で送信します。しかし、私はそれを不格好な方法で実装しました。ArduinoのAPIスタイルガイドは、はるかに良いと思われる方法を言及します: シリアル通信を使用する場合、ユーザーが「シリアル」をハードコーディングするのではなく、任意のStreamオブジェクトを指定できるようにします。これにより、ライブラリはMegaおよびDueのすべてのシリアルポートと互換性があり、SoftwareSerialなどの代替インターフェイスを使用することもできます。Streamオブジェクトは、ライブラリのコンストラクターまたはbegin()関数に(ポインターではなく参照として)渡すことができます。各アプローチの例については、Firmata 2.3またはXBee 0.4を参照してください。 誰でもこれを行う方法について詳しく説明したり、コードを見せたりできますか?
8 serial  c++  library 

1
5vボードで3.3vチップをプログラムできますか?
先ほどGertboardを購入しましたが、搭載されている機能の1つがATMega328(DIP)です。ただし、GertboardはRaspberry Piで使用するように設計されているため、3.3vでのみ動作するため、クロック速度は約12MHzに制限されます。 ただし、Raspberry Piを介してプログラミングするのはかなり面倒です。代わりに、チップをArduino Unoボードに転送して、デスクトップPCからスケッチをアップロードできるようにします。次に、それを通常の操作のためにGertboardに戻します。 問題は、私のUnoがより一般的な5v / 16MHzで動作することです。 これを試みても安全ですか?IDEで構成を変更して、異なるクロック速度を考慮するように指示する必要がありますか?

2
UIボタンが遅延していると認識される前に、どれくらいの頻度でUIボタンをポーリングする必要がありますか?
ピン変更割り込みを使用してボタンの状態を読み取ることは可能であり、望ましい場合もありますが、でボタンの状態をポーリングする方が簡単loop()です。これは一般的に使用される手法です。 あなたがいる場合loop()に迅速に十分な実行、その後、ボタンの押下を常にキャッチしようとしていると、ユーザーは任意の遅延または遅れを知覚することはできません。 ループに時間がかかりすぎて、遅延または遅延が認識される可能性があります。 問題は、ユーザーがこれを見るまでに、通常、どれくらいの時間がかかるかということです。
8 button  ui 

1
Arduino、Stino、または別のIDE /ツールチェーンが使用されているかどうかを検出する方法はありますか?
Arduino IDEとStinoの間にいくつかのイライラする違いがあることに気づきました(主に特定のヘッダーファイルのインクルード周辺)。これらはおそらくいずれかまたは両方のパーティーでフォローアップが必要なバグですが、それまでの間、コードを編集せずに両方でコンパイルできるようにしたいと考えています。これは、コードを使用できないようにユーザーをロックしたくないためです。 すぐに利用できる(ツールチェーンやIDEを変更する必要がないなど)マクロを使用して、使用中のマクロを検出できますか? たとえば、多くのライブラリには次のスニペットがあります。 #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif しかし、StinoとArduinoの両方がこれを定義しています。
8 ide  build 

2
pulseIn()のタイミングはどのくらい正確ですか?
pulseIn()PWMベースのバイナリデータエンコーディングを処理する関数を使用しています。これは、長さが大きく異なるパルス、たとえば500usと1500usを区別するのに適しています。これは、典型的なIRリモコンの処理には十分すぎるほどです。 しかし、2つ以上のパルス長を使用できる独自のIRシステムを作成して、データ転送をより高速に実行できるようにしたいと考えています。理想的には、8進エンコーディングに8つの異なるパルス長を使用したい(例:200us、400us、600usなど)。 pulseIn()ただし、返される値にはかなりのばらつきがあることに気付きました(+/- 10%)。少なくとも一部はIRトランスミッターおよびレシーバーモジュールによって導入されると思いますが、それを確認するのに十分な設備がありません。 その外部エラーを軽減できると仮定すると、そのpulseIn()ような同様のパルスを区別するのに十分正確である可能性がありますか?
8 pwm  pulsein  timing 

3
グローブシールドなしのグローブセンサー
Groveシステムには、さまざまなセンサーが存在します。通常、これらは特別なシールド(グローブベースシールド)を介してアクセスされます。 シールドなしでこれらのセンサーに直接アクセスできますか?特に、Arduino Pro Miniで使用することに興味があります。私の推測では、間違いなく5VバージョンのMiniが必要ですが、これ以外はどうでしょうか。これらのセンサーを直接使用するのはどれほど厄介ですか? グローブダストセンサーの使用に興味がありますが、グローブ4桁ディスプレイも操作したいです。
8 sensors 

2
変化する電圧をArduinoに読み込む
使用Arduinoのナノ及び変流器(CT)を、私は120 V 60Hzの線に流れる電流を検出しようとしています。 回路 CTは0-1 Vその仕様に従って出力します。この出力はバイアスされていますAREF/2= 2.5V。 analogRead 価値観 x軸はADCサンプルのインデックス番号を表し、y軸はADC値(0〜1024)を表します。サンプリングレートは約9 kHzです。ピーク間差は約1026サンプルです。 この波形はCTに期待するものですか?値が連続的に変化するのではなく、値が平坦な領域があるのはなぜですか? さらに、プロットの曲線部分を見ると、Arduinoが512上下の値を512交互に読み取っているのはなぜですか?なお、上記の値を読み出し、512以下、値、512その値以上の、512など。 analogReadセットアップにかかった時間は110マイクロ秒と測定され、波形のピーク間に1026個のサンプルがあります。つまり、60 Hzのラインを検出しているので60のピークが予想されますが、1秒間に約9のピークが存在することになります。これから何を作りますか?コンデンサーC1が回路にありますが、これと関係がありますか? これらのanalogRead値は、RMS電圧を計算するために使用するのに適していますか?これの最終的な目標は、ワイヤを流れるRMS電流を決定した後で電力使用量を計算することです。 プロットの値を取得するために使用されるスケッチ void setup() { Serial.begin(9600); } void loop() { double sensorValue = analogRead(1); Serial.println(sensorValue) } analogReadバンプ領域の実際のデータポイント 487 534 487 535 488 537 484 536 487 538 486 536 484 540 484 539 485 540 483 …

1
SainSmart UnoクローンのSVGピンは何ですか?
Arduino Uno R3と互換性のあるSainSmartクローンボードを購入しました。各標準IOピンに加えて、3つの追加ピン(オス)の列があります。それらは、S、V、およびGとマークされた列に配置されます。 彼らはこの画像で見ることができます: それらのほとんどは、SainSmartおよびUNOロゴのすぐ上にあります。アナログピンに対応するSVGピンは、マイクロプロセッサのすぐ下にあります。 これらのピンは何のためのものですか?これは一部のアプリケーションの標準形式ですか、それともSainSmartに固有の形式ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.