私は現在、自動チェッカーボードの開発に取り組んでいます。3つのクラスを使用してC++でコーディングし、Arduinoのライブラリとして使用するために必要な変更を加えました。C ++コードは、ボードの位置に対して8 x 8の配列を開始し、そのボード上のポーンの動きを追跡する3つのクラスに分けられます。
エラーなしでスケッチをコンパイルできるので、Arduinoライブラリへの変換は正しいと思います。しかし、それをADK Megaにアップロードすると、のような単純なコマンドでさえ、シリアルモニターにまったく応答がありませんSerial.print()
。
これはスケッチです:
#include <Board.h>
Board myBoard ;
int currentTurn=0;
int order[4][4]={{0,2,1,3},{1,5,2,4},{4,2,5,3},{2,4,0,2}};
int k=0;
int *A;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop()
{
A=myBoard.arr();
for (int i=0; i<98; i++)
{
Serial.print(A[i]);
}
command[0]=order[k][0];
command[1]=order[k][1];
command[2]=order[k][2];
command[3]=order[k][3];
myBoard.processCommand(command,currentTurn);
if(myBoard.nextTurn())
{
if(currentTurn==0)
{
currentTurn=1;
digitalWrite(13,HIGH);
delay(3000);
}
else
{
currentTurn=0;
digitalWrite(13,LOW);
delay(3000);
}
}
k++;
}
基本的に、クラスはポーンの位置に関する情報を持つ0と1の配列を返します。しかし、スケッチをアップロードするとすぐに何も起こりません!
なぜこれが起こっているのかについて誰かが考えていますか?
問題がそこにあるかもしれないと誰かが考える場合、これはBoardクラスのコンストラクターです
編集
Board::Board()
{
bool gameFinished=false;
bool turnChange=false;
initBoard();
initPawns();
}
物事を単純化するためにコンストラクターを変更しました。これで、オブジェクトの配列がヘッダーのパブリックメンバーとして作成されます:PawnmyPawns[24]。プログラムが正しく実行され、配列を印刷できますが、void loop()の最初の反復でのみ、印刷された配列は空のボードに対応します(ポーンは存在しません)。最初の反復後(コンストラクターが呼び出されたとき)に、プログラムがポーンの配列に正しくアクセスしていないのではないかと思います。ポーンの配列を動的に割り当てると、この問題は解決しますか?