2012a/A2/Jiro/M3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012a/Member]]
*目次 [#cb0b9ab2]
#contents
*ロボットコンテスト [#t97c3ce4]
**プログラム [#lf2f36a7]
今回はRCX二台を使っての操作だったのでプログラムも二つ存在...
趣旨としてはまっさきに一番近い缶のところに行き、缶を掴ん...
中身の入った缶にまで行き、確実に一つ置けるようにしようと...
しかし、通信機能がうまく働かず、そのまま終わってしまった。
まずはタイヤなどを動かすプログラム,
ライントレースなど今までの授業の集大成です。
#define THERSHOLD 30
#define go_st OnFwd(OUT_A); OnFwd(OUT_C);
#define go_ri OnFwd(OUT_A); OnRev(OUT_C);
#define go_le OnFwd(OUT_C); OnRev(OUT_A);
#define go_ba OnRev(OUT_A); OnRev(OUT_C);
#define BLACK 38
#define WHITE 38
#define SIGNALON1 11 // アーム動作開始を知らせるメ...
#define SIGNALON2 21 // アーム動作完了を知らせるメ...
#define SIGNALON3 31 // アーム動作開始を知らせるメ...
#define SIGNALON4 41 // アーム動作完了を知らせるメ...
#define ReMessage2 32 // SIGNALON3の返事
#define RUN_SECTION2 100 //第4セクションの時間
int cross; //黒線をまたぐ回数
sub count()
{ if ((SENSOR_1 < THERSHOLD) && (SENSOR_3 < THERSHOLD)) ...
else if(SENSOR_1>THERSHOLD && SENSOR_3<THERSHOLD...
OnFwd(OUT_A);
Rev(OUT_C);
}else if(SENSOR_1<THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_C);
Rev(OUT_A);
}else if(SENSOR_1>THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_AC);
}}
task line_1st() //90度回転:(L,R)=(B,B) 右に旋回:(L,R)=(...
{
if ((SENSOR_1 < BLACK) && (SENSOR_3 > WHITE))
{
go_le;
}
else if ((SENSOR_1 > WHITE) && (SENSOR_3 < BLACK))
{
go_ri;
}
else if ((SENSOR_1 < BLACK) && (SENSOR_3 < BLACK))
{
go_ri;
Wait(180); //90回転させる 回転センサーを...
Off(OUT_AC);
stop line_1st; //このタスクを止める
}
else if ((SENSOR_1 > WHITE) && (SENSOR_3 > WHITE))
{
go_ba;
}
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
ClearMessage();
ClearTimer(0);
while(cross < 1){
count()
}//最初の黒線を無視する
while (Message() != SIGNALON1) { //真ん中が反応す...
if ((SENSOR_1 < THERSHOLD) && (SENSOR_3 < THER...
if(SENSOR_1>THERSHOLD && SENSOR_3<THERSHOLD){ ...
OnFwd(OUT_A);
Rev(OUT_C);
}else if(SENSOR_1<THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_C);
Rev(OUT_A);
}else if(SENSOR_1>THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_AC);
}
}
Off(OUT_AC);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
until (Message() = SIGNALON2);
go_st;
Wait(30);
until ((SENSOR_1 < BLACK) || (SENSOR_3 < BLACK) || (...
go_le;
Wait(180);
go_st;
until (SENSOR_2 == 1); //タッチのセン...
Off(OUT_AC);
PlaySound(SOUND_CLICK);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
while ( Message() != ReMessage2) { //メッセー...
SendMessage(SIGNALON3);
}
if (Message() == ReMessage2) {
PlaySound(SOUND_CLICK); // 送信に成...
} else {
PlaySound(SOUND_LOW_BEEP); // 送信に失...
}
until (Message() = SIGNALON4);
go_ba;
Wait(50);
Off(OUT_AC);
}
次にアーム側のプログラムです。
こちら側のプログラムの主な役割はセンサーで缶に反応し、
通信を送り、アームで掴み、上げることです。
#define SIGNALON1 11 // アーム動作開始を知らせるメッ...
#define SIGNALON2 21 // アーム動作完了を知らせるメッセ...
#define ReMessage1 12 // SIGNALON1の返事
#define SIGNALON3 31 // アーム動作開始を知らせるメ...
#define SIGNALON4 41 // アーム動作完了を知らせるメ...
#define ReMessage2 32 // SIGNALON3の返事
#define GREEN 51 // until (SENSOR_3 > GREEN); 普...
int i; // for ループのための変数
int i_min=1,i_max=3;
task main ()
{
ClearMessage(); // Message()の値...
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_ROTATION);
SetPower(OUT_A,4);
SetPower(OUT_B,7);
for (i=i_min; i<=i_max; i++) { //3回繰り返す
until (SENSOR_1 > GREEN && FastTimer()==200);
PlaySound(SOUND_CLICK);
SendMessage(SIGNALON1); // 缶を見つけ...
Wait(50);
OnFwd(OUT_A);
Wait(50);
Off(OUT_A); // アームで掴む
OnFwd(OUT_B);
until (SENSOR_3 == -25); //回転センサーを使い一...
Off(OUT_B); // リフトであげる
SendMessage(SIGNALON2); // 動作完了の合図
until (Message() == SIGNALON3);
SendMessage(ReMessage2); //返事
SetPower(OUT_A,3);
SetPower(OUT_B,4);
OnRev(OUT_B);
Wait(10);
Float(OUT_B);
Wait(30); //シャフト...
OnRev(OUT_A);
Wait(50);
Off(OUT_A); //アームを...
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(70);
Float(OUT_B); //シャフト...
SendMessage(SIGNALON4);
}
}
終了行:
[[2012a/Member]]
*目次 [#cb0b9ab2]
#contents
*ロボットコンテスト [#t97c3ce4]
**プログラム [#lf2f36a7]
今回はRCX二台を使っての操作だったのでプログラムも二つ存在...
趣旨としてはまっさきに一番近い缶のところに行き、缶を掴ん...
中身の入った缶にまで行き、確実に一つ置けるようにしようと...
しかし、通信機能がうまく働かず、そのまま終わってしまった。
まずはタイヤなどを動かすプログラム,
ライントレースなど今までの授業の集大成です。
#define THERSHOLD 30
#define go_st OnFwd(OUT_A); OnFwd(OUT_C);
#define go_ri OnFwd(OUT_A); OnRev(OUT_C);
#define go_le OnFwd(OUT_C); OnRev(OUT_A);
#define go_ba OnRev(OUT_A); OnRev(OUT_C);
#define BLACK 38
#define WHITE 38
#define SIGNALON1 11 // アーム動作開始を知らせるメ...
#define SIGNALON2 21 // アーム動作完了を知らせるメ...
#define SIGNALON3 31 // アーム動作開始を知らせるメ...
#define SIGNALON4 41 // アーム動作完了を知らせるメ...
#define ReMessage2 32 // SIGNALON3の返事
#define RUN_SECTION2 100 //第4セクションの時間
int cross; //黒線をまたぐ回数
sub count()
{ if ((SENSOR_1 < THERSHOLD) && (SENSOR_3 < THERSHOLD)) ...
else if(SENSOR_1>THERSHOLD && SENSOR_3<THERSHOLD...
OnFwd(OUT_A);
Rev(OUT_C);
}else if(SENSOR_1<THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_C);
Rev(OUT_A);
}else if(SENSOR_1>THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_AC);
}}
task line_1st() //90度回転:(L,R)=(B,B) 右に旋回:(L,R)=(...
{
if ((SENSOR_1 < BLACK) && (SENSOR_3 > WHITE))
{
go_le;
}
else if ((SENSOR_1 > WHITE) && (SENSOR_3 < BLACK))
{
go_ri;
}
else if ((SENSOR_1 < BLACK) && (SENSOR_3 < BLACK))
{
go_ri;
Wait(180); //90回転させる 回転センサーを...
Off(OUT_AC);
stop line_1st; //このタスクを止める
}
else if ((SENSOR_1 > WHITE) && (SENSOR_3 > WHITE))
{
go_ba;
}
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
ClearMessage();
ClearTimer(0);
while(cross < 1){
count()
}//最初の黒線を無視する
while (Message() != SIGNALON1) { //真ん中が反応す...
if ((SENSOR_1 < THERSHOLD) && (SENSOR_3 < THER...
if(SENSOR_1>THERSHOLD && SENSOR_3<THERSHOLD){ ...
OnFwd(OUT_A);
Rev(OUT_C);
}else if(SENSOR_1<THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_C);
Rev(OUT_A);
}else if(SENSOR_1>THERSHOLD && SENSOR_3>THERSHOL...
OnFwd(OUT_AC);
}
}
Off(OUT_AC);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
until (Message() = SIGNALON2);
go_st;
Wait(30);
until ((SENSOR_1 < BLACK) || (SENSOR_3 < BLACK) || (...
go_le;
Wait(180);
go_st;
until (SENSOR_2 == 1); //タッチのセン...
Off(OUT_AC);
PlaySound(SOUND_CLICK);
SetPower(OUT_A,3);
SetPower(OUT_C,3);
while ( Message() != ReMessage2) { //メッセー...
SendMessage(SIGNALON3);
}
if (Message() == ReMessage2) {
PlaySound(SOUND_CLICK); // 送信に成...
} else {
PlaySound(SOUND_LOW_BEEP); // 送信に失...
}
until (Message() = SIGNALON4);
go_ba;
Wait(50);
Off(OUT_AC);
}
次にアーム側のプログラムです。
こちら側のプログラムの主な役割はセンサーで缶に反応し、
通信を送り、アームで掴み、上げることです。
#define SIGNALON1 11 // アーム動作開始を知らせるメッ...
#define SIGNALON2 21 // アーム動作完了を知らせるメッセ...
#define ReMessage1 12 // SIGNALON1の返事
#define SIGNALON3 31 // アーム動作開始を知らせるメ...
#define SIGNALON4 41 // アーム動作完了を知らせるメ...
#define ReMessage2 32 // SIGNALON3の返事
#define GREEN 51 // until (SENSOR_3 > GREEN); 普...
int i; // for ループのための変数
int i_min=1,i_max=3;
task main ()
{
ClearMessage(); // Message()の値...
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_ROTATION);
SetPower(OUT_A,4);
SetPower(OUT_B,7);
for (i=i_min; i<=i_max; i++) { //3回繰り返す
until (SENSOR_1 > GREEN && FastTimer()==200);
PlaySound(SOUND_CLICK);
SendMessage(SIGNALON1); // 缶を見つけ...
Wait(50);
OnFwd(OUT_A);
Wait(50);
Off(OUT_A); // アームで掴む
OnFwd(OUT_B);
until (SENSOR_3 == -25); //回転センサーを使い一...
Off(OUT_B); // リフトであげる
SendMessage(SIGNALON2); // 動作完了の合図
until (Message() == SIGNALON3);
SendMessage(ReMessage2); //返事
SetPower(OUT_A,3);
SetPower(OUT_B,4);
OnRev(OUT_B);
Wait(10);
Float(OUT_B);
Wait(30); //シャフト...
OnRev(OUT_A);
Wait(50);
Off(OUT_A); //アームを...
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(70);
Float(OUT_B); //シャフト...
SendMessage(SIGNALON4);
}
}
ページ名: