問題タブ [arduino]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - iPhoneのハードウェアを作る
EAAccessory や bros を通じて iPhone と連携するハードウェア デバイスを活用するソフトウェアを構築しているという事実については、かなり明確です。
不明な点 Arduino プロジェクトを iPhone に接続する場合、ハードウェア仕様はどこで入手できますか?
c++ - Arduino と C++ を使用した文字列操作
C++ で文字列を操作しようとしています。私はArduinoボードで作業しているため、使用できるものが限られています。私はまだC ++も学んでいます(愚かな質問で申し訳ありません)
ここで私がしなければならないことは次のとおりです。時速マイルを 7 セグメント ディスプレイに送信する必要があります。したがって、17.812345 などの数値がある場合は、7 セグメント ディスプレイに 17.8 を表示する必要があります。最も効率的な方法と思われるのは、最初に 10 を掛けて (これは小数点を 1 桁右にシフトすることです)、次に 178.12345 を int にキャストします (小数点を切り取ります)。私が立ち往生している部分は、分解する方法です 178.Pythonでは文字列をスライスできましたが、C++でこれを行う方法について何も見つかりません(または、少なくとも、検索する適切な用語が見つかりません)為に)
4 つの 7 セグメント ディスプレイと 1 つの 7 セグメント ディスプレイ コントローラーがあります。時速 10 分の 1 マイルまで測定できます。あなたが私に提供できる援助と情報をありがとう。
c++ - C++は「このスコープで宣言されていません」コンパイルエラーと変更のヒント
Arduino Megaで動作するように、このコードを変更しようとしています。私はCにかなり慣れていないので、いくつかの大きな間違いを犯した可能性があります。ちなみに、これはバランススクーター用です。:P
このコードはATmega32から取得されます(from:[url = http://sites.google.com/site/onewheeledselfbalancing/Home/twin-wheel-self-balancing-skateboard-lightweight-version/code4 ] http:// sites .google.com / site / onewheeledsel ... t-version / code4[/url] そして私はそれをArduinoMegaで動作させようとしています。
このコードはATmega32開発ボード用に書かれました http://www.active-robots.com/products/controllr/m32db.shtml
ありがとうございました!
これが私が遭遇する最初のエラーです:
関数'voidtimer_init()':エラー:'TCCR0'はこのスコープで宣言されていません関数'int main()':
誰かが私に何が悪いのか説明してもらえますか?私はプログラミングの初心者ですが、たくさんの本やウェブサイトを読んだことがあり、私も速く学んでいます!^^そしてここに完全なコードがあります(かなり長いです):
CLOCK_SPEED16000000を定義します
OCR1_MAX1023を定義します
typedef unsigned char u8; void set_motor_idle(void); void InitPorts(void); フロートレベル=0; float Throttle_pedal; フロートaa; フロートアクセラウ; float x_acc; フロートアキュム; float x_accdeg;
フロートジャイロサム;
float gangleratedeg; フロートgangleraterads; float ti = 2.2;
フロート全体ゲイン; フロートゲインコントロール; フロートバッテリーボルト=24; フロートジャイロアングルdt; フロート角度; フロートアングルラッド; float balance_torque; フロートソフトスタート;
float cur_speed; float cycle_time = 0.0064; float Balance_point; float a0、a1、a2、a3、a4、a5、a6;//加速度計のSavitzky-Golay変数
int i; int j; int tipstart; void InitPorts(void){PORTC = 0x00; // DDRC = 0xFFで開始するためにポートCプルアップを低(出力電圧なし)に設定。//ポートCピンはすべてポートC方向レジスタを介して出力として設定されます//PORTC| =(1 <
DDRA = 0x00; //入力として設定されたすべてのポートAピンPORTA=0x00; //ポートAの入力プルアップが低プルアップに設定されている
DDRD = 0xFF; // OCR1A(PinD5)およびOCR1B(Pin D4)が正しく機能するための前提条件として、すべてのポートDピンを出力として構成します
PORTB = 0x00; //ポートBのプルアップを低(出力電圧なし)に設定して、DDRB=0xFFで開始します。//すべてのポートBピンを出力に設定
} / * IO:外部水晶クロックでATMega3216MHzを使用しています。OSMCモーターコントローラーPC4オンボードLEDPD5/ OC1AALI->OSMCピン6PD4/ OC1BBLI->OSMCピン8PC1無効->OSMCピン4PC2BHI->OSMCピン7PC3AHI->OSMCピン5への新しい計画されたピン配置PA6 / ADC6 Vbatt /10->OSMCピン3PA1/ADC1ピッチレートジャイロPA0/ADC0加速度計 /voidadc_init(void){//使用しないのでアナログコンパレータをオフにする /ACSR =(1 << ACD); / PA0 / ADMUX=0を選択します。ADMUX | =(1 <ADCプリスケーラを128に設定し、ADCを有効にして、変換を開始します/ ADCSRA = 0 |(1</偽の最初の変換が終了するまで待ちます*/ while(ADCSRA&(1 <<
uint16_t adc_read(uint8_t channel){
/*チャネルを選択/ADMUX=チャネル; ADMUX | =(1<変換の開始/
ADCSRA | =(1 << ADSC);/変換が終了するまで待つ/while(ADCSRA&(1 << ADSC)){}/結果を返す*/ADCWを返す;}/ * 156サイクル/秒、6.4ms/サイクルOSCILLOSCOPEで測定*/ / *すべてのADC入力を読み取り、変換を実行* / void sample_inputs(void){
=(float)adc0; for(j = 0; j <7; j ++){adc1 = adc_read(1); //ジャイロピンPA1gyrosum=(float)gyrosum + adc1; //ジャイロのループごとに平均7つのサンプルを使用して、プログラムの各ループで完全な更新を取得します}
位置PA2*/ adc3 = adc_read(3); /*ポジションレバーを引き戻した位置PA3*/ adc4 = adc_read(4); /*Throttle_pedalの位置PA4*/ adc5 = adc_read(5); /*位置レバーを前方に押して位置PA5*/ // adc6 = adc_read(6); / * OSMCからのVbatt入力(現在は使用されていません)位置PA6 *///加速のみのSavGolayフィルターa0=a1; a1 = a2; a2 = a3; a3 = a4; a4 = a5; a5 = a6; a6 =(float)accelraw; accsum =(float)((-2 * a0)+(3 * a1)+(6 * a2)+(7 * a3)+(6 * a4)+(3 * a5)+(-2 * a6)) / 21; //SavGolayの計算
//電圧スパイクを滑らかにし、範囲を0〜3にしますThrottle_pedal =(float)Throttle_pedal * 0.9 + 0.1 * adc4 / 341; //電圧スパイクを滑らかにし、範囲を0〜3にします
//デッドマンボタンが離された場合にモーターをカットします//(gaincontrol変数もこのボタンを介してadc2に配線されますif(adc2 <100){Throttle_pedal = 0.001; gaincontrol = 0.001;} totalgain = gaincontrol * softstart; //レバーが後ろに引っ張られたり、前に押されたり、何もしなかった場合の対処方法:Balance_point = 514; if(adc3> 100)Balance_point = 534;
if(adc5> 100)Balance_point = 494;
オシロスコープでループ時間を測定する
/ ACCELEROMETER信号処理//オフセットの減算/ x_acc=(float)accsum-Balance_point; // accsumは加速度計のSG値であり、真の「合計」ではないため、7で割る必要はありませんif(x_acc <-250)x_acc = -250; //加速値を-250〜 + 250の範囲に制限します(片道80度傾斜)if(x_acc> 250)x_acc = 250; / *加速度計の角度変化は、0〜30度(正弦波)の範囲で1度の傾斜あたり約3.45単位です。傾斜を加速度センサーからの傾斜度に変換します。正弦角=おおよそ=小さな角度の角度なので、三角法を実行する必要はありません。以下のx_accはDEGREES*/になりました
x_accdeg =(float)x_acc / -3.45; //マイナス記号は、後ろから前への加速度計の取り付けを修正します!
つまり、必要なゼロ点は、読み取り値から512*/を引いた値になります。
/データシートからの毎秒20mVのジャイロ角度の変化は毎秒4.096単位(0〜1023のスケールで)の変化を与えます角度の変化これはジャイロ角度の変化率を最大速度よりわずかに小さく制限します実際に測定可能(100度/秒)。これらの小数部はすべて、PWMジェネレーターに送信される直前に整数に切り上げられ、PWMジェネレーターはモーターコントローラーに接続されます/ gangleratedeg =(float)((gyrosum / 7)-508)/4.096; //ジャイロサムは7つのサンプルのグループの合計であるため、ジャイロ値を7で割るとif(gangleratedeg <-92)gangleratedeg = -92; if(gangleratedeg
92)gangleratedeg = 92 /メインプログラムサイクルごとに1回ポートB2のオンとオフを切り替えて、オシロスコープを接続してプログラムサイクルタイムを計算できるようにします。サイクルタイムを使用して、サイクルごとのジャイロ角度の変化を計算します。この時間間隔の長さを知る/PORTB&=(0 <
/ tiは、「i」または積分係数(現在は2.2)のスケーリングを表します。ジャイロアングルdtは、ジャイロセンサーからの度数で表した最後のCYCLE以降の角度変化です。ここで、tiはスケーリング係数です(理論的には約1である必要がありますが、2.2はボードをよりタイトに感じさせます
)現在、度/秒の単位でaaは時定数を変化させます。つまり、aa値が小さいほど、ジャイロドリフトをゆっくりと補正するため、加速度計の時定数が長くなります。aa = 0.005; gyroangledt =(float)ti cycle_time gangleratedeg;
gangleraterads =(float)gangleratedeg * 0.017453;/ DEGREESの新しい角度は、古い角度に最後のサイクル以降のジャイロからの角度の変化を加えたもので、新しい加速度の読み取り値が少し考慮されています/ angle =(float)((1-aa)*(angle + gyroangledt))+(aa * x_accdeg ); //主な角度計算関数*///角度を度からラジアンに変換
+(0.5 * gangleraterads);
cur_speed =(float)(cur_speed +(Throttle_pedal * balance_torque * cycle_time))* 0.999;
/ *レベル値は-1から+1で、モーターに送信されるデューティサイクルを表します。ラジアンに変換すると、これらの制限内にとどまることができます。レベル=(balance_torque + cur_speed)*全体的なゲイン;
}
void timer_init(){TCCR0 = 0 | (1 <
//PWMモードは「PWM、位相補正、10ビット」ですTCCR1A = 0 | (1 <
(1 <
void set_motor()
/ * leveli項は、OSMCに接続されているPWMモーター制御ポートに送信する準備ができている整数として-1023から+1023に再スケーリングされたレベル項です* / {
// if(level <-0.9)level = -0.9;//適切な制限内にあることを確認します//if(level> 0.9)level = 0.9;
int16_t leveli =(int16_t)(level * 1023); //ここで、「level」の浮動小数点値を取得し、それを1023で乗算してから整数にした後、値を「leveli」としてPWMジェネレーターにフィードします。
if(leveli <-1020)leveli =-1020; //(leveli> 1020)leveli = 1020;の場合、ボードから突然スローされたくないので、適切なPWM制限内にあることを再確認します。
/ポートB1にLEDまたはブザーを設定して、供給されるトルクが可能な最大値の50%を超える場合は、速度を落とすように警告します。この理由は、速度で前方に転倒し始めた場合に備えて、常に予備のモーター電力が必要になるためです。モーターはすでにフラットアウトで動作しているので、高速で転倒する可能性があります。自動チップバックルーチンを使用して、最高速度を自動的に制限するものもあります。今のところ私はこのように簡単にやります/
if(level <-0.7 || level> 0.7){
PORTB | =(1 <PORTB&=(0 <softstart =(float)softstart + 0.001; if(softstart> 1.0)softstart = 1.0;
OSMCが機能し、両方がOFFになってモーターがシャットダウンする/ *注:理由はわかりませんが、AHIとBHIを+12Vに配線するために最後に行った方向変更でモーターの切断を停止する//PinC1を設定してOSMCを無効にしない出力をゼロにすると、1はOSMC * / PORTC |=0x0cを無効にします。// C1をプルダウンして、OSMCの無効化を解除します。つまり、有効にします。PORTC&=〜0x02; //無効はオフですif(leveli <0){OCR1A = -leveli; // leveli変数は負の符号付きの値であるため、ALIはPWMで逆方向に進みます。ここでは、マイナス記号を保持してください。OCR1B = 0; // BLI = 0} else {OCR1A = 0; // leveli変数は正の符号付きの値であるため、ALI=0以降OCR1B=leveli; //BLIはPWMです}}
int main(void){InitPorts();
adc_init();
timer_init();
/ *初期傾斜開始コードボードを片側に傾けた状態でマイクロをオンにします。傾斜角度がゼロ(中間)ポイントバランスアルゴリズムを超えると、ライダーはマイクロをオンにします。それ以外の場合は、水平位置に傾斜するまでこのループに永久にロックされます。ライダーがボードに乗るとき*/tipstart = 0; accelraw = 0;
while(tipstart <1){
//これは、accsumの値を確認する前に、最初にマシンの電源を入れたときにSGフィルターが適切な安定した値になるようにするために必要です(以下)。
for(i = 0; i <20; i ++){
sample_inputs();
}if(accsum <504 || accsum> 524){//
if(x_accdeg> 0){tipstart = 0; } else {tipstart = 1;
softstart = 0.4; }}角度=0; cur_speed = 0; /*チルト開始コードの終わり。このポイントを超えると、マシンは水平になり、アクティブになります* /
sei();
while(1){sample_inputs();
set_motor();
}}
c - AVR ATmega32 と Arduino Mega のコーディングの主な違いは何ですか?
Arduino Megaで動作させるために、このコードを変更しようとしています。私はCにかなり慣れていないので、いくつかの大きな間違いを犯した可能性があります。ちなみに、これはセルフバランススケートボード用です。
このコードは ATmega32 (ここから) から取得したもので、Arduino Mega で動作させようとしています。
このコードはATmega32 開発ボード用に書かれています。
私はいくつかの変更を行いました(いくつかの間違いを修正しました)が、最後に遭遇しました:
関数 'int main()':
エラー: 'int main() の再定義
完全なコードは次のとおりです。
qt - マシンのシリアル ポートを一覧表示する
USB経由で接続するArduinoベースのデバイスがあります。
QExtSerialPort
プラグインされているときに、Qt 4 アプリケーションから (または必要に応じて) 使用して検出したいと思います。
これが不可能な場合は、どうにかしてシステムのポート名のリストを取得し、Arduino を検索してそれらすべてを試すことができると考えました (ここで、Arduino を正しく検出するための何らかのハンドシェイク手順を実装します)。このアプローチに関する私の懸念は、異なるボー レートである種のハンドシェイク ack を送信した場合に、デバイス (たとえば、プリンター) が破損するかどうかわからないことです。
そのため、どこから始めればよいかわかりません。どちらが最善のアプローチでしょうか? どうすれば実装できますか?
c++ - Arduino Web クライアント クラスが機能しない
インターネットから HTML ページを取得するために Arduino クライアント クラスを使用しようとしています (Arduino ライブラリ自体からの例) が、機能していません (接続が確立されていません)。
失敗しています:
Ethernet と Ethernet2 ライブラリの両方を試しました。
私のArduino開発プラットフォームのバージョンは0017で、OSはWindows XPです。
以下は私のコードと構成のインラインです:
java - JavaRXTXとArduino間のシリアル通信
シリアルポートを使用して、PC(NetbeansとRXTXを使用するWindows 7)とArduinoProの間で通信しようとしています。Arduinoは実際にはFTDIケーブルを使用してPCに接続されています。
このコードは、ここにあるJavaSimpleRead.Javaに基づいています。
現在、Arduinoは起動時に文字列を出力するだけです。私のJavaプログラムは、読み取られたバイト数を出力してから、内容を出力する必要があります。Javaプログラムは動作します。
文字列が長い場合(> 10バイト程度)、出力は分割されます。
したがって、Arduinoで印刷する場合
私のJavaプログラムの出力は次のようになります。
また
デバッガーを使用して手動でコードを実行すると、結果の文字列は常に本来あるべき状態、つまり1つの20バイト文字列になるため、タイミングの問題だと思います。
私はいろいろなことをいじっていますが、問題を解決することができませんでした。
これが私に問題を与えているコードの部分です:
c - コードを ATmega32 から Arduino Mega に変更 - 関数「main」にエラーがありません
Arduino Megaで動作させるために、このコードを変更しようとしています。私はCにかなり慣れていないので、いくつかの大きな間違いを犯した可能性があります。ちなみに、これはセルフバランススケートボード用です。
このコードは ATmega32 から取得したものです (ここから、 Arduino Megaで動作させようとしています)。
このコードはATmega32 開発ボード用に書かれています。
しかし、私はこのエラーが発生します:
o:機能
main':</br> C:\Users\*******\AppData\Local\Temp\build27006.tmp/Test2.cpp:406:</br> undefined reference to
設定中'
どうして?ここには参照さえありませんsetup
!
これが私のコードです:
ところで、私はArduinoコンパイラを使用しています( Arduinoソフトウェアのダウンロードで見つけることができます)。
c++ - Arduino用のライブラリの作成
Arduino(ヘッダーファイルとクラスファイル)用のライブラリを作成したいのですが、このジョブに使用するツールと、それらをテストおよびデバッグする方法がわかりません。
Arduino IDEは、完全なプロジェクト管理ではなく、直接ブートロード用のプレーンなプログラムを作成するのに役立ちます(間違っている場合は訂正し、関連するリファレンスを適切にガイドしてください)。
助けてください。
c++ - C++ の関数呼び出しで文字列参照が更新されない
httpリクエストをWebに投稿するarduinoライブラリを作成しています。
http://arduino.cc/en/Tutorial/TextStringの String クラスを使用しています
関数呼び出しの後に定義済みの文字列オブジェクトを参照すると、コードの動作がおかしくなりました。
ここでは実際に、GET 要求の本文を取得しようとしており、http GET 要求の応答から http ヘッダーを削除しています。
説明は次のとおりです。
メソッド呼び出し:
出力
メソッドの説明:
出力:
例からわかるように、文字列参照オブジェクトは Get メソッド内で正しい文字列を提供していますが、Get メソッドが戻ると文字列コンテンツの参照が変更されます。