パソコンにCANボード(型式LPC-485120)を内蔵しDCモータ、EPOS 24/1 ドライバをそれぞれ二個使用し、ロボットを動かす(制御)したいのですがどのようなC言語プログラムを書けばいいのでしょうか?

まだ学生で初心者なんで詳しく教えて頂けたらありがたいです。

A 回答 (1件)

どうぞ。


http://www.kenschool.jp/Embedded_Linux/details/d …

デバイスは絞られているし、テーマは大きすぎるし、
C言語もどこまで理解しているかわからないし、
これでは多分、回答つかんでしょう。

少なくとも、この質問内容では、回答しきれないかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語のゲームのサンプルプログラムが置いてあって自由に修正できるサイト教えてもらえないでしょうか?

ゲームのサンプルプログラムが置いてあって自由に修正できるサイト教えてもらえないでしょうか?

Aベストアンサー

C言語、自体があまり初心者向けではないのですが、
Cを本気で学ぼうと考えるなら、書籍を購入する事をお勧めします。

「C言語〈1〉はじめてのCプログラミング プログラミング学習シリーズ」
倉 薫 (著)
アマゾン(http://www.amazon.co.jp/)の古本で400円で販売していました。
私が昔、他の人にC言語を教えるときに使った教材ですが非常に簡単でした。
「簡単」というのがポイントで初めてCを学ぶ方から非常に読みやすいと定評があった本です。

ただこれを読んだからといってすぐに市販されているようなゲームが作れるわけではありません。
C言語でゲームを作るのはかなり地道ですし下地になる知識が相当必要です。

とりあえず市販のコンパイラ(コンパイラというのはexe等を作るやつ)は
必要になってから買うので十分です。
先に説明した無償のコンパイラで市販レベルのソフトを作る事も可能なのです。
(市販のものと何が違うかというとマニュアル、ツール、ライブラリ等が付属している点)
やろうと思えばそのツールやライブラリもその無償のコンパイラで作れるわけですから。

また前回とかぶりますが
http://www.kumei.ne.jp/c_lang/bcc/index.html
でBCCというコンパイラをインストールし
http://www.kumei.ne.jp/c_lang/index_c.html
の1章から見ていって実際もexeにして実行してみてください。
このサイトも参考になります。

C言語、自体があまり初心者向けではないのですが、
Cを本気で学ぼうと考えるなら、書籍を購入する事をお勧めします。

「C言語〈1〉はじめてのCプログラミング プログラミング学習シリーズ」
倉 薫 (著)
アマゾン(http://www.amazon.co.jp/)の古本で400円で販売していました。
私が昔、他の人にC言語を教えるときに使った教材ですが非常に簡単でした。
「簡単」というのがポイントで初めてCを学ぶ方から非常に読みやすいと定評があった本です。

ただこれを読んだからといってすぐに市販されている...続きを読む

QAVRでサーボモータの制御プログラム

ATmega168を購入してWinAVRでプログラムを書いています。GWServoのS03T 2BBMGと書かれているサーボモーターを動かそうとしています。パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですがまったく制御できません。どういうプログラムを組めばいいのでしょうか?AVRに外部の発信子はつけていません。ATmega168に内蔵されている発振子でしています。というかそれでいいのでしょうか?ごちゃごちゃですが、何か動かすためのアドバイスをください。お願いします。

Aベストアンサー

こんにちは。まずは話を整理して、一つずつ解決していきいましょう。

> どういうプログラムを組めばいいのでしょうか?

GWServoは、RC用のサーボモータですよね。RCサーボモータの動作原理はすでにご存じだと思いますが、念のため。
【TekuRobo工作室/ソフトウェア編/ラジコンサーボモータを動かす】
http://homepage1.nifty.com/rikiya/software/112servo1.htm

> モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?

そういう意味ではないと思いますよ。回路図も上記リンク先を参照してください。ラジコンサーボモータの端子の並び方は(現在は)各社とも同じ並び方ですので、2番ピンに6V(5VでもOK)500mA程度を供給できるようにしましょう。ただ動かすだけなら電流はもっと少なくて良いでしょう。(トルクの大きなサーボだと、ロック時に平気で 1A程度食ったりしますが。)

> パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですが

delay使うのは悪いやり方です。というのは、今後RWSPさんがプログラムの処理内容を増やしていったときに、サーボモータを制御するPWM信号を正しいタイミングで生成できなくなるからです。具体的には、シリアル通信やボタンの押し下げ制御、複数のサーボモータを同時に制御するなど、処理内容が増えてくるとdelayを使ったのでは約20ms周期のサーボ制御信号時間を管理できなくなります。管理できなくなると、サーボモータが動作中に、ビビッ、ビビッ、と振動します。

時間を正確に管理するためには、ATmega168の内蔵周辺回路にあるタイマモジュール(8-bit Timer/Counter0 または 16-bit Timer/Counter1)を使用します。このモジュールの詳細はATmega168のハードウェアマニュアル
http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf
を参照してください。

こんにちは。まずは話を整理して、一つずつ解決していきいましょう。

> どういうプログラムを組めばいいのでしょうか?

GWServoは、RC用のサーボモータですよね。RCサーボモータの動作原理はすでにご存じだと思いますが、念のため。
【TekuRobo工作室/ソフトウェア編/ラジコンサーボモータを動かす】
http://homepage1.nifty.com/rikiya/software/112servo1.htm

> モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?

そういう意味ではないと思いますよ。回路...続きを読む

QC言語・ゲーム作成で挫折気味の対処方法

こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか?
以下、私の現在の状況を説明致します。

C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。
C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。
しかし、除々に分からなくなり、手がつけられなくなってしまいました。
ゲームを早く作成してみたいという気持ちが先走り、C言語の知恵が足りない(勉強期間:1ヶ月程度)のに
ゲーム作成に取り掛かろうとしたことがが原因のひとつだと思い、もう一度、C言語を勉強し直そうと考えています。
しかし、数ある書籍やサイトの中でどれがゲームプログラミングを学ぶのに適しているの分かりません。
みなさんがゲームプログラミングをするにあたって利用した書籍やサイトはどのようなものでしょうか?
また、同じようにC言語でゲームを作成している方にお聞きしたいのですが、C言語をどの程度勉強されてからゲーム作成に取り掛かったのでしょうか?

みなさんの意見を参考にして、勉強していきたいので、よろしければアドバイスをお願い致します。

こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか?
以下、私の現在の状況を説明致します。

C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。
C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。
しかし、除々に分からなくなり、手がつけられなくなってしまいました。
ゲームを早く作成してみたいという気持ちが先...続きを読む

Aベストアンサー

私は、最初の頃は「SDL」を使って2Dゲームを作っていました。
その頃は、C言語は関数もあまり分かっていませんでした。
ですけど、勉強し直して「OpenGL」で3Dの簡単な動きなら動かせるようになりました。
今は作っていませんけど。

私が勉強に使った本を紹介します。
C言語の本
「図解C言語 ポインタの極意」
「新版 明解C言語 入門編」

C++言語の本
憂鬱なプログラマのためのオブジェクト指向開発講座

どのくらいC言語を理解しているか分かりませんけど、
分からないものが多く載っていて分かりやすい本を立ち読みをして、
探した方がいいと思います。

ゲームは2Dでしょうか?
それとも、3Dでしょうか?
3Dでしたら物理などが分からないと無理です。
物理の本(プログラムも載っています)
「ゲーム開発のための物理シミュレーション入門」

C++言語が分かれば、
「ゲームプログラマになる前に覚えておきたい技術」
がいいらしいです。

Qモータの制御

永久磁石同期モータを速度制御をする場合
 電流制御をマイナーループとした制御系を構成するとします。このとき、電流制御系のサンプリング間隔が速度制御系よりも短いサンプリング間隔で電流制御をすると思います。この場合、アルゴリズム(C言語でのプログラム)はどのようにしたらよいのでしょうか?
マイナーループの電流指令の生成の部分がよくわかりません。
説明がわかりにく部分があるかもしれませんがよろしくお願いします。

Aベストアンサー

マイコンの場合などは2つのタイマーを使って実現すると思います。
例えば、速度制御は1秒間隔、電流制御は0.1秒間隔とか。

擬似的には時刻判定を使えばいいと思います。
ただ、時刻を要求すると現在時刻でなく、プログラム開始時刻を返すものもあるので
注意が必要です。
他のプログラムによって実行が一時とまることもあるのでこの辺の注意も必要です。

QC言語でプログラムを再起動

 UNIXで動くC言語のプログラムを作っています。
 その際、プログラムを再起動させたい時があります。
 しかし、C言語でプログラムを再起動させるってどうやればいいのかよくわかりません。
 何かよいやり方を知っている方、教えてください。
 よろしくお願いします。

Aベストアンサー

関数execl()を使えばよいと思います。
この関数は、fork()と組み合わせて、他のプログラムを
起動するのに使うのが普通ですが、
fork()せずにexecl()を呼ぶと、自プロセスを指定された
プログラムに置き換えます。ですので、ここで自分自身を
指定すれば、再起動したことになるはずです。

QJava言語のプログラムをC言語にする場合

次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか?

import java.io.*;

public class Sort {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("整数値を入力してください");
String line = reader.readLine();
int a = Integer.parseInt(line);

String line2 = reader.readLine();
int b = Integer.parseInt(line2);

String line3 = reader.readLine();
int c = Integer.parseInt(line3);

String line4 = reader.readLine();
int d = Integer.parseInt(line4);

int[] data = {a, b, c, d};

for (int i = 0; i< data.length - 1 ; i++) {
for (int j = i + 1; j< data.length; j++) {
if(data[i] > data[j]) {
int e = data[i];
data[i] = data[j];
data[j] = e;
}
}
}

System.out.println("昇順に並べ替えると、");
for (int i = 0; i< data.length; i++) {
System.out.print(data[i] + " ");
}

System.out.println("です。");

} catch (IOException e){
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数式の形式が正しくありません。");
}
}
}



import java.io.*;

public class Yakusu {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("2つの整数値を入力してください");
System.out.print("整数A : ");
String line = reader.readLine();
int a = Integer.parseInt(line);

System.out.print("整数B : ");
String line2 = reader.readLine();
int b = Integer.parseInt(line2);

if(a%b == 0){
System.out.println("BはAの約数です");
} else {
System.out.println("BはAの約数ではありません");
}

} catch (IOException e){
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数式の形式が正しくありません。");

}
}
}

次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか?

import java.io.*;

public class Sort {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("整数値を入力してください");
String line = reader.readLine();
int a = Integer.parseInt(line);

String line2 = reader.readLine();
int b = Integer.parseI...続きを読む

Aベストアンサー

半角スペース2個を全角スペース1個に置換しています。

#include <stdio.h>

int main(void) {
 int a,b,c,d;
 printf("整数値を入力してください\n");
 scanf("%d",&a);
 scanf("%d",&b);
 scanf("%d",&c);
 scanf("%d",&d);

 int data[] = {a,b,c,d};
 int length = 4;
 int i,j,e;

 for (i = 0; i< length - 1 ; i++) {
  for (j = i + 1; j< length; j++) {
   if(data[i] > data[j]) {
    e = data[i];
    data[i] = data[j];
    data[j] = e;
   }
  }
 }

 printf("昇順に並べ替えると、");

 for (i = 0; i< length; i++) {
  printf("%d ",data[i]);
 }

 printf("です。\n");
}


#include <stdio.h>

int main(void) {
 int a,b;
 printf("2つの整数値を入力してください\n");
 printf("整数A : ");
 scanf("%d",&a);
 printf("整数B : ");
 scanf("%d",&b);

 if(a%b == 0){
  printf("BはAの約数です\n");
 } else {
  printf("BはAの約数ではありません\n");
 }
}

半角スペース2個を全角スペース1個に置換しています。

#include <stdio.h>

int main(void) {
 int a,b,c,d;
 printf("整数値を入力してください\n");
 scanf("%d",&a);
 scanf("%d",&b);
 scanf("%d",&c);
 scanf("%d",&d);

 int data[] = {a,b,c,d};
 int length = 4;
 int i,j,e;

 for (i = 0; i< length - 1 ; i++) {
  for (j = i + 1; j< length; j++) {
   if(data[i] > data[j]) {
    e = data[i];
    data[i] = data[j];
    data[j] = e;
   }
  }
 }

 print...続きを読む

QC言語でゲーム作り

フリーゲームに影響され、自分も作ってみたいと思いC言語勉強し始めました
趣味の範囲で、こつこつ頑張っていこうと思ってます

今現在、C言語の初初心者向けの本を一通り読み終えて次の本を読んでます
一応、一つの目標としてアクションゲーム(マリオみたいな)を作りたいんですが
C言語の他にどんなこと勉強すればいいでしょうか?

あと、C言語から次のステップに移るときは
やはり上級者向けの本は理解できるくらいまで頑張ってからでしょうか?

Aベストアンサー

とりあえずCだけではなく、C++まで一通り学習することをお勧めします。
PCゲームなのかどうか、Windows上のものなのかどうかわかりませんが、C/C++系の場合は、C++使っていることが多いので、C++知っているのと知らないのとでは、サンプルだとかライブラリとか理解できないかもしれないので。

仮にWindowsアプリだとして、API叩いてGDIで描画するか、DirectXを使うかというところもありますね。
2Dの横スクロールならGDIでも可能でしょうけど、後々のことを考えるとDirectX使えるように勉強したほうが、楽だしいろいろなことができるようになります。
DirectXはC++なので、やはりC++になります。

ちょっと戻ってしまいますが、Windowsアプリを作るのであれば、CやC++言語だけではだめで、WindowsAPIを使う必要があります。
まぁ一種のライブラリだと思えばよいですけど。

とりあえず、C/C++の入門書を一通りみて、どのような文法や制約などがあるか理解し(覚えなくてOK)、実際のサンプルソースなどをいじったり改良したりして実際の動作を見ていくのがよろしいかと。
コンソールでのC/C++がある程度わかってきたら、WindowsAPIやDirectXなどの入門書を見ていくといいのではないかとおもいます

とりあえずCだけではなく、C++まで一通り学習することをお勧めします。
PCゲームなのかどうか、Windows上のものなのかどうかわかりませんが、C/C++系の場合は、C++使っていることが多いので、C++知っているのと知らないのとでは、サンプルだとかライブラリとか理解できないかもしれないので。

仮にWindowsアプリだとして、API叩いてGDIで描画するか、DirectXを使うかというところもありますね。
2Dの横スクロールならGDIでも可能でしょうけど、後々のことを考えるとDirectX使えるように勉強したほうが、楽だ...続きを読む

QC言語プログラムを用いた画像表示プログラム

おはようございます。

お時間ありましたら、ご教授よろしくお願いいたします。

C言語を使って、画像の表示、画像の処理ができるプログラムを作成したいのですが、私自身、JAVAを少しかじった程度の知識しかなくなかなかうまくいきません。

やっかいなことに、ただ画像を表示させるだけでなく、JPEGライブラリを用いた(JPEG画像を読み込んで処理できる)C言語プログラムのプログラムを作成したいのですがうまくいかずご質問させていただきました。

参照できるサイト、ご自信の作られたプログラム、プログラムを経験されている方の記述など教えていただければ幸いです。

明確な質問ではないのでご回答が非常に難しいと思いますが、よろしくお願いいたします。

早朝からお忙しいと思いますが、お時間がありましたら是非ご教授よろしくおねがいします。

Aベストアンサー

私のホームページにお絵かきソフトがあり、ソースを公開しています。
全体で2万行程度で、そのうち9割は汎用モジュールです。
ウィンドウ周りの処理はC++を使用していますが、
ほとんどの部分はCで書いてあります。
よろしければご参照ください。

参考URL:http://www.fiberbit.net/user/mobf5f2/program.html

QC言語のプログラム集

こんにちは。C言語のテキストにはプログラムとその説明が書いていますが、
このC言語のプログラムが多くのっているような本はありますか?本屋さんで探したのですが、プログラムがものすごく多くのっているようなものがなかったので、もしお分かりの方がおられましたが、本の紹介をお願いします。

Aベストアンサー

C言語ということでどうしても古い本になってしまいますが
下記URLのような本はどうでしょうか。
http://oku.edu.mie-u.ac.jp/~okumura/algo/
http://www.amazon.co.jp/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A1%E3%83%AA%E3%82%AB%E3%83%AB%E3%83%AC%E3%82%B7%E3%83%94%E3%83%BB%E3%82%A4%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%BC-%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88%E2%80%95C%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8B%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94-William-H-Press/dp/4874085601

ご参考になれば幸いです。

Qサーボモータの制御

駄文で失礼いたします。

現在、二つのサーボモータ(一つは縦軸用、もう一つは横軸用)を動作させてペンを動かしているのですが、縦方向・横方向の移動はできるのですが、斜め移動が上手くいきません。
最終的には、ペンで曲線などを描きたいんですが、うまくプログラムできません。
プログラミングに詳しい方、ご教授頂けないでしょうか?
現状は、C言語でRS-232Cを通して信号を送っています。
お願い致します。

Aベストアンサー

斜めに描画できない、というのは縦軸を動かしたときの横軸の移動量を計算する方法が分からないんですね。

古典的な直線描画法に、DDAという方法があります。任意のx1,y1-x2,y2間を埋める座標を、整数演算だけで求める手法です。参考URLを見て下さい。

整数演算ではなく、浮動小数点で求めたいならもっと簡単です。
縦軸か横軸、どちらかを一定数(1座標ずつとか)ずらしながら、対応するもう一方の座標をsin()かcos()で求めます。
三角関数の基本ですから、xが分かればyを、yが分かればxを求めるのは簡単ですよね?
#wikipediaへのリンクも張っておきます。

円の描画も、三角関数で半径rから任意の角度(0-360まで)のxy座標を求めてプロットするだけですから、簡単です。

参考URL:http://homepage2.nifty.com/kasayan/basic/graphic2.htm, http://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0

斜めに描画できない、というのは縦軸を動かしたときの横軸の移動量を計算する方法が分からないんですね。

古典的な直線描画法に、DDAという方法があります。任意のx1,y1-x2,y2間を埋める座標を、整数演算だけで求める手法です。参考URLを見て下さい。

整数演算ではなく、浮動小数点で求めたいならもっと簡単です。
縦軸か横軸、どちらかを一定数(1座標ずつとか)ずらしながら、対応するもう一方の座標をsin()かcos()で求めます。
三角関数の基本ですから、xが分かればyを、yが分かればxを求めるのは簡単...続きを読む


人気Q&Aランキング