- 締切済み
カウントの仕方について
こんにちわ。 C言語について質問があります。 今、周波数について研究をしていますが、 マイナスからプラス(0も含む)になったところを1個とカウントし、次もマイナスからプラスになったら+1と・・繰り返すプログラムを作りたいんですが、私はプログラミング苦手なのでなかなか解くことができません。特にマイナスからプラスになったところをカウントするプログラムが一番わかりません。1週間以上かけても結果は変わりませんでしたのでどなたか御知恵お借りしたいです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
AD変換は、unsigned int や unsingned char などで返され、そのままではプラスマイナスの電圧が反映されないんじゃないですか? http://www.geocities.co.jp/HeartLand-Himawari/2004/study/ad_da/ad_conv.html アナログ値 デジタル値 +2.5~+3.5 111 +1.5~+2.5 110 +0.5~+1.5 101 -0.5~+0.5 100 -1.5~-0.5 011 -2.5~-1.5 010 -3.5~-2.5 001 -4.5~-3.5 000 ↑の場合は、4(100)から5(101)への変わり目を確認すればよいことがわかりますよね。あなたの場合は、C以前の、アース電位がデジタルに直したとき、いくらの unsingned int に換算されるかを知らないだけではないでしょうか。逆に、アース電位のデジタル換算値がわかれば(上記事例では2進数 100)、難しく考えずに#2さんの要領でそのデジタル換算値と比較すれば良く、簡単に解決できるとこと思うのですが...。
- phoenix343
- ベストアンサー率15% (296/1946)
| A/D変換なので0点がうまく読み取れない場合もあると考えたのですがマイナスからプラスにするプログラムって何でしょうか? おいおい 根本的なことじゃないのかそれって 最初の質問は | マイナスからプラス(0も含む)になったところを1個とカウントし、次もマイナスからプラスになったら+1と・・繰り返すプログラム だったはずなのに 笑 とりあえず変化前と変化後の変数が必要なのはわかるよな? 比較しなければ、マイナスからプラスに(逆も同様)変化したとは分からないんだし 以下、サンプルソース == int add, add_old; add_old = 0; while (1) { add = val; if ( ((add < 0) && (add_old >= 0)) // add=負、add_old=正 || ((add >= 0) && (add_old < 0)) { // add=正、add_old=負 count++; } add_old = add; } ==
- asuncion
- ベストアンサー率33% (2127/6290)
>1週間以上かけても結果は変わりませんでした そのソースを載せてみましょう。
補足
早い返事ありがとうございます。 一部のソース乗せますのでお願いします。 ちなみにマイクを使って音声入力されたら周波数を計算するというプラグラムです。一応時間に関するプログラムも”/ /”として載せます。 A/D変換なので0点がうまく読み取れない場合もあると考えたのですがマイナスからプラスにするプログラムって何でしょうか? int main(void) { ・ ・ ・ // clock_t start, end; // start = clock(); while(1){ AD.CSR.BIT.ADST = 1; //A/D変換スタート while(AD.CSR.BIT.ADF == 0); //変換終了を待つ add = AD.DRA >> 6; //AN0入力、6ビット右にシフト AD.CSR.BIT.ADF = 0; //フラグクリア add=(int)((add*(5.0/1024.0)*1000.0)+0.5);//入力データを電圧値に換算 for(i=0;i<4;i++){ //電圧値を文字データに変換するためのデータを入れる s[i] = add % 10; //10で割った余りを入れる add/= 10; //10で割る if(s[3] == 0){ if(s[2] == 0){ if(s[1]==0){ if(s[0] == 1){ count++; // end = clock(); a=((end - start)/CLOCKS_PER_SEC); // P5.DR.BYTE = 0xff; //LED出力データ初期値 // start = clock(); } } } } ・ ・