Arduino

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

3
入力が変更されたときに関数を自動的に呼び出すことはできますか?
現在、私のスケッチでは、メインループを回るたびに入力ピンをチェックしています。変更を検出すると、カスタム関数を呼び出してそれに応答します。コードは次のとおりです(要点に合わせてトリミングされています)。 int pinValue = LOW; void pinChanged() { //... } void setup() { pinMode(2, INPUT); } void loop() { // Read current input int newValue = digitalRead(2); // Has the input changed? if (newValue != pinValue) { pinValue = newValue; pinChanged(); } } 残念ながら、これは入力の非常に短い変更(短いパルスなど)、特にloop()少しゆっくり実行している場合は常に適切に機能するとは限りません。 Arduinoに入力の変更を検出させ、関数を自動的に呼び出す方法はありますか?
21 pins  interrupt  isr 

4
EEPROMの実際の寿命は?
ATMELによると、EEPROMセルのセル寿命は1セルあたり約100,000書き込みサイクルです。これは実際にEEPROMが実際にどのように機能するのですか? セルの値を変更しない場合、これは寿命に影響しますか?たとえば0xFF、同じセルに何度も値を書き込むと、、などの書き込み0x00と0xFFは異なりますか?0x00
21 eeprom 


2
一部のピンのPWM周波数が異なるのはなぜですか?
のArduinoリファレンスにanalogWrite()よると、ほとんどのピンのPWM周波数は〜490 Hzです。ただし、Unoのピン5と6、およびLeonardoのピン3と11の場合は約980 Hzです。 なぜこれらが異なるのですか?それは意図的な設計機能ですか、それともハードウェアによって何らかの形で指示されていますか?

2
Arduino IDEの別のタブでクラスを宣言できないのはなぜですか?
私はコードをArduino IDEの2番目のタブに移動して、整理しやすくしました。最初は、関数を移動しようとしただけで、うまくいくように見えました。setup()メインタブの関数から関数を呼び出すことができ、コンパイルまたはアップロードに問題はありませんでした。 しかし、クラス全体を2番目のタブに入れようとしましたが、突然機能しなくなりました。例えば: タブ1: TestClass obj; void setup() { obj.init(); } void loop() { //... } タブ2: class TestClass { public: void init() { //... } }; これをコンパイルしようとすると、次のエラーが表示されました。 tab1:1: error: 'TestClass' does not name a type tab1.ino: In function 'void setup()': tab1:5: error: 'obj' was not declared in this scope …

3
クラスとオブジェクト:実際に使用する必要のあるファイルタイプはいくつですか?
C ++やCの経験はありませんが、C#のプログラミング方法を知っていて、Arduinoを学んでいます。私はスケッチを整理したいだけで、Arduino言語には限界がありますが、Arduinoプログラミングにはオブジェクト指向のアプローチが必要です。 だから私はあなたがコードを整理するためにあなたが次の方法(網羅的なリストではない)を持つことができることを見てきました: 単一の.inoファイル。 同じフォルダー内の複数の.inoファイル(IDEが呼び出して「タブ」のように表示するもの)。 同じフォルダーに.hおよび.cppファイルが含まれている.inoファイル。 上記と同じですが、ファイルはArduinoプログラムフォルダ内にインストールされたライブラリです。 次の方法も聞いたことがありますが、まだ機能していません。 同じ単一の.inoファイルでC ++スタイルのクラスを宣言します(聞いたことはありますが、動作することはありません-それは可能ですか?)。 [推奨されるアプローチ]クラスが宣言されている.cppファイルを含むが、.hファイルを使用しない(このアプローチが必要ですか? コードをよりパーティション化するためにクラスのみを使用したいことに注意してください。私のアプリケーションは、ボタン、LED、ブザーのみを含む、非常にシンプルなものでなければなりません。
20 programming  c++  class 

5
RAMを使いすぎています。これはどのように測定できますか?
私がプロジェクトで使用しているRAMの量を知りたいのですが、私が知る限り、実際にそれを実行する方法はありません(自分で計算して計算する以外に)。私はRAMが不足していると判断したかなり大きなプロジェクトの段階に到達しました。 セクションを追加すると、明確な理由もなく、コードのどこかですべての地獄が崩れるため、これを決定しました。私が#ifndef何か他のものを出したら、それは再び機能する。新しいコードにはプログラム的に問題はありません。 しばらくの間、使用可能なRAMの限界に近づいているのではないかと疑っていました。スタックを使いすぎているとは思いませんが(可能ですが)、実際に使用しているRAMの量を判断する最良の方法は何ですか? 調べて解決しようとすると、列挙型と構造体を取得するときに問題が発生します。どのくらいのメモリがかかりますか? 最初の編集:また、私は開始以来スケッチを非常に編集しました、これらは私が最初に得た実際の結果ではありませんが、私が今得ているものです。 text data bss dec hex filename 17554 844 449 18847 499f HA15_20140317w.cpp.elf 16316 694 409 17419 440b HA15_20140317w.cpp.elf 17346 790 426 18562 4882 HA15_20140317w.cpp.elf 最初の行(テキスト17554を含む)は多くの編集の後、機能していませんでしたが、2番目の行(テキスト16316を含む)は正常に機能しています。 編集:3行目には、すべての機能、シリアル読み取り、私の新しい関数などがあります。本質的にいくつかのグローバル変数を削除し、コードを複製しました。私はこれを言及しています(疑わしいとして)それはsaeごとのこのコードに関するものではなく、RAMの使用量に関するものでなければならないからです。これで元の質問「どのように最適に測定するか」に戻りますが、まだいくつかの答えをチェックしています。ありがとう。 上記の情報を実際にどのように解釈しますか? これまでのところ、私の理解は次のとおりです。 `TEXT` is program instruction memory `DATA` is variables (unitialised?) in program memory `BSS` is variables occupying RAM …
19 sram 

1
コードでArduino Unoをリセットする
Arduinoをコードから(つまり、スケッチ自体から)リセット(つまり、再起動)することは可能ですか?私はそれが特別な回路で可能であることを知っていますが、コードだけでそれを作る機会がありますか? 以下は私のコードであり、コメント//resetはリセットを強制する場所です。 #include <TrueRandom.h> int i; int randSeed; long randNumber; void setup(){ Serial.begin(9600); Serial.println("20 pseudo Zufallszahlen:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println(); //randomSeed(TrueRandom.random()); randSeed = analogRead (A0); randomSeed(randSeed); Serial.print("Der 'seed' Wert: "); Serial.println(randSeed); Serial.println(); Serial.println("20 Zufallszahlen mit analogem 'seed' Wert:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println("---------------------------"); Serial.println(); delay(500); //reset } void loop() …

1
ATtiny85:消費電力とクロック速度
短く簡単:内部クロックを使用して1 MHzおよび8 MHzで動作するATtiny85の消費電力はどれくらいですか?スリープモードを使用していません。 私は多くのグーグルを検索しましたが、これに関する情報を見つけることができません。バッテリ寿命を延ばすために1 MHzを使用する価値があるかどうかを知りたいので、お願いします。
19 power  attiny 

3
Arduinoプログラムは、rootとして実行した場合にのみ機能します
ルート(sudo)としてArduinoプログラムを実行すると、簡単なスケッチをアップロードできるようです。通常のユーザーとして実行したいと思います。誰もが以前に同じ問題に直面し、それを修正したことがありますか? ここから私が入手したものですlsusb: $ lsusb Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM) そして、Arduinoプログラムはそれをとして識別します/dev/ttyACM0。その権限は次のとおりです。 $ ls -l /dev/ttyACM0 crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0 以下はからの出力です id groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio), 30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev) 例からスケッチをアップロードすると、通常のユーザーとして次のエラーが発生します。 avrdude:stk500_recv(): programmer not responding どんな提案でも大歓迎です。

2
Arduino Pro Mini(3.3Vバージョン)入力電圧範囲/許容誤差
私はいくつかのArduino Pro Miniクローン(安価な中国製のもの)を持っていますが、12V電源(ファン電圧と同じ)でそれらに電力を供給したいです。Arduino Pro Mini仕様によると、RAWピンは3.35-12V(3.3Vモデル)を使用できます。実際には、これは12V PSUが低負荷でほとんど常に12Vを超えるため使用できないことを意味します。このボードの電圧レギュレーターは最大16Vの入力が可能であると読みました。負荷なしで15.1Vを読み取る安価な12V電源アダプターを接続しようとしましたが、arduinoクローンボード上のコンポーネントが実際に瞬時に爆発しました。このボードは、USBプログラマーから給電された場合でも動作するようです。焼損したコンポーネントは、VCC、RST、およびGNDピンのすぐ上にあります。 なぜこれが起こったのですか?損傷したのは何ですか?最も重要なことは、使用する安全な電圧レベルは何ですか?私はすでにいくつかの12Vスイッチング電源を持っていますが、それらを使用できなければ残念です。 溶液: 最終的には、不良なarduinoクローン、不良または低品質の電源アダプタ、またはボードのRAW入力ピンに接続する前に電源に電力を供給したという事実があったようです。マルチメータが起動時に最大30Vの電圧スパイクを記録しても、安価な12Vスイッチング電源は問題なく動作します。

4
通信プロトコルのベストプラクティスとパターン
2つのarduino間で使用されるシリアルプロトコルを設計するたびに、車輪を再発明しているように感じます。人々が従うベストプラクティスやパターンがあるのだろうか。この質問は実際のコードに関するものではなく、メッセージの形式に関するものです。 たとえば、arduinoに最初のLEDを3回点滅させるように指示したい場合、次のように送信します。 ^L1,F3\n '^':新しいコマンドを開始します 'L':コマンドを定義します(L:このコマンドをLEDに向けます) 「1」:最初のLEDをターゲット '、':コマンドラインセパレータ、このメッセージの新しい値 'F':Flashサブコマンド 「3」:3回(LEDを3回点滅) '\ n':コマンドを終了します 考え?通常、新しいシリアルプロトコルの作成方法を教えてください。arduino 1からarduino 2にクエリを送信してから応答を受信する場合はどうでしょうか?
19 serial 

2
loop()内の無限ループはより高速に実行されますか?
典型的なスケッチを書いているときloop()、Arduinoが実行されている限り、通常は繰り返し呼び出されることに依存しています。loop()ただし、関数の内外に移動すると、わずかなオーバーヘッドが発生します。 これを避けるには、おそらく次のような独自の無限ループを作成できます。 void loop() { while (true) { // do stuff... } } それはパフォーマンスを改善する実行可能な方法ですか?loop()戻らない場合、他の問題が発生しますか?

2
他のコンポーネント/デバイスがUnoに接続されているときにスケッチをアップロードできないのはなぜですか?
Arduino Uno(より具体的にはSainSmartクローン)を使用して、一連のLEDを順番に点滅させるかなり単純な回路を作成したかったのです。私はスケッチを書き、それはうまくコンパイルしました。その後、8個のLEDS +抵抗器をピン0から7に接続し、USB経由でUnoをコンピューターに接続しました。 過去にスケッチを正常にアップロードしたことがあるので、設定やドライバーなどが正しいと確信しています。ただし、今回スケッチをアップロードしようとしても、うまくいきませんでした。 Arduinoのピンに接続したものをすべて削除しようとしたところ、突然アップロードが再び機能しました。 なぜこれが起こるのですか?スケッチをアップロードするたびにボードからすべてを切断する必要があるということですか?

13
Arduino Nanoのアップロードでエラーが発生する:avrdude:stk500_recv():プログラマーが応答していません
スケッチをアップロードしようとしているArduino Nano(Sainsmart)があります。Arduino IDEでは、選択されたデバイスはでしたArduino Nano w/ ATmega328。 ただし、スケッチをアップロードするとエラーが発生します avrdude: stk500_recv(): programmer is not responding 両方のUSBポート(/dev/tty.usbserial&/dev/cu.usbserial)を試しましたが、同じエラーが続きます。ArduinoはUSBケーブルを介してMacbook Airに接続され、ArduinoのPWRLEDインジケータライトがオンになり、LインジケータLEDが点滅します。Arduino Unoへのアップロードに問題はありませんでした。 最新のFTDIドライバ(MAC OSX、x64の、v2.2.18、FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg)をインストールした後に再試行http://www.ftdichip.com/Drivers/VCP.htm。しかし、それは助けにはなりませんでした。 何が間違っていたのでしょうか?

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