• 締切済み

カウントの仕方について

こんにちわ。 C言語について質問があります。 今、周波数について研究をしていますが、 マイナスからプラス(0も含む)になったところを1個とカウントし、次もマイナスからプラスになったら+1と・・繰り返すプログラムを作りたいんですが、私はプログラミング苦手なのでなかなか解くことができません。特にマイナスからプラスになったところをカウントするプログラムが一番わかりません。1週間以上かけても結果は変わりませんでしたのでどなたか御知恵お借りしたいです。 よろしくお願いします。

みんなの回答

回答No.3

 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)
回答No.2

| 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% (2126/6288)
回答No.1

>1週間以上かけても結果は変わりませんでした そのソースを載せてみましょう。

a061124
質問者

補足

早い返事ありがとうございます。 一部のソース乗せますのでお願いします。 ちなみにマイクを使って音声入力されたら周波数を計算するというプラグラムです。一応時間に関するプログラムも”/ /”として載せます。 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(); } } } } ・ ・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 入力回数のカウントをする方法

    PICを用いてC言語のプログラムを作成しているのですが、センサの反応によってピン(a4)に入力が入った回数をカウントしたいのですが、反応している間ずっとカウントをしています。1度の反応ではカウントする数を1にしたいのですが、どうしたらいいのでしょうか。

  • ”行数のカウント”はどうすればいいのでしょうか? 

     共立出版の”プログラム言語C 第2版”p24に 以下のプログラムが書いてありますが、 #include <stdio.h> /*入力の行数をカウント*/ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } これをgccでコンパイルして ./***で実行しても 何もでてきません。 更にこの実行コマンドの次に 任意のファィルを指定しても 何も実行されません。  前のページの ”ファィルの複写” ”文字のカウント” のプログラムも こんな風に 何も実行されません。  c言語の初歩なのでしょうが、この本の ここで つまずいては 前に 進めません。”ふつうのlinuxプログラミング”を読んでいたのですが、初歩が分からないと、理解できないと 考えて この本を読んでいました。  このコードあたりから 実行が展開されないので 困っています。gccはfedora4のものを使用しています。  尚、windosのcについては 関心がありません。多分ライブラィの互換がとれなくて ほとんどんのコードがエラーになってしまいます。

  • 簡単なC言語を利用したシステム

    私は今年大学4年で卒業研究をするのですが、なかなか良いテーマが決まりません。私の研究室ではプログラミング言語を用いて研究することが必須なのですが、私はプログラミングがとても苦手で、C言語の基本ぐらいしか分かりません。そこで、簡単なC言語を用いて何かのシステムを構築するような研究をしたいと思っているのですが、どんな研究ができるでしょうか?もちろん、これからもC言語についてはまだまだ勉強していくつもりです。回答よろしくお願いします!

  • 周波数カウンタについてです。

    周波数カウンタを作ってみたいのですが、調べてみても分からない(難しい)情報もしくは情報が少ないです。 周波数カウンタを作るにあたっての参考書のようなものがありましたら、なんでもいいので教えていただけないでしょうか。 あと、作るときはC言語などのプログラミング言語は必要でしょうか。 回答お願いします。

  • 動画と音声の処理に強いプログラミング言語は何でしょうか?

    動画と音声の処理に強いプログラミング言語は何でしょうか? カメラとマイクを使った人工知能を持つプログラムを遊び半分で作ってみたいと思っているのですが、どのプログラミング言語で作るかまだ決めていません。 調べたところ、JavaにはJava Media Frameworkなどがありよさそうなのですが、CやC++などにも同じようなものがあるのでしょうか。また他の言語でもっと優れているものはあるでしょうか? プログラミング言語に限らず、音声ファイルをバイナリとして読み込めばいいかもしれませんが、音量や周波数などを取得するために自分でコードを書くのはちょっとつらいのでそれらをしてくれるライブラリがある言語を探しています。また、音声や動画をリアルタイムで処理したいので、それも可能なものがあったら教えて欲しいです。よろしくお願いします。

  • C++で文字をカウントするプログラムを・・・

    C++で簡易的な文字をカウントするプログラムを作成しようとしています。 あるtxtファイルがあって、その中に ----------------- nannchara8 1234 #kokokara a92kv838 402853 #s82ffr kka0345 #kokomade ----------------- と記述してあります。 #kokokara~#kokomadeに書いてある特定の文字(0やaなど)の数をカウント、ただし、行頭に#のついているものはカウントしない(上に示したtxtファイル内の文字「8」のカウント結果は3・・・みたいな」)。 そんなプログラムを作りたいのですが どのようにすればいいでしょうか? ご教授願います。

  • プログラム(課題研究)

    現在プログラムの課題研究をしています・・・ そこで次のようなことを現在やっています ***プログラミング言語の歴史・成り立ち*** そこで質問なんですが各プログラミング言語の特徴・その利用目的・長所短所やそのプログラミングのでき方等を現在探しています。 例えばB言語→C言語→C++言語のような歴史関係も知りたいです。 またBASICの中でもあるものに指向性を持たせた言語などでも結構です(数学関係で十進BASICやコンパイルができるものなど) どんなにマイナーな言語でもかまいませんのでどんどん投稿してください! よろしくお願いします<(_ _)>

  • サイクルカウントの方法

    現在大学にてC言語でプログラムを組んでいますが、上からサイクル数をカウントして速度評価をしろと言われました。 しかしプログラムについてあまり詳しくなく、参考書などで調べましたが、さっぱりわかりませんでした。 Googleで調べた所、唯一"clock.h"というヘッダファイルと、start_counter();、get_counter();というのを用いているものを見つけましたが、どうやらclock.hは通常のコンパイラには入っておらず使えないとの事でした。 該当するclock.hも見つからず、どうしようもなくなってしまったので、こちらの方に質問させていただく事にしました。 上のclock.hを用いない場合、サイクル数のカウントとはどのようにして行えばいいのでしょうか? また、上のclock.hの入手先やヘッダファイルソースがあるサイトをご存知でしたらご教授願います。

  • エクセルのカウントについての質問です。

    エクセルのカウントについての質問です。 例えば B1に入っている数式の結果の数値と一緒になる 数値をC10~C60のセルからカウントしたい場合 どの様な式を立てれば良いか教えて頂けますでしょうか? B1のセルには=10*3の"30"が入力してあり COUNTIF(C10:C60,"30")と入力すればカウントできるのですが COUNTIF(C10:C60,"B1")ではカウントできません ""の中にB1などセルを指定してカウントはできませんでしょうか? また セルをドラッグして””の中のセルを次のように B2、B3、B4...といったように変化をの数式の結果をカウント する方法はありますでしょうか? 宜しくお願いします。

  • Excelで条件に合った数字の数をカウントしたいのですが・・・

    エクセルで【表1】のような表がある時、各品名別に在庫数<ゼロ のセルを、 関数を使ってカウントしたいのです。 【表1】 日付 品名 販売数 在庫数 1   A   30   52 2   A   20   22 3   A   25   2 4   A   15   -23 1   B   40   48 2   B   55   8 3   B   50   -47 4   B   45   -97 1   C   35   10 2   C   20   -25 3   C   40   -45 4   C   20   -85 但しこの時条件があり、品名ごとにカウントする期間が異なります。 別表で、【表2】のように 期間が入力された表があり、 品名Aなら 1~2日目のマイナスの在庫数を、 Bなら 1~3日目のマイナスの在庫数をカウントしたいのです。 【表2】 品名  期間 A    2 B    3 C    4 最終仕上げたいのは【表3】で、「在庫がマイナスになった期間」の列に入れる 関数を教えて頂きたいのです。 【表3】 品名  在庫<ゼロ になった期間 A     0 B     1 C     3 COUNTIF関数とOffset関数などを使ってみたのですが、 【表1】の日付が品によって 3になったり10になったりと変化するため、 引数の「基準」をどうすればいいのかが分からずに頓挫してしまいました・・・。 長々と分かりにくい説明になってしまいましたが、助けて下さい。 よろしくお願いします。