質問:
私のコードは列車事故のようです
pvGuy
2019-11-29 13:18:12 UTC
view on stackexchange narkive permalink

私はプログラミングに不慣れで、簡単なプロジェクトは弾薬カウンターを作成することだと思いました。このコードのトラブルシューティングを数時間行っていますが、コードにエラーがたくさんある理由がわかりません。以下は私のプログラムです。一目見て、どんな間違いをしたのか教えてください。プログラムの下にエラーレポートを投稿します。事前にプログラミングが悪かったことをお詫びし、適切な指導を受けて希望が持てることを願っています。保存された関数「twentyBullets()」を1つだけ使用してテストを実行したところ、プログラムは正常に機能しました。 30個の関数を追加し、if-else-if条件のチェーンを作成した後、プログラムはあらゆる種類のエラーを報告し始めました。

  / * 7セグメントディスプレイ処理コード!以下のコードは、デジタル弾薬カウンターの7セグメントディスプレイを処理します。 A ___ F | | B G --- G E | ___ | C D上記は、B07BMPPNQYディスプレイのさまざまなセグメントに割り当てられたアルファベットです。デジタル弾薬カウンタープロジェクトは、共通のピン、L3とL4を使用します。 * ///ピン宣言を表示します。 // P_:ここで、Pは、点灯するディスプレイのセグメントのピン出力を示し、その後に小文字が続きます。//セグメント内のどの特定のLEDが点灯するかを示します。 // ten:ここで、tenは7セグメントディスプレイの10の位置を示します。 // 1:7セグメント表示での自分の位置を示します。intPa= 0; int Pb = 1; int Pc = 2; int Pd = 3; int Pe = 4; int Pf = 5; int Pg = 6 ; int ten = 7; int one = 8; int ammo = 10; void setup(){//セットアップコードをここに配置して1回実行します:pinMode(Pa、OUTPUT); pinMode(Pb、OUTPUT); pinMode(Pc 、OUTPUT); pinMode(Pd、OUTPUT); pinMode(Pe、OUTPUT); pinMode(Pf、OUTPUT); pinMode(Pg、OUTPUT); pinMode(ten、OUTPUT); pinMode(one、OUTPUT);} void loop( ){//メインコードをここに配置して繰り返し実行します:if(ammo == 1){oneBullet(); } else if(ammo == 2){twoBullets(); } else if(ammo == 3){threeBullets(); } else if(ammo == 4){fourBullets(); }
else if(ammo == 5){fiveBullets(); } else if(ammo == 6){sixBullets(); } else if(ammo == 7){sevenBullets(); } else if(ammo == 8){eightBullets(); } else if(ammo == 9){nineBullets(); } else if(ammo == 10){tenBullets(); } else if(ammo == 11){elevenBullets(); } else if(ammo == 12){twelveBullets(); } else if(ammo == 13){thirteenBullets(); } else if(ammo == 14){fourteenBullets(); } else if(ammo == 15){fifteenBullets(); } else if(ammo == 16){sixteenBullets(); } else if(ammo == 17){seventeenBullets(); } else if(ammo == 18){18Bullets(); } else if(ammo == 19){nineteenBullets(); } else if(ammo == 20){twentyBullets(); } else if(ammo == 21){twentyoneBullets(); } else if(ammo == 22){twentytwoBullets(); } else if(ammo == 23){twentythreeBullets(); } else if(ammo == 24){twentyfourBullets(); } else if(ammo == 25){twentyfiveBullets(); } else if(ammo == 26){twentysixBullets(); } else if(ammo == 27){twentysevenBullets(); } else if(ammo == 28){twentyeightBullets(); } else if(ammo == 29){twentynineBullets(); } else if(ammo == 30){thirtyBullets(); } else {zeroBullets(); }} void zeroBullets()// 0 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void oneBullet()// 1 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH);
digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void twoBullets()// 2 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void threeBullets()// 6 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void fourBullets()// 4 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void fiveBullets()// 5 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW);
digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void sixBullets()// 6 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void SevenBullets()// 7 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void nineBullets()// 8 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void nineBullets()// 9 {digitalWrite(one、LOW); digitalWrite(ten、HIGH);
digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10); // 0 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10);} void tenBullets()// 0 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void elevenBullets()// 1 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void twelveBullets()// 2 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);}
void thirteenBullets()// 3 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void fourteenBullets()// 4 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void fifteenBullets()// 5 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void sixteenBullets()// 6 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH);
digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void SeventeenBullets()// 7 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void 18Bullets()// 8 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void nineteenBullets()// 9 {digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 1 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10);} void teenBullets()// 0 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW);
digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teenoneBullets()// 1 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void twoBullets()// 2 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void 23Bullets()// 3 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teenfourBullets()// 4 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、HIGH); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 2
digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teenfiveBullets()// 5 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teensixBullets()// 6 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、HIGH); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teensevenBullets()// 7 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、HIGH); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teeneightBullets()// 8 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW);
digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void teennineBullets()// 9 {digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、HIGH); digitalWrite(Pe、HIGH); digitalWrite(Pf、LOW); digitalWrite(Pg、LOW); delay(10); // 2 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、HIGH); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);} void thirtyBullets()// 0 digitalWrite(one、LOW); digitalWrite(ten、HIGH); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、LOW); digitalWrite(Pf、LOW); digitalWrite(Pg、HIGH); delay(10); // 3 digitalWrite(one、HIGH); digitalWrite(ten、LOW); digitalWrite(Pa、LOW); digitalWrite(Pb、LOW); digitalWrite(Pc、LOW); digitalWrite(Pd、LOW); digitalWrite(Pe、HIGH); digitalWrite(Pf、HIGH); digitalWrite(Pg、LOW); delay(10);}  

エラーレポート:

  Arduino:1.8.10(Windows 10)、ボード: "Arduino / Genuino Uno" Digital_Ammo_Counter .ino:関数 'void loop()':sketch_Digital_Ammo_Counter:138:4:エラー: 'thirtyBullets'はこのスコープで宣言されていませんthirtyBullets(); ^ ~~~~~~~~~~~~ Sketch_Digital_Ammo_Counter.ino:138:4:注:推奨される代替案: 'twentyBullets' thirtyBullets(); ^ ~~~~~~~~~~~~ 20Bulletssketch_Digital_Ammo_Counter.ino:グローバルスコープ:sketch_Digital_Ammo_Counter:898:3:エラー:「digitalWrite」の前に初期化子が必要ですdigitalWrite(one、LOW); ^ ~~~~~~~~~~~
Sketch_Digital_Ammo_Counter:899:15:エラー: '('トークンdigitalWrite(ten、HIGH); ^勝手_Digital_Ammo_Counter:900:15の前にコンストラクタ、デストラクタ、または型変換が必要です:エラー: '('トークンの前にコンストラクタ、デストラクタ、または型変換が必要ですdigitalWrite(Pa、LOW); ^勝手_Digital_Ammo_Counter:901:15:エラー: '('トークンdigitalWrite(Pb、LOW); ^ sketch_Digital_Ammo_Counter:902:15:エラー:予想されるコンストラクタ、デストラクタ、または、 '(' token digitalWrite(Pc、LOW); ^ sketch_Digital_Ammo_Counter:903:15:エラー:コンストラクタ、デストラクタ、または型変換の前に '(' token digitalWrite(Pd、LOW); ^ sketch_Digital_Ammo_Counter:904:15 :エラー:予期されるコンストラクタ、デストラクタ、または '('トークンdigitalWrite(Pe、LOW); ^ sketch_Digital_Ammo_Counter:905:15の前の型変換:エラー:予期されるコンストラクタ、デストラクタ、または'('トークンdigitalWrite(Pf、LOW);の前の型変換^ sketch_Digital_Ammo_Counter:906:15:エラー: '(' token digitalWrite(Pg、HIGH); ^勝手_Digital_Ammo_Counter:907:8の前にコンストラクター、デストラクタ、または型変換が必要です:エラー: '('の前にコンストラクター、デストラクタ、または型変換が必要ですtoken delay(10); ^ skipch_Digital_Ammo_Counter:910:15:エラー: '(' token digitalWrite(one、HIGH); ^ sketch_Digital_Ammo_Counter:911:15:エラー:予想されるコンストラクター、デストラクタ、または'(' token digitalWrite(ten、LOW); ^勝手_Digital_Ammo_Counter:912:15:エラー: '(' token digitalWrite(Pa、LOW); ^勝手_Digital_Ammo_Counter:913:15:の前にコンストラクタ、デストラクタ、または型変換が必要です。エラー: '(' token digitalWrite(Pb、LOW); ^の前にコンストラクター、デストラクター、または型変換が必要です。
Sketch_Digital_Ammo_Counter:914:15:エラー: '('トークンdigitalWrite(Pc、LOW); ^勝手_Digital_Ammo_Counter:915:15の前にコンストラクタ、デストラクタ、または型変換が必要です:エラー: '('トークンの前にコンストラクタ、デストラクタ、または型変換が必要ですdigitalWrite(Pd、LOW); ^勝手_Digital_Ammo_Counter:916:15:エラー: '('トークンdigitalWrite(Pe、HIGH); ^ sketch_Digital_Ammo_Counter:917:15:エラー:予想されるコンストラクタ、デストラクタ、または '(' token digitalWrite(Pf、HIGH); ^ skipch_Digital_Ammo_Counter:918:15:error:expectedコンストラクタ、デストラクタ、または型変換の前に '(' token digitalWrite(Pg、LOW); ^ sketch_Digital_Ammo_Counter:919:8 :エラー: '(' token delay(10); ^ sketch_Digital_Ammo_Counter:920:1:エラー: '}'トークンの前に宣言が必要です} ^ exit status 1'thiの前にコンストラクタ、デストラクタ、または型の変換が必要ですrtyBullets 'はこのスコープで宣言されていませんこのレポートには、ファイル->設定で[コンパイル中に詳細な出力を表示する]オプションを有効にすると、より多くの情報が含まれます。 
これがフォーマットされた方法は、私のプログラムと私のエラーレポートのコピー/貼り付けを完全に台無しにしました。私を助けたいと思っていて、私の実際のプログラムやエラーレポートに似たものを見る必要がある場合は、どちらかのドキュメントを電子メールで送信するように手配できます。
投稿されたコードの形式をチェックすることに賛成する...コードが読み取り可能かどうかを気にしない人がたくさんいます....コードの上の行に3つのバッククォートを入れ、後の行に3つのバッククォートを入れますあなたのコード
すべてのコードを選択して、[{}]ボタンをクリックすることもできます
コードをフォーマットしました。思いやりのある+1
どうもありがとうございました!これからはフォーマットの修正を念頭に置いて、コードを自由にフォーマットしてくれてありがとうございます。
中括弧がないことを気にしないでください。これにより、ほとんどのコンパイラは「気を失う」ことになり、非常に紛らわしいエラーメッセージが大量に生成され、追跡が非常に困難になる可能性があります。私は30年以上CおよびCに似た言語でプログラミングを行ってきましたが、この正確な問題は今でも時々私を悩ませます。
ハハ、ありがとう!ええ、私たちは皆、時々単純な見落としの餌食になると思います。経験を積むことで、このような間違いをより早く発見できると確信しています。コミュニティがとても良いことを嬉しく思います!私が受けているすべてのサポートを期待していなかったと言わざるを得ません!それは素晴らしいことであり、私も次世代の電子機器愛好家の助けになることを願っています。
問題の完全な説明を提供するのに役立ちます。多くの最初のポスターが漠然とした「を試しましたが、うまくいきません」という質問を投稿します。その後、「うまくいかない」が実際に何を意味するのかを理解するには、20の質問の疲れ果てたゲームが必要です。
コードレビューが求められているものではないことは承知していますが、ここでのアプローチを再検討することを強くお勧めします。コードのコピー/貼り付けは、これにもっと巧妙に取り組む必要があることを示唆するために、すぐに危険信号となるはずです。初心者として取り組むことができる基本的な提案は、与えられた数字を印刷する方法です(そしてあなたの数字の論理は数字+数字の論理になります)。現在の肥大化して増加したコードで作業する場合、変更やバグは本来よりもはるかに長い時間がかかります。明日最大99発の弾丸を持てるとどうなりますか?
私がすべての生徒に与えるアドバイスは次のとおりです。コンパイラは構文的に正しいプログラムをコンパイルし、基本的なエラーをキャッチして報告しますが、*すでに見たエラーを考慮に入れるのは無意味です。*中括弧がないなどの単純なエラーが1つあります。は、元のエラーとは関係がないと思われるエラーメッセージのカスケード全体を引き起こす可能性があります。最初のエラー(または2dエラーが本物であることに気付いた場合は2)を修正し、再コンパイルします。 「大量のエラーメッセージ」の1つの間違いがすぐに見つかり、次の正しいコードを分析するよりも多くの時間を節約できます。
私ができる最善のアドバイスは、コードがコンパイルされたら(そして私は個人的に警告を一切容認しません)、デバッガーの使用方法を学ぶことです。それは世界中であなたの親友です。 「ブレークポイント」を設定し、コードを実行すると、ブレークポイントに遭遇すると停止します。その時点で、呼び出しスタックを調べたり、変数の値を読み取ったり、変更したりすることができます。これは、コードが何をしているのかを洞察するための最善の方法です。
四 答え:
chrisl
2019-11-29 14:33:44 UTC
view on stackexchange narkive permalink

エラーカスケードは、 thirtyBullets()関数の開始時に中括弧 {が欠落していることが原因で発生します。これにより、関数名が宣言されず、次の digitalWrite()への関数呼び出しも失敗します。この欠落している開始中括弧を挿入すると、すべてのエラーが修正されます(ただし、現在コンパイラが手元にないため、テストできません)。

さらに、コードを短くすることができます。騙す。現在、対応するデジタルピンを書き込む番号ごとに1つの関数を使用しています。したがって、状況は、常に同じピンに書き込む必要があり、単純な符号なし整数に応じて異なる値を書き込む必要があるということです。したがって、2次元配列の数字のピンパターンを定義することをお勧めします。その場合、1つの関数のみを使用してそれらのいずれかを出力できます。例を示します。

  uint8_tled_pa​​ttern [10] [7] = {{0、0、0、0、0、0、1}、//数字0のパターン{1、0、0、1、1、1、1}、//数字1のパターン{0、0、1、0、0、1、0}、//数字2のパターン... { 0、0、0、0、1、0、0}}; //数字のパターン9voiddisplay_digit(uint8_t position、uint8_t digit){digitalWrite(one、position); //位置がゼロの場合はピン1にロー(別名ゼロ)を書き込みます。それ以外の場合はハイdigitalWrite(ten、!position); //位置がゼロより大きい場合はピン10にローを書き込み、それ以外の場合はハイを書き込みますfor(uint8_t i = 0; i<7; i ++){digitalWrite(i、led_pa​​ttern [digit] [i]); } delay(10);} void display_number(uint8_t number){display_digit(0、number%10); display_digit(1、number / 10);} void loop(){display_number(ammo);}  

では、ここで何が起こっているのでしょうか?

最初に、2次元配列でLEDパターンを定義します。最初のインデックスは、表示したい数字です。 2番目のインデックスは点灯するLEDの数です。その場合、値は対応するLEDの状態です。 1 0 は短いので、書きました。 HIGH LOW を書くこともできます(これらは 1 0 に対してのみ定義されているため)。したがって、パターン {1、0、0、1、1、1、1} ​​は、セグメントbとcのみがローに出力されるため、オンになることを意味します。

次に、 1桁を表示する関数を定義します。桁の位置と実際の桁(0〜9)をパラメータとして取ります。変数を使用して、位置の2つの出力を直接書き込みます。これは非常に短い方法であり、2桁を超える場合は機能しません。カウンターを1日延長したい場合は、これらの2行を別の構文(たとえば、switch caseステートメント)に置き換えることができます。次に、0から6までのforループを実行して、すべての桁を調べます。あなたの場合、ピン番号0から6を使用するので、ピン番号として i を直接使用できます。 (他のピンを使用する場合は、それらのピンを配列に保存し、 i を使用して配列の値を参照できます)。 forループのすべての反復で、対応する桁とLEDの値を対応する出力ピンに書き込みます。その後、少し遅れて機能を終了します。

簡単にするために、関数 display_number()も定義しました。この関数は、対応する位置に数字を連続して表示することにより、完全な数値を表示します。初心者の方は、私がそこでどのような計算をしたのかわからないかもしれません。モジュロ演算子は、残りの整数除算を返します。したがって、 23%10 を取得すると、 3 が返されます(整数除算 23/10 は2で、残りは3です)。これにより、最初の(最下位)桁が得られます。次に、小数点以下の部分をカットするため、10で整数除算を行うだけで2桁目を取得できます。ある日99を超える数値を表示する場合は、それに対応するように両方の関数を変更する必要があります。

すべての場所で型として uint8_t を使用したことに注意してください。これは、最小の符号なし数値タイプ(8ビット幅)です。ここではこれ以上の数値は必要なく、メモリを少し節約できるので、最小のものを使用しました。表示を拡張して255より大きい値を表示する場合は、 display_number()関数の number パラメーターのタイプをより大きなタイプに変更する必要があります。例 unsigned int (16ビット幅)。

また、現在コンパイラまたはArduinoが手元にないため、このコードをテストしていないことに注意してください。


これで、1回の関数呼び出しで数字を数字に表示できるようになり、1000行近くのコードは必要ありません。

拡張する場合数値を表示するよりも多くのことを行うためのコードを使用すると、 delay()を使用するのは悪いことです。その間、Arduinoは他に何もできないためです。次に、 delay()を回避するようにコードを書き直し、代わりに millis()関数を使用してブロックを解除する必要があります。このためのチュートリアルはたくさんありますが、私はそれについて言及したかっただけです。

グッドロード! 「{」のよ​​うな謙虚なことを忘れてしまったので、一生懸命お尻を蹴っています!それは私に大きな苦しみを引き起こしました。私はあなたのArduinoの知識の前に身をかがめ、私のコードでエラーを見つけただけでなく、プロセス全体を進めるためのはるかに良い方法を教えてくれてありがとう!心より感謝申し上げます。うわー、私は間違いなくArduinoのチュートリアルを深く掘り下げます!うまくいけば、私はいつかこの主題についてあなたと同じくらい知識があるでしょう!
ありがとう、でもそれで十分です。私たちは皆、その時点から始めました。それはすべて学習体験についてです。あなたは私の答えを正しいものとして受け入れることができます、あなたが思うなら、それは正しいです。そして、いつか戻ってきて、自分で質問に答えたいと思うかもしれません。私たちは常に新しい貢献者を見つけて幸せです:D
よくできました。問題をよりエレガントに解決するために配列を使用することについて、焦点を絞った回答とガイダンスの両方を提供します。 (投票済み)ビットマスキングとシフトを使用してバイナリをデコードすることを初心者に説明するつもりはないと思います...
*現在コンパイラが手元にないため)* https://godbolt.org/、MattGodboltのコンパイラエクスプローラをお勧めします。 ARMおよびAVR用のGCCを含む、GCC、Clang、MSVC、およびICCがインストールされています。ソース行をasm出力行に一致させるための色の強調表示付き。 (そして、C、C ++、Rust、Go、Haskellなどの言語...)ARM cortex M3用にCとしてコンパイルされたコード:https://godbolt.org/z/-K_muB
gnasher729
2019-12-02 05:30:18 UTC
view on stackexchange narkive permalink

バグを見つけましたが、どうすれば簡単に見つけることができますか?

精神的に最も重要なステップは、あなたが何か間違ったことをしたことを受け入れることです。まだ何がわからないのですが、コンパイラが正しいコードについて文句を言う可能性はほとんどありません。だから問題は:あなたは何を間違えたのですか?

コンパイラは関数「thirtyBullets」について文句を言いました。 「twentynineBullets」については文句を言わなかった。 「thirtyBullets」という機能があることに気づいていません。まず、スペルをチェックします。関数に誤って「thirrtyBullets」という名前を付けた場合、それは物事を説明するでしょう。しかし、その名前は正しいです。

次に、コンパイラが関数の開始直後の行について文句を言うことがわかります。コンパイラが何について不平を言っているのか理解するのは難しいので、あなたが直前にしたことはそれを混乱させました。したがって、「void thirtyBullets()」という行をチェックします。これで、次の行「digitalWrite(one、LOW);」はOKです。見た目は問題ありませんが、ここで何かが間違っている必要があります。ここで、不足している「{」を見つけてください。

Artelius
2019-12-02 16:47:29 UTC
view on stackexchange narkive permalink

配列を使用するという考えに追加するだけです。Cは空白を気にしないため、次のようにデータを非常に簡単にフォーマットできます。

  uint8_t led_pa​​ttern [10] [7] = {{0、//数字のパターン0 0、0、0、0、0、0}、{0、//数字のパターン1 0、1、0、0、1、0}、{1、 //数字のパターン20、1、1、1、0、1}、...};  

これは、コードを作成する「良い習慣」の例です。マシンに指示するのではなく、意図について。コードを明確にするために50%多くの時間を費やすか、コードのデバッグに500%多くの時間を費やすことができます。ことわざにあるように、

ソフトウェアを開発するには、2つの方法があります。明らかにバグがないように単純にする方法と、明らかなバグがないように複雑にする方法です。

注:上記のコードは、ピンとは異なる順序でdigitalOut値を提供します(したがって、chrislの for ループは機能しません)。 Digit を表示するときに正しいピンに手動で7つのdigitalWriteを実行します。

  digitalWrite(<pin number>、led_pa​​ttern [digit] [<led position>]);  
RDragonrydr
2020-06-18 21:07:41 UTC
view on stackexchange narkive permalink

あなたのコードは実際には悪くありません。この種のピンマッピングを行うための良い方法はそれほど多くありません。また、独自の欠点もあるいくつかの方法があります。主な問題は、drawThirty関数をチェックして見つけたブラケットの欠落でした。これは、具体的に言及されており、セミコロンまたはブラケットの欠落を意味するカスケードエラーがあったためです。

さらに微調整すると、コードはでのみ機能します。 Arduino(つまり、問題はありませんが、別のIDEが怒ってしまう可能性があります)。 Cはファイル全体で関数名を検索しないため、使用後に関数を宣言/定義すると、エラーが発生します。 Arduinoは、特別なプリパーサーを使用してこれを修正します。

適切な方法は、次のように関数を前方宣言することです。

  int returnAPieceOfData(byte x、char c、int i); // Cは、それがどこかに存在し、エラーが発生しないことを認識しています。voidfoo(){//ここのどこかにreturnAPieceOfData} int returnAPieceOfData(byte x、char c、int i){//あなた使用後に関数を定義しますが、エラーはありません!}  

これにより、通常、すべての関数が先頭で宣言されたCファイルが生成され、以下の関数定義で使用できます。問題なく任意の順序でそれらを。また、ファイルに機能があるかどうか、同じ順序で追加した場合、どこにあるかを簡単に見分けることができます。


交互に実装する潜在的に有用な方法について説明します。ピンを書き込むための配列ルックアップテーブル。上記は非常に良い提案であり、特に整形された空白ですが、そのアプローチはピクセルあたりのフルバイトを使用するため、多くの余分なメモリを使用します。

やや難しいフォーマットを受け入れる場合視覚化すると、スペース全体を1バイトにエンコードできます。これを以下に示します。 ピン番号を配列に入れて、 FORループを使用できるようにすることもできます。

基本的に、この種のシステムを作成する場合、2つのオプションがあります。あなたはあなたの例がしたことであるコードの複雑さのために行くことができます、あるいはあなたは私がここに示しているメモリ/データの複雑さのために行くことができます。この手法の欠点は、データがやや難解で変更が難しいこと(エンコードされていて、データがかなり多いため)、およびそのデータを保持するために余分なメモリを使用することです。

  void drawAllSegments(byte ammo_ct){byte hi = ammo_ct / 10;バイトlo = ammo_ct%10; drawLowSegments(lo); drawHighSegments(hi);} byte lpinNums [] = {apin、bpin、cpin、dpin、epin、fpin、gpin}; //一方のピンdisplaybytehpinNums [] = {apin、bpin、cpin、dpin、epin、fpin、 gpin}; // 10秒のピンdisplaybytenumbers [] = {0b00111111,0b01111001、...}; //「numbers」を0bXGFEDCBAとしてフォーマットします。ここで、Xはドントケア//(その値は使用されません) 0または1のいずれかになります)//私の例は間違っている可能性があります。ネガティブロジックだと思いますが、その上でエラーが発生した可能性もあります。voiddrawLowSegments(byte ammo_ct){digitalWrite(one、HIGH); //表示を設定しますselectdigitalWrite(ten、LOW); for(byte i = 0; i<7; i ++){//次に描画!バイト状態=(numbers [ammo_ct] >>i)&0x01; //そのセグメントの状態を解凍しますdigitalWrite(lpinNums [i]、state); }} void drawHighSegments(byte ammo_ct){digitalWrite(one、HIGH); //表示を設定しますselectdigitalWrite(ten、LOW); for(byte i = 0; i<7; i ++){//次に描画!バイト状態=(numbers [ammo_ct] >>i)&0x01; //そのセグメントの状態を解凍しますdigitalWrite(hpinNums [i]、state); }}  

このアプローチの利点は、コードがアレイシステムと同じくらいコンパクトであるが、そのアレイに1/8のRAMを使用することです。大量のRAMを使用するようなことをしているとは思いませんが、可能な限り最小化することをお勧めします。この場合、RAMが不足する前により多くの数値を収めることができるため、さらに拡張可能です。

PROGMEMに切り替えることもできますが、それを読み取ることはいくつかの点で少し奇妙であり、そもそもそれを読み取ることを忘れがちです(ランダムRAMの読み取りになります)。この場合、それ以上の最適化が必要ないほど十分に小さい必要があります。

最後の注意点は、バイトが小さすぎることを行った場合、最大でより大きな数値を使用できることです。有用なピクセルの32ビットであるuint32_t、または64ビットである可能性があるuint64_tですが、Arduinoではサポートされていない可能性があります(後者は試したことがありません)。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 4.0ライセンスに感謝します。
Loading...