作ってみたものの話。

気になって作ってみたものの記録。

COBOLの話2 書き方を覚える

書き方が細かいようなので色々試してみた。

全部大文字で書いても

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-01.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
      *
       PROCEDURE DIVISION.
       MAIN.
       DISPLAY "Hello World!" UPON CONSOLE.
       STOP RUN.

全部小文字で書いても

       identification division.
       program-id. sample-01-02.
      *
       environment division.
      *
       data division.
      *
       procedure division.
       main.
       display "hello world!" upon console.
       stop run.

キャメルケースで書いても動く。

       Identification Division.
       Program-id. Sample-01-03.
      *
       Environment Division.
      *
       Data Division.
      *
       Procedure Division.
       Main.
       Display "hello world!" Upon Console.
       Stop Run.

特に全部大文字じゃないとだめとかそういうことではないようだ。


何回も繰り返すには
「PERFORM n TIMES」~「END-PERFORM」の中に処理を書く。
nは回数。ただ、囲った中の処理では処理の最後に「.」いらない。
あると動かない。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-04.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
      *
       PROCEDURE DIVISION.
       PERFORM 5 TIMES
         DISPLAY "Hello World!" UPON CONSOLE
       END-PERFORM
       STOP RUN.

指定回数繰り返せる感じ。

変数定義しても行ける。
ただ、CNTの値は変化しないのでDISPLAYで表示されるCNTはずっと5のまま。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-04.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 CNT PIC 9(3) VALUE 5. 
       PROCEDURE DIVISION.
       PERFORM CNT TIMES
         DISPLAY "Hello World!" CNT UPON CONSOLE
       END-PERFORM
       STOP RUN.

「DATA DIVISION.
WORKING-STORAGE SECTION.」
↑が変数定義する場所っていう記述

「 01 CNT PIC 9(3) VALUE 5. 」
変数は頭に数値をつける様子。(「01」の部分。付け方は検索すれば出てきます。)
CNTが変数名。
PICがPICTURE句。英字,数字,英数字,英数字編集,及び数字編集のどれかっていうのを次に続く数値で示す。
9:変数の型を示す。9は数値を示す。他には型によって「P」,「S」,及び「V」がある。
(3):前の数値の型の桁数。9(3)で数字3桁という意味。
VALUE 5:変数CNTの初期値5。

CのWhile文ぽくも使える。
>=とかも使える。
COBOLって開始は1~が多いんかな?
個人的には0始まりが落ち着くけど。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-05.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
       WORKING-STORAGE            SECTION.
       01 CNT PIC 9(3) VALUE 0.
       PROCEDURE DIVISION.
       PERFORM UNTIL CNT >= 10
        ADD 1 TO CNT
        DISPLAY "Hello World!" CNT UPON CONSOLE
       END-PERFORM
       STOP RUN.

こっちはfor文っぽいやつ

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-06.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
       WORKING-STORAGE            SECTION.
       01 CNT PIC 9(3) VALUE 0.
       PROCEDURE DIVISION.
       PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT >10
        DISPLAY "Hello World!" CNT UPON CONSOLE
       END-PERFORM
       STOP RUN.

なかなか色々あるなぁ。。。
今日はここまで。

COBOLの話。

一緒に仕事をしてる方が次の仕事がCOBOLらしく
COBOLCOBOL言ってるんでちょっと調べてみた。

とりあえずどうしたらハローワールドできるかあたりまで。

環境はWindowsで。
適当にコンパイルできるんかなとか思ったら
そんなこともなくなんか大変そう(゚Д゚)

そもそもLinuxろくに使ったこともないから
よくわからず・・・。


以下サイトを参考に試すも
opensource COBOLのmakeでコンパイルエラー出るんだけど。。。
https://kunst1080.hatenablog.com/entry/2015/05/07/235848
Cygwinも試したけど途中で挫折。


ということでVMWAREでCentOS8入れました。
VMware Workstation Player のダウンロード | VMware | JP

以下サイトを参考に入れました。
CentOS8をVMwareWorkstationにインストール - Qiita


日本語に設定したら、日本語入力できないと困ったので
以下サイトを参考に日本語入力(かな・漢字)を入れる。
CentOS8での日本語入力 | コリオのブログ


とりあえず以下書いてSAMPLE-01.cobで保存。
書き方とかは検索。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-01.
      *
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
      *
       PROCEDURE DIVISION.
       MAIN.
       DISPLAY "Hello World!" UPON CONSOLE.
       STOP RUN.

保存した場所に移動して
「cobc -x SAMPLE-01.cob」すると
なんでか1回目は定義ないよエラー出たけど
実行ファイルは出来てた。なんで?

とりあえず「./SAMPLE-01」で実行すると
「./SAMPLE-01: error while loading shared libraries: libcob.so.4: cannot open shared object file: No such file or directory」

キェェェェ(# ゚Д゚)
パスが通ってない様子。
「/usr/local/lib」の中に「libcob.so.4」はあった。

他にリンク通ってないのがないか一応調べる。
「ldd ./SAMPLE-01」

とりあえず「libcob.so.4」だけみたいなので 
「export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH」変数設定する。

後で旦那に聞いたら自分しか使わないなら
起動すると消えちゃうからroot直下の.bash_profileに書いとけばいいんじゃないって言われた。
本来ならユーザごとにあるからそっちに書くらしい。

rootいって「ls -la」で一覧見れる。
とりあえずviで開く。「vi .bash_profile 」

viの使い方は検索する。

「PATH=$PATH:$HOME/bin」とか書かれてる下に
「export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH」って
書いておけば起動時に読み込まれるからOKぽい。


脱線したけどとりあえずリンク通ったか確認。
「ldd ./SAMPLE-01」

無事リンク通ってるのが確認できたので実行。

ヾ(*´∀`*)ノ ヾ(*´∀`*)ノ ヾ(*´∀`*)ノ

折り紙 その1 板ガムの折り紙で箱を作る。

最近あまりガムを食べることがなかったので
気が付かなかったのですが、板ガムに折り紙がついています。

おりがみ部
www.lotte.co.jp

すごいいろいろ柄があって
探して買いたくなってしまう(笑)

その折り紙で久々に箱を作ってみました。
小学校の時ずっと量産してた記憶があります。

こんなやつ。

3枚で三角
6枚で四角
12枚でトゲトゲ。

作り方はよ!と言われたので書いてみました。
何かに載ってたのか誰かに教えてもらったのか
わからないけど量産した成果で今も作れる。

手書きだとこんな感じ。

絵とか下手なのでわかりにくかと思い
画像があります。

①半分に折る

③中央の線まで両端を折る

⑤左上と右下の角を折る

⑥左端を中央の先まで折る

⑦左下の角を右の線まで折る

⑧右端を中央の線まで折る

⑨右上の角を左端まで折る

⑩折ったところを開いて下の紙に差し込む

⑪白い模様にしたいときは斜めに折り返す

⑫裏返して四角に折りたたむ

⑬これを12個作る


⑭あとは組立てです。

⑮3つずつ三角になるように組み合わせます。

差し込む。

差し込む。

差し込む。

完成。

⑯これを4つ作ります。

⑰4つを組み合わせていきます。

⑮で作った時と同じように三角になるように
組み合わせます。

角を差し込む。

2個くっつけたところ。

3つくっつけたところ。

完成


以上です(`・ω・´)ゞ

アーテックロボ 4day いきなり衝突回避カーを作る その3

最後に赤外線フォトリフレクタの使い方です。

本体とPCを接続すると
右側にセンサの値が出ていると思います。
「センセーボード」ってかいてあるやつ。
(画像緑枠で囲った部分)

その一番下に[P0]赤外線フォトリフレクタ
[P1]赤外線フォトリフレクタという項目があります。
(画像青枠で囲った部分)

これが本体につけたセンサーの検出する値を
表示してくれます。

センサーの前に手をかざすと
値が変わるのが確認できます。

ゆっくり近づけるとこれぐらいが1でした。

この距離で障害物を検知して避けることになります。

赤外線フォトリフレクタの検出の値は
調べるの項目の一番下にあります。


赤外線フォトリフレクタの値が
1より大きくなったときに障害物があると
認識するには「もし赤外線フォトリフレクタP0が1以上だったら」
という条件が必要になります。

条件を入れるには
「( ) > 10」のパーツに
「赤外線フォトリフレクタ P0」を
ドラッグして、右の値を1に書き換えて
「(赤外線フォトリフレクタ P0) > 1」とします。

こんな感じでドラッグ。

これで「フォトリフレクタP0が1以上」が完成。

あとは「もし~なら」に入れて
条件が完成します。

私の車の赤外線フォトリフレクタP0は右側についているので
右側に障害物を検知したらバックで右に下り
直進することで障害物を避ける動きを作ります。

動きを繰り返すので繰り返しで囲み、
前進する動きを入れます。

もし前進の間にセンサーを感知したら
3秒間バックで右に下ります。

そしてまた前進します。

こんな感じ。

これで右側は避けれるようになります。
左側も同じように作ってあげます。

簡単に作るとこんな感じで動作すると思います。

動いたものの改善するところもあります。

・毎回一瞬前進する
・必ず障害物を右側から検出する動きになるので
 両方検出した場合にどちらに避けるのか
・どれぐらいバックで曲がるのが良いか

などいろいろあります。

また気が向いたら改善したのを
書いていこうかと思います。

とりあえず動かすのはここまで(。ゝω・。)ゞ

アーテックロボ 3day いきなり衝突回避カーを作る その2

前回前に進む、止めるまでだったので
次は曲がるを作っていきます。

右に曲がるには
右のタイヤを止めて
左のタイヤを動かす。

左に曲がるには
左のタイヤを止めて
右にタイヤを動かす。

こんな感じにすると左右に曲がれます。

今回作るのは衝突回避なので
バックで左右に曲がるようにして
障害物を避けたいです。

ということで後ろに進むには
モーターの回転方向を設定します。

DCモーターを正転、逆転を設定します。

車の作り方によっては正転で前に進むはずが
後ろに進んだりします。
その場合は前に進むときは逆転を設定して
後ろに進む場合は正転を設定します。
(私の場合逆につけてしまったので
正転でバック、逆転で前進します)


後は後ろ右方向に曲がるには
モーターの回転方向を後ろに進むように設定し
左のタイヤを止めて
右にタイヤを動かす。

後ろ左方向に曲がるには
モーターの回転方向を後ろに進むように設定し
右のタイヤを止めて
左のタイヤを動かす。


これを組み合わせることで
車自体の動きは動かすことができるようになります。

組み合わせる場合は
この動きを5秒間動かすとか
ずっと繰り返すとかを使って動かします。
(ただくっつけただけだと
 一番最後に設定した内容でしか動きません)

2秒前進→2秒後退→バックで左に曲がる→前進で右に曲がるを
繰り返す場合は以下のような感じ。

何回繰り返すとか
条件とかもいろいろあるので使って動かしてみると
いいかも(*´ω`*)

次は赤外線フォトリフレクタの使い方を
書いていきます(。ゝω・。)ゞ

アーテックロボ 2day いきなり衝突回避カーを作る その1

チュートリアル的にLEDの色変えてみたり・・・
とかしてる間に飽きてしまうのでいきなり車作る(`・ω・´)ゞ

ということで材料を用意します。

本体、DCモーター2個、タイヤ(ゴムと歯車)2個、接続ケーブル2本
電池入れるバッテリー部分、単三電池3個、フォトリフレクタ2個
アーテックのブロック少々

これを組み立てます。

①歯車にゴムをはめて車輪にします。
②車輪はモーターにはまるのではめます。
 両方のモーターに片側ずつはめて、使用しない方の
 車輪にくっつけるパーツは外れるので外しておきます。
 (ケーブルが絡まりそうだったので)

③白い長いブロックを本体裏側にくっつけます。

④本体にDCモーターをくっつけます。
 ケーブルはポートのM1、M2に挿します。

⑤センサーを前面に設置します。
 センサーには短いケーブル2本を接続しておきます。
 ケーブルはポートP0、P1に挿します。

 

⑥前面にブロックをこんな感じでくっつけて
 前に倒れないようにします。

⑦本体上部に電池ボックスを設置します。

これで組み立て完了。

ここからソフトで動くように
プログラムを作っていきます。

イメージとしてはこんな感じ?
・障害物がなければまっすぐ走る。
・障害物があれば少し下がって障害物のないほうに曲がる。
・障害物は左右2つのセンサーで確認する。

まずは1個の障害物が避けられるところまで作ります。

①Studuion bit(インストールした環境)を開きます。
②ロボットモードを選択します。
③「編集→入出力設定」から接続したポートを設定します。
 ・M1、M2にはDCモーターを設置したのでDCモーターを設定
 ・P0、P1には赤外線フォトリフレクタを設定したので赤外線フォトリフレクタを設定。
 ・設定したら右下の「割り当て」ボタンを押す。

③プログラムを作っていく。

まずは流れ図書いてみました。
凄いざっくり。

・まっすぐ進む
 真っ直ぐ進む場合はモータの速度を設定します。
 止まる場合は0にすると止まります。

 モーターは左右あるのでM1,M2につないだ
 両方のモーターを同じ速度にすると前に進みます。

旗がクリックされたときは、
プログラムのはじめとして利用しています。

ここまで書いたら
本体とPCをUSBで接続して「編集→接続」から接続します。

そして、速度100のプログラムをクリックしてみます。
前進してくれるはず・・・(*´ω`*)

止めたいときは速度0のプログラムを押すと止まります。

タイヤが片方しか動かない場合は同じ方のモーターに
速度を設定していないかとか確認。

両方動かない場合はバッテリーが
モーターやセンサーをつないでいる方に
つながっているか確認。

こんな感じで前に進めると思います。

遅くなったので今日はここまで( ˘ω˘)スヤァ

アーテックロボ 1day アーテックロボ2.0を買ってみました。

ツクモロボット王国でケースに入った状態で
販売されていたので買ってみました。

blog.tsukumo.co.jp


アーテック アーテックロボ2.0アドバンスキットを買いました。
理由は透明ケースに入っていて片付けが楽そうだったからです!!

まじで片付け大事。
ブロックとかパーツごとにジップロックに入れておけば
ばらけないし、とても便利ですよ。

開封すると・・・
なんかいろいろ入っています(*´ω`*)

説明書的なものはないです。
(同梱し忘れたらしいので後日届くそうです)

なのでWebから持ってきます。
www.artec-kk.co.jp


まだあんまり情報はないですが、環境とかはそろいます。

ソフトウェアダウンロードからWindows用の環境をダウンロードします。
(MacOSとかスマホ版はこれからなのかな?)

・セットアップマニュアル
  :インストール方法とかが書かれているので
   読んで手順通りに以下2つのソフトをインストールします。
・ソフトウェアダウンロード
  :開発環境
・USBデバイスドライバダウンロード
  :USBのドライバ(本体とPCをつなぐUSBのドライバです)


ここまで来たら箱の中から本体を探します。
こういうやつ。

これが本体で、USBとかバッテリーとかの口がついてます。

あと台座+ポート拡張ができるパーツがあります。
本体の下側のキャップを外すと結合できます。

こんな感じ。

これをUSB(PC側)とマイクロUSB(本体側)で接続します。

アーテックロボ2.0のページの
説明書・サンプルプログラムダウンロードから
「ArtecRobo2.0取扱説明書」を開きます。

項目「3.メインユニット(Studuino:bit)の起動方法」を開いて
本体の起動方法を確認します。

引き続いて項目「4. サンプルプログラムの操作方法」を開いて
サンプルプログラムが動くか確認できます。

この辺は取説に書いてあります。


続いてソフトを起動します。

するとロボットモードとキャラクターモードが選べるので
ロボットモードを選択します。

プログラムが作れる画面が出てくると思います。

まずは本体にUSBを挿して、接続を押します。

するとファームウェアアップデートしますみたいなのが
表示されるのでアップデートしてください。
(私のはこれしないとうまく動かなかったです)

アップデートが終わったら
ここからいろいろ作っていけます。

まずは始める前の準備まで。