|
|
|
準備編
|
|
TOPページ > コンピューターROMチューン入門 > マイコン制御方法
概要:
マイコン制御の作成。プログラムの作成。随時更新中。
ペリを制御するサイトは知る限りこのサイトしかない!またプロ方々の記事もないので、試行錯誤して作成しているので、結果的に嘘になってしまったらごめんなさい。素人の趣味レベルの電気知識と素人プログラマーだと思って読んでいただければと思います。。
|
|
|
|
■コンパイルエラーからの離脱!:
今日こそ朝勉でクリアするぞい!とプログラムソフトを起動。
メニューから「スケッチ」−「検証・コンパイル」を選択します。
本日も大量エラー。
これらを何をして回避したのか代表的なエラーを抜粋して具体的に掲載します。
ちなみにプログラム名(バージョン)は Arduino: 1.7.6 (Windows 8.1)
マイコンボードは:"Arduino Uno"の環境で作成。
プログラム名:Peri01→Peri02と更新しました。このことを頭に入れて以下のエラーを見て頂ければと思います。
はじめのころわからずプログラムをきれいにスペースキーを使って並べた。
それがそもそもの間違い。
そんなところから始まります。
◆エラー1:
Peri02.ino:99:4: error: stray '\' in program ⇔ これって全角が入っているよ!という意味
※ちなみに、Peri02とはプログラム名で99:4は行数を表しているようです。
◆対応1:
私の場合初心者なもんで ; の後でも全角空白がだめなのを知らなかったので、サクラエディターで起動して探して削除。
その後大量に修正する羽目に。
以下はサクラエディターでプログラムを開くと全角が四角形で表示されているので、すぐ探せます。
//のあとはメモ書きなので全角OKなんですよ。
◆エラー2:
Peri01.ino:50:5: error: 'X1' was not declared in this scope ⇔ 「X1はスコープ内に宣言されてない」という意味。
エラー先プログラムの原文
if (IG12 & IG1 == HIGH) {
newtime = micros();
oldtime = newtime;
newtime = micros();
X1 = oldtime - newtime;
oldtime = newtime;
◆対応2:
何が問題かというと以下のプログラムで、実はX1が何なのか宣言していなかった。
具体的には、事前にX1は何か?をプログラムに教えてあげるんだけど。
ほかのoldtimeとかはしてあったんだけど、X1だけ抜けていたというわけ。
実は、こんな簡単なことが私は先に進まない原因だった。
知らないものは知らない。でも時間をかければ解決できる。素人だから関係ないですからねぇ。
float X1 = 0; //X1は差分計算用代入用初期化
と宣言してエラー回避出来ました。
◆エラー3:
Peri01.ino:81:7: error: 'elase' was not declared in this scope ⇔ 「elaseはスコープ内に宣言されてない」という意味。
エラー先プログラムの原文
elase{
int threshold1 = 409;
if (ValW >= threshold1)
delaytime = 1.05;
}
◆対応3:
超恥ずかしースペルミス。
英語の成績が「2」常連だったことがバレる。
elase → else
これって、if 文のオプション的な存在なんですが、
スペルミスしたので、プログラムからするとX1と同様これ何?となったわけです。
◆エラー4:
Peri01.ino:22:1: error: stray '\' in program ⇔ またまた全角!!
エラー先プログラムの原文
float X1; //X1は差分計算用代入用
◆対応4:
修正時にまた全角入れていた。 ; と // の間を削除!
コメントを読みやすくスペースを入れたのが失敗。
寂しー限りです。
◆エラー5:
Peri01.ino:319:22: error: 'IJBA860s' was not declared in this scope
エラー先プログラムの原文
digitalWrite(IJB550, HIGH);
digitalWrite(IJB860m, HIGH);
digitalWrite(IJBA860s, HIGH);
◆対応5:
これは簡単!というか設計書が頭の中にしかない私にしか修正できないエラー。
IJBA860sをIJB860s
◆エラー6:
Peri01.ino: In function 'void loop()':
Peri01.ino:334:3: error: expected '}' at end of input
◆対応6:
実はプログラムを作成する際プログラムのルールで{ }で作るのですが、それが足りないというエラー。
最初は紙に印刷して蛍光ペンで探していたのですが、完璧と思ったがこれが最後のエラー。
そしたら、奥さん便利なものがあるじゃない。
メニューで「ツール」-「自動整形」を選んだら、最後の行に } が一番左にない。
そうペアになって自動で段落をつけて表示されるじゃないですか?
だったら、早くいじって気が付けばよかった。
大量のプログラムを スペースキー でひたすら揃えていた。
素人て怖い。採算無視の暴挙ですね。
最後に検証・コンパイルを選んだら。以下のメッセージが出ました。
スケッチが プログラムストレージ領域の 5,950バイト (18%) を使用しています。最大は
32,256バイト です。
グローバル変数が 57バイト (2%) の 動的メモリを使用しており、ローカル変数に
1,991 バイトが残っています。最高は 2,048バイトですArduino: 1.7.6 (Windows
8.1), ボード:"Arduino Uno"
そうです。合格証書です。
ただし、あくまでも構文が正しいだけでプログラムが正しく動くかは別。
車の車検と同じで、重要な部分を調べただけで、故障はしなくなったわけではない。
プログラム等は公開しますがもう少し待ってくださいね。
このあと、テストしてとりあえず動くようになったら公開して、Arduino に具体的にインストールする方法を公開します。
電源回路を作成してエンジンノイズから無事動作するのか?
水温センサーの読み取りテスト、点火と回転数計算のテストなど。
実際の中古車から取ったセンサーの性能を調べてプログラムの修正をする予定です。
まずは、水温センサーからですかねぇ。
O2センサーはどうやろうかな?実車で装着してテストですかねぇ。
|
|
|
|
|
|