プログラミング教材BeautoRoverARMとパソコンをUSBケーブルでつないでシリアル通信するプログラムの製作にチャレンジしました。動画で使用したプログラムはこちらです。
例題1:CommU君のCをパソコンに送るプログラム
int main (void)
{
//制御周期の設定[単位:Hz 範囲:30.0~]
const unsigned short MainCycle = 60;
Init(MainCycle);//CPUの初期設定
SciInit();//シリアル通信機能の初期化 while (1) { if(getSW()==1){//押しボタンがおされたら SciByteTx('C'); //(大文字のC)を送信 Wait(100); //0.1秒待つ } }
}
@@@@@@@@@@@@@@@@@@
例題2:Sota&CommUという文字列をパソコンに送るプログラム
int main (void)
{
char sentence [13]; //送る文字数より1文字多い配列を確保する。
//sentenseへ格納する際、文字列の終端を表す文字が1文字挿入されるから
//制御周期の設定[単位:Hz 範囲:30.0~]
const unsigned short MainCycle = 60;
Init(MainCycle); //CPUの初期設定
SciInit(); //シリアル通信初期化 LED(1); //LED初期化 while (1) { //無限ループここから if(getSW()==1){ //スイッチが押されていれば以下を実行 sprintf(sentence,"Sota&CommU\r\n"); SciStrTx(sentence,12); //変数sentenceに入った12文字をパソコンに送信 Wait(300); //0.3秒待つ } }
}
@@@@@@@@@@@@@@@@@@
例題3:赤外線センサの値2個をパソコンに送るプログラム
int main (void)
{
int i;
int data=0; //intは16bit(-32768~32767)の数字を記録することができる
char sentence[11]; //charは文字を記録することができる(-128~127)6文字確保
//制御周期の設定[単位:Hz 範囲:30.0~]
const unsigned short MainCycle = 60;
Init(MainCycle); //CPUの初期設定
SciInit(); //シリアル通信初期化 while(getSW()==0){} //ボタンが押してからでないと while(getSW()==1){} //ループが始まらないようにしている LED(1);//LED初期化 while(1){ //{}内を永遠に繰り返す for(i=0; i<2; i++){ //for文 2回くりかえす data=ADRead(i); //赤外線センサの値をA/D変換してdataに代入 sprintf(sentence,"AN%01d=%04d\r\n",i,data); //%01にはiの値が1桁、%04にはdataの値が4桁で //文字列に変換され //まとめてsentenceに文字列として格納される //\r\n(2文字)は改行を表す SciStrTx(sentence,10); //変数sentenceに入った10文字をパソコンに送信 Wait(20); //0.02秒待つ } sprintf(sentence,"\033[1;1H"); //1行目1列目にカーソルを戻すエスケープシーケンスの命令 SciStrTx(sentence,6); //エスケープシーケンス6文字を送信 Wait(20); //0.02秒待つ }
}
@@@@@@@@@@@@@@@@@@
例題4:キーボードのzxcを押すと、それぞれドレミとブザーが鳴るプログラム
int main (void)
{
int dat;//データ取得したかどうかを記録するための変数。
//データなしなら0、データありなら1が戻り値として代入される
unsigned char rcv;//シリアル通信でパソコンから送られてきた文字を記録するための変数
//制御周期の設定[単位:Hz 範囲:30.0~]
const unsigned short MainCycle = 60;
Init(MainCycle); //CPUの初期設定
SciInit();//シリアル通信の初期化
LED(0); //LEDの初期化
while(1){
dat=SciByteRx(&rcv);//1バイトの受信データをバッファから取ってくる。
if(dat==0){ //もしバッファのデータが空なら
continue; //switch文を実行せず、while文の()内の条件判定に戻る
}
switch(rcv){//switch文:rcvの値に応じて行動を決める
case ‘z’: //zを打ったときの処理
BuzzerSet(179,127);//音程ドをセット
BuzzerStart();//ブザーを鳴らす
break; //switch文から抜ける
case ‘x’: //xを打ったときの処理
BuzzerSet(160,127);//音程レをセット
BuzzerStart();//ブザーを鳴らす
break; //switch文から抜ける
case ‘c’: //cを打ったときの処理
BuzzerSet(142,127);//ブザーを鳴らす
BuzzerStart();//ブザーを鳴らす
break; //switch文から抜ける
default: //その他のキーボードが押されたときの処理
BuzzerStop();//ブザーを止める
break;//switch文から抜ける
}
}
}
@@@@@@@@@@@@@@@@@@