合計 昨日 今日

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

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: esaki
[URL]
Date: 2013年2月04日(月) 13:12
No: 1
(OFFLINE)

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

main.cの内容です

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

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

codeタグを追加しました。 by softya(ソフト屋)
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
/******************** (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スピードで前進→シュート
というプログラミングを組みたい。

Name: h2so5
(副管理人)
[URL]
比類なきプログラマー(99,549 ポイント)
Date: 2013年2月04日(月) 13:18
No: 2
(OFFLINE)

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

追加した部分のコードって
コード[C]: 全て選択
1
GetGeneral_port(PORT_11, (int *)&compus;

ですか? 括弧が足りないように見えますが。

Name: esaki
[URL]
かけだし(1,695 ポイント)
Date: 2013年2月04日(月) 13:25
No: 3
(OFFLINE)

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

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

Name: softya(ソフト屋)
(副管理人)
[URL]
ウィザード(1,149,155 ポイント)
Date: 2013年2月04日(月) 13:34
No: 4
(OFFLINE)

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

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

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

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

Name: esaki
[URL]
かけだし(1,695 ポイント)
Date: 2013年2月04日(月) 16:19
No: 5
(OFFLINE)

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

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{~}まで)の入力を行い、データーロガーでしいき値を計測し
プログラミングに入力を行い、ロボットの動きを確認する程度です。
なので、肝心な部分に関しては親が手助けしないと無理です。
学校の宿題も集中してできない年齢なので、ロボットに関しては楽しく集中させいとの思いで
難解な部分だけを親が手出ししている状況です。

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

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

Name: softya(ソフト屋)
(副管理人)
[URL]
ウィザード(1,149,155 ポイント)
Date: 2013年2月04日(月) 16:27
No: 6
(OFFLINE)

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

なるほど、小学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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Name: esaki
[URL]
かけだし(1,695 ポイント)
Date: 2013年2月04日(月) 16:49
No: 7
(OFFLINE)

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

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

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

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

Name: softya(ソフト屋)
(副管理人)
[URL]
ウィザード(1,149,155 ポイント)
Date: 2013年2月04日(月) 16:53
No: 8
(OFFLINE)

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

mainでしか使われていませんので、mainの最初の宣言に追加すれば良いと思います。
コード[C]: 全て選択
1
2
3
int main(void)
{
         int i,touch1,touch2,ir1,ir2,distance; ← ここです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Name: esaki
[URL]
かけだし(1,695 ポイント)
Date: 2013年2月04日(月) 17:13
No: 9
(OFFLINE)

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

[解決!]

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[8人]