サッカーロボプログラミングについて

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

サッカーロボプログラミングについて

#1

投稿記事 by esaki » 5年前

main.cの内容です

初めまして。
C++言語初心者です。この度、息子がサッカーロボットを始めました。
下記は、ロボット塾でのサンプルプログラムです。
このプログラミングは理解できますが、オウンゴールを無くすため
コンパスセンサーを取り付けようと考え装備しました。
しかし、プログラミング後ビルトするとGetGeneral_port(PORT_11, (int *)&compus;で
エラーが出ます。ロボット塾の講師に「どのファイルで定義付けするのですか?」と
質問しても適正な返答が返ってきませんでした。(多分言語に詳しくないと思われる。)
質問内容が支離滅裂と思われるでしょうが、何らかのヒントでも得る事ができたらと
考え投稿しました。
何卒、宜しくお願いします。

下記はmain.cの内容です。
※文字は私が記入した内容です。

codeタグを追加しました。 by softya(ソフト屋)

コード: 全て選択

/******************** (C) COPYRIGHT 2009-2011 JAPAN ROBOTECH ***************
* File Name          : main.c
* Author             : JAPAN ROBOTECH - I/O System Team
* Version            : V1.0
* Date               : 04/11/2011
* Description        : サンプルメインソース
* Board              : JES-7021
****************************************************************************/

#include "includes.h"※このファイルを開いてもport指定らしきものは見当たらない
#include "prottype.h"※(上記同様)

/* Private function prototypes --------------------------------------------*/
static void led_flow_timer(void);
static void func_timer(void);
void wait_ms(int timer);

/* Private variables ------------------------------------------------------*/
int                                  LedFlowCounter;
unsigned int     LedPattern;
int                                  timercount;

/***************************************************************************
* Function Name   : main
* Parameters               : none
*
* Return                   : none
*
* Description              : main
*
***************************************************************************/
int main(void)
{
         int i,touch1,touch2,ir1,ir2,distance;

         // ドライバ初期化処理
         App_Init();

         // LEDを流すタイマー処理を登録
         Timer_Func_Regist(led_flow_timer);

         // STARTボタンが押されるまでまつ
         while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2));

         // LEDを流すタイマー処理をキャンセル
         Timer_Func_Cancel(led_flow_timer);

         // LED を全て消す
         for (i=LED_1; i<=LED_10; i++)
         {
                   LED_output(i, LED_OFF);
         }


         // ユーザプログラムのタイマー処理登録
         // 1ms毎にfunc_timer()が呼び出される
         Timer_Func_Regist(func_timer);


//////////////////////////////////////////////////////////////////////
// ここからプログラム領域                                           //
//      ★ 起動時1回のみ実行するプログラムはここに書く             //
//      ★ メインで処理するプログラムはwhileのmainループに書く      //
//      ★ 1ms毎に実行するプログラムがあればfunc_timer()に書く      //
//////////////////////////////////////////////////////////////////////


// ★ 起動時1回のみ実行  領域  ↓↓↓



         while(1)
         {
// ★ メインで処理  領域(mainループ)  ↓↓↓

         //機体とポート類の接続は 左:小さい番号←→大きい番号:右
         GetGeneral_port(PORT_05, (int *)&touch1);                        // タッチセンサ左
         GetGeneral_port(PORT_06, (int *)&touch2);                        // タッチセンサ右
         GetGeneral_port(PORT_07, (int *)&ir1);                                    // IRセンサ左
         GetGeneral_port(PORT_08, (int *)&ir2);                                    // IRセンサ右
         GetGeneral_port(PORT_09, (int *)&distance);                      // 測距センサ
         GetGeneral_port(PORT_11, (int *)&compus;※←このポートを増やしたい。
    ※上記の内容をプログラミングした後に、ビルドすると上記行がエラーとなり
    ※エラー文を翻訳すると「定義付けされていません。」のようなメッセージが出る。

     if (touch1)
         {
                   if (touch2)
                   {
                            if (ir1 <= 0x800)
                            {
                                     if (ir2 <= 0x800)
                                     {
                                               if (distance >= 0x400)
                                               {
                              if(compus <= FA)※←プログラミングにコンパスセンサーを増やしオウンゴールを無くしたい。この行には                               {            ※エラーメッセージは出ない。
                                                        //左右の赤外線センサが反応  ボール確保
                                                        //前進
                                                        motor_duty(MOTOR_1, 100);            // モータのPWM設定
                                                        motor_move(MOTOR_1, MODE_CW);        // モータ正転
                                                        motor_move(MOTOR_2, MODE_CW);        // モータ正転
                                                        //ドリブル
                                                        motor_duty(MOTOR_3, 80);             // モータのPWM設定
                                                        motor_move(MOTOR_3, MODE_CCW);       // モータ反転
                                                        wait_ms(100);                                           // 100ms待ち
                                               }
                                               else
                                               {
                                                        //ドリブラの測距センサが反応  ドリブル動作
                                                        //停止
                                                        motor_move(MOTOR_1, MODE_STOP);      // モータ停止
                                                        motor_move(MOTOR_2, MODE_STOP);      // モータ停止
                                                        wait_ms(500);                                           // 500ms待ち
                                                        //後退
                                                        motor_duty(MOTOR_1, 30);             // モータのPWM設定
                                                        motor_move(MOTOR_1, MODE_CCW);       // モータ反転
                                                        motor_move(MOTOR_2, MODE_CCW);       // モータ反転
                                                        wait_ms(1500);                                          // 1500ms待ち
                                                        //左旋回
                                                        motor_duty(MOTOR_1, 30);             // モータのPWM設定
                                                        motor_move(MOTOR_1, MODE_CCW);       // モータ反転
                                                        motor_move(MOTOR_2, MODE_CW);        // モータ正転
                                                        wait_ms(3000);                                          // 3000ms待ち
                                                        //ここからキック動作
                                                        //停止
                                                        motor_move(MOTOR_1, MODE_STOP);      // モータ停止
                                                        motor_move(MOTOR_2, MODE_STOP);      // モータ停止
                                                        motor_move(MOTOR_3, MODE_STOP);      // モータ停止
                                                        wait_ms(300);                                           // 300ms待ち
                                                        //後退
                                                        motor_duty(MOTOR_1, 30);             // モータのPWM設定
                                                        motor_move(MOTOR_1, MODE_CCW);       // モータ反転
                                                        motor_move(MOTOR_2, MODE_CCW);       // モータ反転
                                                        motor_move(MOTOR_3, MODE_STOP);      // モータ停止
                                                        wait_ms(300);                                           // 300ms待ち
                                                        //前進  キック
                                                        motor_duty(MOTOR_1, 100);            // モータのPWM設定
                                                        motor_move(MOTOR_1, MODE_CW);        // モータ正転
                                                        motor_move(MOTOR_2, MODE_CW);        // モータ正転
                                                        motor_duty(MOTOR_3, 100);            // モータのPWM設定
                                                        motor_move(MOTOR_3, MODE_CW);        // モータ正転
                                                        wait_ms(500);                                           // 500ms待ち
                                                        //停止
                                                        motor_move(MOTOR_1, MODE_STOP);      // モータ停止
                                                        motor_move(MOTOR_2, MODE_STOP);      // モータ停止
                                                        wait_ms(1000);                                          // 1000ms待ち
                                               }
                                     }
                                     else
                                     {
                                               //左の赤外線センサが反応  ボール追跡
                                               //ドリブラ停止
                                               motor_move(MOTOR_3, MODE_STOP);                // モータ停止
                                               //左折
                                               motor_duty(MOTOR_1, 50);                       // モータのPWM設定
                                               motor_move(MOTOR_1, MODE_STOP);                // モータ停止
                                               motor_move(MOTOR_2, MODE_CW);                  // モータ正転
                                               wait_ms(750);                                                    // 750ms待ち
                                     }
                            }
                            else
                            {
                                     if (ir2 <= 0x800)
                                     {
                                               //右の赤外線センサが反応  ボール追跡
                                               //ドリブラ停止
                                               motor_move(MOTOR_3, MODE_STOP);                // モータ停止
                                               //右折
                                               motor_duty(MOTOR_1, 50);                       // モータのPWM設定
                                               motor_move(MOTOR_1, MODE_CW);                  // モータ正転
                                               motor_move(MOTOR_2, MODE_STOP);                // モータ停止
                                               wait_ms(750);                                                    // 750ms待ち
                                     }
                                     else
                                     {
                                               //左右の赤外線センサが反応しない  ボール探索
                                               //ドリブラ停止
                                               motor_move(MOTOR_3, MODE_STOP);                // モータ停止
                                               //右旋回
                                               motor_duty(MOTOR_1, 30);                       // モータのPWM設定
                                               motor_move(MOTOR_1, MODE_CW);                  // モータ正転
                                               motor_move(MOTOR_2, MODE_CCW);                 // モータ反転
                                     }
                            }
                   }
                   else
                   {
                            //右のタッチセンサが反応  壁回避
                            motor_duty(MOTOR_1, 50);                                         // モータのPWM設定
                            //後退
                            motor_move(MOTOR_1, MODE_CCW);                                   // モータ反転
                            motor_move(MOTOR_2, MODE_CCW);                                   // モータ反転
                            wait_ms(1500);                                                                      // 1500ms待ち
                            //左旋回
                            motor_move(MOTOR_1, MODE_CCW);                                   // モータ反転
                            motor_move(MOTOR_2, MODE_CW);                                    // モータ正転
                            wait_ms(1000);                                                                      // 1000ms待ち
                   }
         }
         else
         {
                   //左のタッチセンサが反応  壁回避
                   motor_duty(MOTOR_1, 50);                                                   // モータのPWM設定
                   //後退
                   motor_move(MOTOR_1, MODE_CCW);                                             // モータ反転
                   motor_move(MOTOR_2, MODE_CCW);                                             // モータ反転
                   wait_ms(1500);                                                                               // 1500ms待ち
                   //右旋回
                   motor_move(MOTOR_1, MODE_CW);                                              // モータ正転
                   motor_move(MOTOR_2, MODE_CCW);                                             // モータ反転
                   wait_ms(1000);                                                                               // 1000ms待ち
         }


    //  ▼▼▼ メインループから呼び出される各処理関数 ▼▼▼
         #ifdef _FUNC_EXT_GPSM
                   GPS_Driver_Proc();                                      // GPS制御処理
         #endif
    //  ▲▲▲ メインループから呼び出される各処理関数 ▲▲▲

         }
         App_End();                                                                          // ドライバ終了処理


         return(0);
}

/***************************************************************************
* Function Name  : wait_ms
* Description    : 指定時間のウエイト
* Input          : timer=待ち時間(ms)
* Output         : None
* Return         : None
****************************************************************************/
void wait_ms(int timer)
{
         timercount=0;
         while(timercount <= timer);
}

/***************************************************************************
* Function Name  : D_func_Timer
* Description    : 1msタイマーでの処理
* Input          : None
* Output         : None
* Return         : None
****************************************************************************/
static void func_timer(void)
{
// ★ 1ms毎に実行  領域  ↓↓↓

         timercount++;

}



/////////////////////////////////////////////////////////////////////////////////
// ●プログラムサンプル
//
// USBシリアル出力
//                 xprintf("出力文字列 %s",str)                                               // 使用可能フォーマット指定子  %d %s %c %u %b %X
//
//
// LED 点灯・消灯
//                 LED_output(LED_1, LED_ON);                                                 // LED1 点灯     (ON)
//                 LED_output(LED_2, LED_OFF);                                                // LED2 消灯     (OFF)
//                 LED_output(LED_3, LED_BLINK_HI);                                 // LED3 高速点滅 (HI)
//                 LED_output(LED_4, LED_BLINK_HI);                                 // LED4 高速点滅 (HI)
//                 LED_output(LED_5, LED_BLINK_MID);                                // LED5 中速点滅 (MID)
//                 LED_output(LED_6, LED_BLINK_MID);                                // LED6 中速点滅 (MID)
//                 LED_output(LED_7, LED_BLINK_LO);                                 // LED7 低速点滅 (LO)
//                 LED_output(LED_8, LED_BLINK_LO);                                 // LED8 低速点滅 (LO)
//
// LED でレベル表示
//                 LED_LevelMeter(30, 70);                                                             // 70を最大値とし30のレベルをLEDの表示個数で表す
//
//
//
// 拡張コネクタ・ディジタル出力
//       ・ハードウェア設定がOutputポートの場合
//                 SetGeneral_port(PORT_01, 0);                                               // PORT_01(CN01)にLow 出力
//                 SetGeneral_port(PORT_01, 1);                                               // PORT_01(CN01)にHigh出力
//
//       ・ハードウェア設定がPWMポートの場合
//                 SetGeneral_port(PORT_01, 50);                                              // PORT_01(CN01)に50のPWMデータを出力
//
//       ・ハードウェア設定がHARD SERVOポートの場合
//                 SetGeneral_port(PORT_01, 150);                                             // PORT_01(CN01)に150のデータを出力(1~250)
//
//       ・ハードウェア設定がSOFT SERVOポートの場合
//                 SetGeneral_port(PORT_03, 10);                                              // PORT_03(CN03)に10のデータを出力(1~25)
//
//       ・ハードウェア設定がENCODERポートの場合
//                 SetGeneral_port(PORT_01, 0);                                               // PORT_01(CN01)に0のエンコーダー値を設定
//
//       ・ハードウェア設定がBUZZERポートの場合
//                 SetGeneral_port(PORT_17, 25);                                              // ラ(440KHz)の音階をブザーに出力
//
// 拡張コネクタ・ディジタル入力
//       ・ハードウェア設定がInputポートの場合
//                 GetGeneral_port(PORT_01, (int *)&data);                          // dataに入力データ(1/0)が入る
//
//       ・ハードウェア設定がADCポートの場合
//                 GetGeneral_port(PORT_01, (int *)&data);                          // dataにADC入力データ(0~4096)が入る
//
//       ・ハードウェア設定がHARD/SOFT SERVOポートの場合
//                 GetGeneral_port(PORT_01, (int *)&data);                          // dataにサーボに設定している値が入る
//
//       ・ハードウェア設定がENCODERポートの場合
//                 GetGeneral_port(PORT_01, (int *)&data);                          // dataにエンコーダーの値が入る
//
//       ・ハードウェア設定がBUZZERポートの場合
//                 GetGeneral_port(PORT_01, (int *)&data);                          // dataに現在設定している音階の値が入る
//
//
//
// モータ制御
//                 motor_move(MOTOR_2, MODE_CW)                                               // 2番のモーターを正回転に設定
//                 motor_duty(MOTOR_2, 50);                                                   // 2番のモーターのPWM割合を50%にする。
//
//
//
// MMC書き込み/読み込み
//                 f_open(&file_obj, "sample.txt", FA_CREATE_ALWAYS | FA_WRITE);
//                                                                                                                                // sample.txtを新規作成
//                 f_write(&file_obj, (char *)wdata, s1, &s2);             // wdataの内容をs1サイズ書き込む(書き込んだサイズがs2に入る)
//                 f_read(&file_obj, buff, s1, &fsize);                    // buffにs1サイズ分を読み込む(読み込んだサイズがfsizeに入る)
//                 f_close(&file_obj);                                                                          // ファイルクローズ
//
//
//
// Rs232C送受信(オプション)
//                 UART_xputc(dispbuff);                                                               // disobuffの文字列を送信(終端NULL)
//                 UART_SendByte(0x13)                                                                          // 1Byte送信
//                 UART_RecvByte(unsigned char *code)                               // 1Byte受信
//
//
//
// GPS受信(オプション)
//                 data = GPS_Latitude();                                                              // 緯度 x 10000
//                 gpsd = GPS_latitude_hemisphere_indicator();             // 'N' = North, 'S' = South
//                 data = GPS_Longitude();                                                             // 経度 x 10000
//                 gpsd = GPS_longitude_hemisphere_indicator();   // 'E' = East,  'W' = West
//                 count = GPS_number_of_satellites();                              // 捕捉衛星数
//                 hour = GPS_hour()                                                                   // 標準時の時を取得する
//                 min = GPS_minute()                                                                  // 標準時の分を取得する
//                 sec = GPS_second();                                                                          // 標準時の秒を取得する
//
//
//
// ZigBee制御(オプション)
//                 Zigbee_ext_send(DATA_SEND_NO_CHECK, "123", 3);
//                                                                                                                                // 送信チェックをせずに"123"を送信
//                 Zigbee_ext_recv(buff, (int *)&len, (unsigned char *)&MsgID)
//                                                                                                                                // buffに受信する。lenに文字列長が入る。
//
//
// EEPRO制御(オプション)
//                 I2C_EE_BufferWrite(message, 0x0001, 10);                // EEPROMの0x0001番地よりmessageのバッファ10バイトを書き込む
//                 I2C_EE_BufferRead(message, 0x0001, 10);                          // EEPROMの0x0001番地からmessageのバッファ10バイトを読み込む
//
//
//
// デジタルコンパス(Compuss)読み込み(オプション)
//                 I2C_DC_Read((int *)&data);                                                 //dataにコンパスの数値を読み込む(0~3599)
//
//
//
// I2Cモータ制御(オプション)
//                 I2C_motor_move(1,-100);                                                             // モーター番号1のI2Cモーターを逆回転で100%の出力にする
//                 I2C_motor_move(2,70);                                                               // モーター番号2のI2Cモーターを正回転で70%の出力にする
//                 I2C_motor_Get_Stats(1, (char *)&data);                           // モーター番号1のエラーステータスを読み取る
//                 I2C_motor_Clear_Stats(1);                                                  // モーター番号1のエラーステータスを消去する
//
//
/////////////////////////////////////////////////////////////////////////////////

/***************************************************************************
* Function Name  : led_flow_timer
* Description    : 起動時にスタートが押されるまでLEDを流す
* Input          : None
* Output         : None
* Return         : None
****************************************************************************/
static void led_flow_timer(void)
{
         int i;

         LedFlowCounter++;
         if (LedFlowCounter < 150)   return;
         LedFlowCounter=0;

         for (i=LED_1; i<=LED_10; i++)
         {
                   LED_output(i, LED_OFF);
         }
         // LED点灯
         LED_output(9-(LedPattern % 10), LED_ON);
         LedPattern++;
}

#ifdef USE_FULL_ASSERT
/*******************************************************************************
* Function Name  : assert_failed
* Description    : Reports the name of the source file and the source line number
*                  where the assert_param error has occurred.
* Input          : - file: pointer to the source file name
*                  - line: assert_param error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {}
}
#endif

/******************** (C) COPYRIGHT 2009-2011 JAPAN ROBOTECH ***************
* File Name          : init.c
* Author             : JAPAN ROBOTECH - I/O System Team
* Version            : V1.0
* Date               : 05/18/2011
* Description        : イニシャライズ
*
* このファイルはシステム設定により自動生成されます。
* ファイルを編集後、システム設定を行うと編集内容が消えます。
****************************************************************************/

#include "includes.h"
#include "prottype.h"

/* Private data --------------------------------------------------------------*/
#ifdef _FUNC_MMC
FATFS Fatfs[_DRIVES];                /* File system object for each logical drive */
#endif


/*******************************************************************************
* Function Name  : App_Init
* Description    : ボード初期化処理
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/

void App_Init(void)
{
         Set_System();                                           // システム初期化
         Timer_init();                                           // インターバルタイマ設定

#ifdef _FUNC_USB
         Set_USBClock();                                         // USBクロック供給
         USB_Interrupts_Config();             // USB割り込み設定
         USB_Init();                                                      // USB初期化
         USB_Cable_Config(ENABLE);            // USB接続
#endif

#ifdef _FUNC_MMC
         f_mount(0, &Fatfs[0]);                         // MMCファイルシステム初期化
#endif
#ifdef _FUNC_EXT_UART
         UART_init(115200);                             // 拡張UART初期化(115200bps)
#endif
#ifdef _FUNC_EXT_GPSM
         GPS_init();                                                      // GPSモジュール(UART)インターフェース初期化
#endif
#ifdef  _FUNC_EXT_ZIGBEE
         Zigbee_ext_init();                             // 拡張ZIGBEE(UART)の初期化
#endif

#ifdef _FUNC_EXT_EEPROM
         I2C_EE_Init();                                          // EEPROM(I2C)インターフェース初期化
#endif
#ifdef _FUNC_EXT_COMPASS
         I2C_DC_Init();                                          // 電子コンパス(I2C)インターフェース初期化
#endif
#ifdef _FUNC_EXT_MOTOR
         I2C_motor_init();                              // 拡張モータ(I2C)インターフェース初期化
#endif

         init_port();                                            // 汎用ポート設定
}

※ここからはinit.cの内容です。

/*******************************************************************************
* Function Name  : App_End
* Description    : ボード終了処理
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/

void App_End(void)
{
#ifdef _FUNC_LED
         LED_end();                                                       // LED終了処理
#endif
#ifdef _FUNC_MOTOR
         motor_end();                                            // モータ終了処理
#endif
#ifdef _FUNC_ENCODER
         encoder_end();                                          // エンコーダ終了処理
#endif
#ifdef _FUNC_EXT_ZIGBEE
         Zigbee_ext_end();                              // 拡張ZIGBEE(UART)終了処理
#endif
#ifdef _FUNC_EXT_GPSM
         GPS_end();                                                       // GPSモジュール(UART)終了処理
#endif
#ifdef  _FUNC_EXT_UART
         UART_end();                                                      // 拡張UART終了処理
#endif

#ifdef _FUNC_EXT_MOTOR
         I2C_motor_end();                               // 拡張モータ(I2C)終了処理
#endif
#ifdef _FUNC_EXT_COMPASS
         I2C_DC_end();                                           // 電子コンパス(I2C)終了処理
#endif
#ifdef _FUNC_EXT_EEPROM
         I2C_EE_end();                                           // EEPROM(I2C)終了処理
#endif
#ifdef _FUNC_HARD_SERVO
         hard_servo_end();                              // ハードサーボ終了処理
#endif
#ifdef _FUNC_SOFT_SERVO
         soft_servo_end();                              // SOFTサーボ終了処理
#endif
#ifdef _FUNC_BUZZER
         buzzer_end();                                           // ブザー終了処理
#endif
}


/*******************************************************************************
* Function Name  : init_port
* Description    : ポートの初期化
* Input          : none
* Output         : None
* Return         : none
*******************************************************************************/
void init_port()
{
         general_port_init(PORT_05, IN_PORT,0 ,0);
         general_port_init(PORT_06, IN_PORT,0 ,0);
         general_port_init(PORT_07, AD_PORT,0 ,0);
         general_port_init(PORT_08, AD_PORT,0 ,0);
         general_port_init(PORT_09, AD_PORT,0 ,0);
         general_port_init(PORT_11, AD_PORT,0 ,0);※←ハード画面でPORT11をアナログinで設定するとこの様にPORTは増えます。
}
※最終的には、ボールを探す→ボール確保→ロボット旋回→コンパスセンサーで方角確認→MAXスピードで前進→シュート
というプログラミングを組みたい。

アバター
h2so5
副管理人
記事: 2212
登録日時: 7年前
住所: 東京
連絡を取る:

Re: サッカーロボプログラミングについて

#2

投稿記事 by h2so5 » 5年前

追加した部分のコードって

コード: 全て選択

GetGeneral_port(PORT_11, (int *)&compus;
ですか? 括弧が足りないように見えますが。

esaki
記事: 6
登録日時: 5年前
住所: 福岡県筑紫野市

Re: サッカーロボプログラミングについて

#3

投稿記事 by esaki » 5年前

早速のご返答、ありがとうございます。
括弧ですが、本文入力時はミスしていましたが
プログラミングでは最終的に括弧で閉じていました。
曖昧な文章で申し訳ございませんでした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 7年前
住所: 東海地方
連絡を取る:

Re: サッカーロボプログラミングについて

#4

投稿記事 by softya(ソフト屋) » 5年前

codeタグをご利用下さい。 フォーラムルール → http://dixq.net/board/board.html
それと息子さん自身が質問されたほうが良いと思います。
伝達で齟齬が生じるのは避けれませんし、息子さんが勉強しないと意味が無いと思います。
息子さんが勉強されているんですよね?

【追記】
ロボットってコレでしょうか?
「JAPAN ROBOTECH」
http://www.japan-robotech.com/robodesig ... t_usb.html

【追記の追記】
上記だするとライブラリ系は公開されていないので推測することしか出来ません。
ただ、gccのエラーコードを教えてもらうとどういう問題かはアドバイスできると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

esaki
記事: 6
登録日時: 5年前
住所: 福岡県筑紫野市

Re: サッカーロボプログラミングについて

#5

投稿記事 by esaki » 5年前

codeタグで再投稿して頂けたようで、感謝します。
私もcodeタグで書き込みましたが、途中で別ウィンドウに切り替えたら
消えてしまい、その後は仕事していたので、再投稿できませんでした。

ご質問の件なんですが「ジャパンロボテック」の商品です。
塾の塾長は社長のようですが、肝心な質問には回答できません。

エラー内容ですが
'compus' undeclared(first use in the function)
each undeclared idetifier is reported only once for each function it appears in
と表示されます。
使用ソフトはeclipseです。(ロボット塾より支給)

ライブラリの中身(フォルダ)は
CMSISフォルダ  STM32_USB-FS-Devise_Driverフォルダ  STM32F10x_StdPeriph_Driverフォルダの3個あります。

息子は小学3年生で、やっとローマ字を習ったようです。
ロボットに関しては、作り上げたりするのは好きなので、親の手を借りずに一人で作り上げますが
プログラミングはロボットの動き(else{~}まで)の入力を行い、データーロガーでしいき値を計測し
プログラミングに入力を行い、ロボットの動きを確認する程度です。
なので、肝心な部分に関しては親が手助けしないと無理です。
学校の宿題も集中してできない年齢なので、ロボットに関しては楽しく集中させいとの思いで
難解な部分だけを親が手出ししている状況です。

御指摘のように、子供が自分で行動すればベストでしょうが、小学生には難解すぎて
塾の生徒達も日に日に少なくなっているのが現状です。

何卒、宜しくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 7年前
住所: 東海地方
連絡を取る:

Re: サッカーロボプログラミングについて

#6

投稿記事 by softya(ソフト屋) » 5年前

なるほど、小学3年生は厳しいですね。
エラーですが、compusと変数が未定義と言うエラーです。
compus変数はご自身で定義する必要がありますので定義を行なって下さい。

参考訳。
http://translate.google.co.jp/#en/ja/%2 ... pears%20in

【追記】
C言語以外の開発環境があるロボットもあるので、小学生にはこっちの方が良いかもしれませんね。
サッカーロボのほうが高機能ですが。
「Beauto Rover H8/ARM(ビュートローバー) | ヴイストン株式会社」
http://www.vstone.co.jp/products/beauto ... index.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

esaki
記事: 6
登録日時: 5年前
住所: 福岡県筑紫野市

Re: サッカーロボプログラミングについて

#7

投稿記事 by esaki » 5年前

サッカーロボは今回が2台目で、最初は昨年の夏でした。この時のプログラミングは
アイコンブロック形式でしたので扱う事もできましたが、バージョンアップして今回の
C言語になったのです。 前回のアイコンブロック形式の経験でフローチャートは作れる
ようになりましたが、C言語は難しいです。

ただ、親としてはコンパスセンサーさえ取り込めれば、その後はデーターロガーで
数値を読み取りプログラミングに書き込む事で、その後は息子が思考錯誤するかと
思っています。

compusを定義するにはどのファイルで行えばよいか判りませんか?
main.c内のGet Generalに書き込み、ifで条件を書き込めば良いかと思った私が
浅はかでした。
因みに、ハードで任意のportにアナログinアイコンを入れればinit.cには自動的に
任意のポートが上書きされます。しかし、compusが定義されていません。
何卒、御教授お願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 7年前
住所: 東海地方
連絡を取る:

Re: サッカーロボプログラミングについて

#8

投稿記事 by softya(ソフト屋) » 5年前

mainでしか使われていませんので、mainの最初の宣言に追加すれば良いと思います。

コード: 全て選択

int main(void)
{
         int i,touch1,touch2,ir1,ir2,distance; ← ここです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

esaki
記事: 6
登録日時: 5年前
住所: 福岡県筑紫野市

Re: サッカーロボプログラミングについて

#9

投稿記事 by esaki » 5年前

クイック返信で返信したけど表示されませんでした。

色々とありがとうございました。大変助かりました。
これで、息子がロボットの動きを考えてプログラミング
するだけとなりました。

閉鎖

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