Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Arduino UNO系でも動くLISP実装 uLISP その5:obnizでシリアル通信をうける

実際のところ

obniz側

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body>

    <div id="obniz-debug"></div>
    <h1>obniz instant HTML</h1>

    <script>
      var obniz = new Obniz("YOURID")
      
      obniz.onconnect = async function(){
        obniz.uart0.start({tx:0, rx:1, baud: 9600})
        while(1){
            if(obniz.uart0.isDataExists()){
                console.log(obniz.uart0.readText());
            }
            await obniz.wait(100);  //wait for 100ms
        }
      }
      
    </script>
  </body>
</html>

uLisp側

 (with-serial (str 2 96)(delay 500) (loop(write-line "123" str)(delay 1000)))

実行結果

f:id:shuzo_kino:20190709004200p:plain

【読書メモ】習慣の力

習慣の力 The Power of Habit (講談社+α文庫)

習慣の力 The Power of Habit (講談社+α文庫)

タイトルの通り、習慣に関する本です。
このブログや中国語学習が何やかんやで続いてるように、私個人は割と習慣化が得意なクチです。
f:id:shuzo_kino:20190707222152p:plain
とはいえ何かパターンがあるわけでも無いので、今後のヒントになればと思い手に取りました。

著者によると、結局のところ、習慣というのは脳の報酬系に記憶されたパターン化なのだそうです。
ラットを用いた実験では一度習慣になると思考せずにそういう行動をとるようになったと指摘されています。

また、依存症の類は結果に対する脳みその解釈の違いである事が示されています。
たとえば、ギャブルで負けた時に「今のは惜しかった」とする解釈系か、
あるいは「負けは負け」と解釈する報酬系で依存症になるかが決まると。
言うまでもなく、依存症になるのは前者ですね。


さらに、個人のことばかりでなく、悪い習慣で硬直化して大事故をおこした組織とその習慣の改善の一連なんかも載ってます。
ja.wikipedia.org



文庫本版もでたようです。

文庫本版も出たようです。

習慣の力〔新版〕 (ハヤカワ・ノンフィクション文庫)

習慣の力〔新版〕 (ハヤカワ・ノンフィクション文庫)

【読書メモ】2日で人生が変わる「箱」の法則 決定版 人間関係のモヤモヤを解決するために

2日で人生が変わる「箱」の法則 決定版  人間関係のモヤモヤを解決するために

2日で人生が変わる「箱」の法則 決定版 人間関係のモヤモヤを解決するために

海外の本でよくある、小説仕立てのビジネス本です。

自己啓発系の、特にクレーム対応や交渉の本では「相手の立場にたって物事をみる」というのがよく紹介されています。
私はこの「相手の立場」というのが非常に苦手で、常人なら耐えられる局面を放り出したかと思えば、
逆に夜も眠れなくなるらしい局面でも平然としていたりします。

この本にはそういった物の見方を「箱」に見立て、どう解釈するべきか教えてくれます。

結局のところ、他人はそうそう変わらないのだから自分の解釈を変更するのが最優先だと。
似たような話は世界各国で色々と言葉を変え、立場を変え言われていますね。

「恨みの念とは、自分で毒を飲んでおきながら、これで敵を殺せると期待するようなものだ」 ネルソン・マンデラ(南ア、反アパルトヘイト運動指導者、第8代大統領)

私心とは、お世辞を聞いて喜ぶが、非難を耳にして怒る「自我」の心から生まれるもので、人が身を立て事業を完遂する上における一大強敵である



その次に、相手を望ましい方向にいくよう手助けをするのが良い……といった論旨でした。
私個人は、私自身が相手に望む事が必ずしも相手の幸福に繋がるとは思っていないクチなので、ここはちょっと引っかかりましたけど円。




旧版を持っている人は買い直さなくてもいいらしい

2日で人生が変わる「箱」の法則

2日で人生が変わる「箱」の法則

の焼き直しらしく補講以外はほぼ同じとのこと。

【イベントログ】インターフェックスWeek2019に行ってきました

医薬産業向けの展示会インターフェックスWeek2019に行ってきました。

展示会の性質上、他のイベント以上に撮影禁止が多かったです……。
動画撮った程度で漏れる内容なら出すなって個人的には思っちゃいますね。

定量滴下機

組み立て式冷蔵倉庫

医療向けロボットシステムのセミオーダー

搬送ロボット。
板の上をシームレスに動きます。
購入するとプログラミング講習も付いてくるそうです。

キムワイプ

デカいお鍋を持ち上げて傾ける装置……!!

Arduino UNO系でも動くLISP実装 uLISP その4:obnizからシリアル通信を送る

実際のところ

ポート的に限界があるため、Mega系列のシリアル2番を使いました。

obniz側

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body>

    <div id="obniz-debug"></div>
    <h1>obniz instant HTML</h1>

    <script>
      var obniz = new Obniz("YOURID")
      
      obniz.onconnect = async function(){
        obniz.uart0.start({tx:0, rx:1, baud: 9600})
        while(1){
            obniz.uart0.send("1\n");
            if(obniz.uart0.isDataExists()){
                console.log(obniz.uart0.readByte());
            }
            await obniz.wait(100);  //wait for 100ms
        }
      }
      
    </script>
  </body>
</html>

uLisp側

どこかの莫迦のようにポート指定後速攻でアレしてもだめです。
以下の例のように間をおくか、あるいはavailavle?系関数を自前で作るとよいでしょう。

(with-serial (str 2 96)(delay 500) (loop(print (read-line str))(delay 100)))

実行結果

uLisp 2.7 
1213> (with-serial (str 2 96)(delay 500) (loop(print (read-line str))(delay 100)))

"1" 
"1" 
"1" 
"1" 
...

Arduino UNO系でも動くLISP実装 uLISP その3:シリアル通信をやる

お ま た せ。
シリアル通信をやります。

実際のところ

シリアル通信はこんな構文

(with-serial (stream port [baud]) form*)

というわけで……ストリームを"str"にいれて、Portは0番を使い、ボーレートは115200……のときは以下の通り。

(with-serial (str 0 1152)
                    (loop(print (read-line str)))   
)

0番はシリアルモニター直結なので、文字を送信するとループバックします。

MEGA等々、複数のシリアルポートを持って居るボードならPortの番号を変更してあげればシリアルモニターのとは別に通信可能です。

Arduino UNO系でも動くLISP実装 uLISP その2:Digital/Analog Pinを扱う

Arduinoの上で動いているので、DigitalやAnalogも使えます。
公式リファレンスによると以下のような関数があります。

Arduino interface
millis, for-millis, with-i2c, restart-i2c, with-serial, with-spi, with-sd-card, pinmode, digitalread, digitalwrite, analogread, analogwrite, delay, note

今回は、このうちDigital PinとAnalog Pinの扱いについて

実際のところ

pinmode

13番ピンを出力(=1 or t)に。

;; OUT :: 1 or t
 (pinmode 13 t) 

;; IN :: 0 or nil
 (pinmode 13 nil)

digitalread

D4を入力に。番号はボードを参照してください。

(digitalread 4)

digitalwrite

13番をHIGH/LOWに

;; OUT :: 1 or t
(digitalwrite 13 t)

;; IN :: 0 or nil
(digitalwrite 13 nil)

analogread

UNOのA3(3番)を読むのは以下の通り。
結果はt (HIGH) または nil (LOW)でかえってきます。

(analogread 3)

公式によると、"A0"等の記法を使いたいのなら変数を使え……とのこと。
たとえばArduino ZeroでA0は15番なので

(defvar A0 15)

analogwrite

PWMでアナログ出力を実行します。

;; 3番に512を
(analogwrite 3 512)

ピンの対応関係はArduino IDEでやるときと同じ筈……ですが、一応確認してから使ってください。
uLisp - Language reference
Arduino Reference