C言語のプログラムの作成

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
由香里

C言語のプログラムの作成

#1

投稿記事 by 由香里 » 18年前

はじめまして、こんばんは。
↓のように動作するC言語のプログラムの作成なのですが、お手上げでした

原点復帰
(a)ロータリースイッチを0にセットする。

(b)スタートスイッチSW1を押す。

(c)可動フレームがモータ側(以下左側)に移動を始め、リミットスイッチに達した時点で右側に反転する。

(d)可動フレームが原点に到達し、フォンセンサがONになった時点で停止する。

原点からの移動確認

(a)ロータリースイッチを4にセットする。

(b)スタートスイッチSW1を押す。

(c)可動フレームが右側に移動を始め、4っ目のスリッド(原点のスリッドは含まない)に達し、フォンセンサがONになった時点で停止する。

すみませんが、どなたか分かる方教えていただけると助かります。よろしくお願いします。

バグ

Re:C言語のプログラムの作成

#2

投稿記事 by バグ » 18年前

たったこれだけの情報では、どうしようもありませんよ…(;^_^A

ゆかり

Re:C言語のプログラムの作成

#3

投稿記事 by ゆかり » 18年前

これが、わたしが考えたプログラムです。もっと簡単で単純にしたプログラムを教えていただきたいです。
よろしくお願いします


#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)

#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9

void main()
{
int sw,led,i=0;//
int bcd=0;

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
if(input(PIN_C1)==0)//push_sw ON
{
for(;input(PIN_C5)==1;)//リミットスイッチを感知するまで左回転
{
//モーター左回転
output_c(0x11);//00000001
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x88);//00001000
delay_ms(5);
}
for(;input(PIN_C4)==1;)//フォトセンサの最初まで右回転
{
//モーター右回転
output_c(0x88);//00001000
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x11);//00000001
delay_ms(5);
}
}
}
}






#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)

#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9

void main()
{
int sw,led,i=0;//
int bcd=0;

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);

output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
sw=input_b()&0x0f;
output_a()sw;//ポートbの値をLED(ポートB)に出力
}
}

バグ

Re:C言語のプログラムの作成

#4

投稿記事 by バグ » 18年前

今の情報だけでは、同じ表記をしている場所を関数化すること位しか思いつかないです。
以下のソースは由香里さんのプログラムが正しいのを前提に書かれていますので、コンパイルすらしていません。『私ならばこう記述する』程度のものですので、あまり参考にならないかもしれないことを了承したうえで見ていただけたらと思います。とりあえず、原点復帰の部分だけです(^_^;)
// 原点復帰

#include	<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay( CLOCK = 20000000 )

#byte porta = 5
#byte porta = 6
#byte porta = 7
#byte porta = 8
#byte porta = 9

// プロトタイプ宣言
void	Initialize()
void	MotorMoveLeft()
void	MotorMoveRight()

// メイン関数
void main() 
{ 
	Initialize();

	while( 1 )
	{
		if( input( PIN_C1 ) == 0 )			//push_sw ON
		{
			while( input( PIN_C5 ) == 1 )	//リミットスイッチを感知するまで左回転
			{
				MotorMoveLeft();
			}
			
			while( input( PIN_C4 ) == 1 )	//フォトセンサの最初まで右回転 
			{
				MotorMoveRight();
			}
		}
	}
} 

// ボードの初期化???
void	Initialize()
{
	int		i;
	
	for( i = 0 ; i < 2 ; i++ )
	{
		output_a( 0xFF );
		delay_ms( 500 );
		output_a( 0x00 );
		delay_ms( 500 );
	}
}

// モーター左回転
void	MotorMoveLeft()
{
	int		nBit;

	for( nBit = 0x11 ; nBit <= 0x88 ; nBit = nBit << 1 )
	{
		output_c( nBit );
		delay_ms( 5 );
	}
}

// モーター右回転
void	MotorMoveRight()
{
	int		nBit;

	for( nBit = 0x88 ; nBit >= 0x11 ; nBit = nBit >> 1 )
	{
		output_c( nBit );
		delay_ms( 5 );
	}
}

閉鎖

“C言語何でも質問掲示板” へ戻る