PIC16F1789 & MPUトレーナー 3 / L チカを行う

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.41-51 1. 前回作った framework.X をフォルダーごとコピーしてフォルダー名を「led_on.X」に変える。 2. MPLAB X IDE を起動する。 3. メニューバーか…

PIC16F1789 & MPUトレーナー 2 / フレームワークを作成する

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.28-36 以降共通して使用するためのフレームワークを作成する。 1. MPLAB X IDE を起動し、メニューバーから [File] > [New Project] の順に選択する。…

PIC16F1789 & MPUトレーナー 1 / 開発環境を整える

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.19-20 下の手順に従って、「統合開発環境 MPLAB X IDE」「C コンパイラ XC8」「コンフィグレーション用ツール MPLAB Code Configurator」の順にインス…

TI-Nspire & Lua / スクリプティングのヒント / 自作の描画函数も出来合いの描画函数と同じように実行できるようにする

参考: http://adriweb.free.fr/t3/2013/Powerpoint_Advanced_TI-Nspire_Lua_Programming.pptx, p.25 --[[普通の方法 function drawCircle(centerX, centerY, radius, gc) -- 中心座標で円を描くための自作函数 local diameter = radius + radius gc:drawArc(…

TI-Nspire & Lua / スクリプティングのヒント / Nspire 側の変数を Lua に呼ぶときは on.timer() 内で var.recall() を使うのではなく var.monitor() と on.varChange() とを使う

参考: http://adriweb.free.fr/t3/2013/Powerpoint_Advanced_TI-Nspire_Lua_Programming.pptx, p.22 .lua --[[方法 1. on.timer() 内で var.recall() を使う local slider1 = nil function on.construction() on.timer() -- 最初に Nspire 側の変数の初期値…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 9 of 9 / メモ化する

参考: Programming in Lua プログラミング言語Lua公式解説書, p.194-200 http://adriweb.free.fr/t3/2013/Powerpoint_Advanced_TI-Nspire_Lua_Programming.pptx, p.15 お気楽 Lua プログラミング超入門 -- 竹内函数を定義する。これをメモ化してみる。 funct…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 8 / スタックを実装する

参考: お気楽 Lua プログラミング超入門 Stack = class() function Stack:init(size) self.buff = {} self.size = size or math.huge end function Stack:push(val) if #self.buff < self.size then table.insert(self.buff, val) else error("Error: Stack …

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 7 / メタテーブルを直接使わずにクラスを利用する

Nspired Lua は class() ライブラリーが実装してあるのでメタテーブルを直接使わずにクラスが記述できる。 Class = class() function Class:init(a, b) self[1] = a self[2] = b end function Class:setValue(where, what) rawset(self, where, what) end --…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 6 / __index を利用してクラスふうにしてみる

参考: お気楽 Lua プログラミング超入門, リスト 4 およびリスト 5 -- メタメソッドを格納するためのテーブルを用意する。このテーブルがいわゆるクラスに相当する。 Class = {} -- 例として、テーブルの任意の位置に値をセットするためのメタメソッドを定義…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 5 / __newindex

-- __newindex イベントは、存在していないフィールドに値を代入するときに適用される。 -- テスト用のメタメソッドを定義する。 function testMethod(t, k, v) rawset(t, k, v + 1000) -- t[k] = v + 1000 と同じことだが、t[k] = v + 1000 だとメタメソッ…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 4 / __index

-- __index イベントは、テーブルの値を参照したのに値がなかったときに適用される。 -- テスト用のメタメソッドを定義する。 function testMethod(t, k) return tostring(t)..", k: "..k end -- メタテーブルをセットする。 testTable = setmetatable({aaa …

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 3 / 新しく行列型のデータを作って要素同士の四則演算ができるようにする

-- 行列同士のサイズの相違は想定しない。 -- 穴あき行列は想定しない。 -- 数値以外は想定しない。 -- 行列の要素同士の四則演算を行うためのメタメソッドを定義する。 function calc(operator) return function(matA, matB) local result = {} for row = 1…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 2 / 新しくリスト型のデータを作って要素同士の四則演算ができるようにする

-- リスト同士のサイズの相違は想定しない。 -- 穴あきリストは想定しない。 -- 数値以外は想定しない。 -- リスト同士の四則演算を行うためのメタメソッドを定義する。 function calc(operator) return function(listA, listB) local result = {} for i = 1…

TI-Nspire & Lua / スクリプティングのヒント / メタテーブルを使う 1 / 演算子をオーバーロードする

table1 = {name = "Tom Brady", rating = 110} table2 = {name = "Matt Ryan", rating = 100} function myAdd(a, b) -- これをメタメソッドとして使う。 return a.rating + b.rating end setmetatable(table1, {__add = myAdd}) -- setmetatable(テーブル, {…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 9 of 9 / 演習 9.3: 多項式を計算する

-- 演習 9.3: 演習 5.4 では、係数テーブルと変数値とを引数として取ってその多項式の値を返す函数を記述した。 -- 今度はその函数のカリー化版を作れ。 -- 係数テーブルを変数として取ってその多項式の値を返す函数を返す函数を作れ。 function newpoly(coe…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 8 / 演習 9.2

-- 演習 9.2: 下のチャンクの出力はどうなるか。 function F(x) return { set = function(y) x = y end , get = function() return x end , } end o1 = F(10) o2 = F(20) print(o1.get(), o2.get()) -- x の値がそのまま返ってくる o2.set(100) o1.set(300) …

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 7 / 演習 9.1: 積分する

-- 演習 9.1: 函数 f を引数に取ってその積分の近似値を返す函数 integral を作れ。 -- Exercise 9.1: Write a function _integral_ that takes a function _f_ and returns an approximation of its integral. local function integral(f) return function(…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 6 / 図形の包含判定

-- 円の包含判定。クロージャを使わない。 function disk1(x, y) return (x - 1)^2 + (y - 3)^2 <= 4.5^2 end print(disk1(0,0), disk1(1, 5)) -- 円の包含判定。クロージャを使う。 function disk2(cx, cy, r) -- 円を定義する函数。 return function(x, y)…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 5 / 再帰的なローカル函数を作る

-- 再帰的なローカル函数の定義 local function fact(n) if n == 0 then return 1 else return n * fact(n - 1) end end print(fact(69)) -- 下のような定義の仕方では再帰呼び出しができない。 -- FACT(n - 1) をコンパイルする時点ではまだローカル函数 FA…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 4 / ローカル函数を作る

-- ローカル函数の作成 local function add(a, b) return a + b end local function double(n) return add(n, n) -- ここで、上に定義した add 函数が使用できる。 end print(double(10)) -- これは下のように記述しても同じことである。むしろこちらが lua …

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 3 / テーブルに函数を格納する

-- テーブルに函数を格納する。 table = {} table.add = function(a, b) return a + b end table.sub = function(a, b) return a - b end print(table.add(1, 2), table.sub(1, 2)) -- これは下のように記述しても同じことである。 table = { add = function…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 2 / 函数を再定義する

-- math.sin 函数の引数が度単位で指定できるよう math.sin 函数を再定義してみる。 originalSin = math.sin math.sin = function(deg) -- これで、オリジナルの math.sin 函数が無名函数によって上書きされた。 return originalSin(math.rad(deg)) end prin…

TI-Nspire & Lua / スクリプティングのヒント / クロージャを使う 1 / 微分係数を求める

--[[ クロージャを利用して任意函数の点 x における傾きを求めてみる。 --]] function derivative(func, delta) local delta = delta or 1e-12 return function(x) return (func(x + delta) - func(x)) / delta end end function sute(x) -- この函数の点 x …

TI-Nspire & Lua / スクリプティングのヒント / テーブルの末尾に要素を追加するときは table.insert() を使わない

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.8 local num = 3000000 -- 1 local list = {} local timeStart = timer.getMilliSecCounter() for i = 1, num do table.insert(list, i) end local timeStop = timer…

TI-Nspire & Lua / スクリプティングのヒント / pairs() も使わない

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.8 local list = {} for i = 1, 8000000 do list[i] = i end -- 1 timeStart = timer.getMilliSecCounter() for i = 1, #list do local value = list[i] end print("1…

TI-Nspire & Lua / スクリプティングのヒント / ipairs() は使わない

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.8 local list = {} for i = 1, 5000000 do list[i] = i end -- 1 timeStart = timer.getMilliSecCounter() for i = 1, #list do local index = i local value = list…

TI-Nspire & Lua / スクリプティングのヒント / テーブルの最適化 / 不要な再ハッシュは避ける

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.6 “ Again, help Lua know more about the tables you're going to use! Avoid useless rehashes when possible! ” -- 1 timeStart = timer.getMilliSecCounter() fo…

TI-Nspire & Lua / スクリプティングのヒント / テーブルの最適化 / テーブルのサイズを決めておく

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.5 “ Help Lua know more about the tables you're going to use! ” timeStart = timer.getMilliSecCounter() for i = 1, 1000000 do local a = {} a[1] = 1; a[2] = …

TI-Nspire & Lua / スクリプティングのヒント / ローカル化する

Reference: http://adriweb.free.fr/t3/2014/Advanced_TI-Nspire_Lua_Programming.pptx, p.4, “ Accessing global variables takes more time than accessing local ones. Always localize your functions! ” timeStart = timer.getMilliSecCounter() for i …

TI-Nspire & Lua / 再帰呼び出し / 階乗を求める / 普通の方法も使ってみる

.lua ---------------------------------------------- -- method 1: Calling a function recursively -- ---------------------------------------------- function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) end end ----…

TI-Nspire & Lua / 再帰呼び出し / 階乗を求める

.lua function factorial(n) if n == 0 then return 1 else return n * factorial(n - 1) end end print(factorial(0)) print(factorial(1)) print(factorial(10)) print(factorial(69)) 参考: Programming in Lua, Fourth Edition p.3

PC-G850VS / マシン語 6 of 6

参考: ポケコンジャーナル、1994 年 4 月号、p.81 作者: Ryu 1;-------------------- 2 ORG 100H 3 CALL 0BFEBH 4 CALL 0BFEBH 5 CALL 0BFEBH 6 CALL 0BFEBH 7 LD E,0 8 LD D,3 9 LD (MYDAT),DE 10 LD L,0 11 LD H,0 12 LD (CODAT),HL 13 LD A,0 14 LD (MIFL…

PC-G850VS / マシン語 5 / IOCS を使ってキー入力を判定する

IOCS: 0BE62H は、アキュムレーターにロードされた文字 (または ASCII コードで指定された文字) を (E,D) 座標に表示する。 0BE53H は、何かキーが押されたら、あらかじめ割り振ってあるキー番号 (ASCII コードではない) をアキュムレーターにロードする。 0…

PC-G850VS / マシン語 4 / 繰り返し処理

例 1. 無条件ループ 100LOOP: ... ... 200 JP LOOP 例 2. カウンターが 100 になるまで繰り返す 100 LD A,0 110LOOP: ... ... 200 INC A 210 CP 100 220 JP NZ,LOOP 230 RET 例 3. カウンターが 0 になるまで繰り返す 100 LD A,100 110LOOP: ... ... 200 DEC…

PC-G850VS / マシン語 3 / 文字を動かす

100 ORG 100H 110 LD E,0 ;横座標 120 LD D,2 ;縦座標 130LOOP: ;行番号とラベルとの間にスペースを入れてはならない。 140 LD A,'A' ;表示する文字をアキュムレーターにロードする。 141 PUSH DE ;IOCS を呼ぶ前にレジスタの値を待避しておく。 150 CALL 0B…

PC-G850VS / マシン語 2 / IOCS を使って文字を表示する

A レジスタ (アキュムレーター) に、表示する文字を代入する。 D レジスタ (汎用レジスタ) に、文字を表示する縦座標を代入する。 E レジスタ (汎用レジスタ) に、文字を表示する横座標を代入する。 10 ORG 100H 20 LD A,'A' 30 LD D,0 40 LD E,0 50 CALL 0B…

PC-G850VS / マシン語 1 / アセンブリをアセンブラでアセンブルする

1. BASIC 画面で「MON」と入力してマシン語モニターを起動する。 2.「USER FFF」と入力する。"FREE:0100-0FFF" と表示される。これで 100h ~ FFFh 番地のメモリーがマシン語プログラム用に確保された。 3. [TEXT] ボタン → [Edit] の順に選択する。 4. 例と…

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼る

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / コルーチンを使ってみる TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / クロージャを使ってみる TI-Nspire…

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / クラスを使ってみる

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / コルーチンを使ってみる TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / クロージャを使ってみる の続き Ev…

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / クロージャを使ってみる

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / コルーチンを使ってみる の続き Every time a timer ticks, the following script will return the elapsed time. As a trial, a closure has been used. .lu…

TI-Nspire & SensorTag / 重力加速度から傾きを求める / 3 軸を使う

Triple-Axis Tilt Calculation: Reference: http://www.analog.com/media/en/technical-documentation/application-notes/AN-1057.pdf (Analog Devices) .lua require "bleCentral" bleState = "" peripheralState = "" myPeripheral = nil peripheralName =…

TI-Nspire & SensorTag / 重力加速度から角度を求める / 2 軸を使う

The output of an accelerometer can be converted to an angle of inclination. In this note, a Dual-Axis approach will be used to calculate an angle of inclination. .lua require "bleCentral" bleState = "" peripheralState = "" myPeripheral = n…

TI-Nspire & SensorTag / 重力加速度から傾きを求める / 1 軸だけ使う

The output of an accelerometer can be converted to an angle of inclination. In this note, a single axis will be used to calculate an angle of inclination. .lua require "bleCentral" bleState = "" peripheralState = "" myPeripheral = nil peri…

TI-Nspire & SensorTag / 9 軸センサーモジュール MPU9250 の値だけを取り出す

Reference: Scripting Tutorial - Lesson 36 Orientation of Axes (Source: https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf) Setting the Configuration UUID (Source: CC2650 SensorTag User's Guide - Texas Instrument…

TI-Nspire & SensorTag / 気象データの長時間測定をおこなう

Weather data have been obtained from a TI SensorTag every ten minutes. Measurement Period: December 2nd, 2016 10:00 PM - December 3rd, 2016 10:00 AM The time unit is minute. .tns 20161202-03_weatherData.tns - Google ドライブ

TI-Nspire & SensorTag / 気象関連のデータをリアルタイムにグラフ化する

The following Lua script will obtain weather data from TI SensorTag. Those data will be stored into the native applications of TI-Nspire by the var.storeAt() function. The Graphs application can plot them as a scatter plot in real-time. .l…

TI-Nspire & Lua / タイマーの tick するたびに経過時間を出力する / グローバル変数に頼らない / コルーチンを使ってみる

Every time a timer ticks, the following script will return the elapsed time. As a trial, a co-routine has been used. .lua function elapsedTime() local initTime = timer.getMilliSecCounter() for i = 1, math.huge do coroutine.yield((timer.get…

TI-Nspire & SensorTag / 気象関連のデータを全部一度に取り出す

The following script will try to extract weather data from CC2650 SensorTag. .lua require "bleCentral" local bleState = "" local peripheralState = "" local myPeripheral = nil local peripheralName = "" -- Temperature TMP007 = { name = "TMP0…

TI-Nspire & SensorTag / 照度センサー OPT3001 の値だけを取り出す

(photo: http://www.ti.com/ww/en/wireless_connectivity/sensortag2015/tearDown.html) .lua -- Refere to http://compasstech.com.au/TNS_Authoring/Scripting/script_tut35.html. require "bleCentral" local bleState = "" local peripheralState = "" l…

TI-Nspire & SensorTag / 大気圧センサー BMP280 の値だけを取り出す

(photo: http://www.ti.com/ww/en/wireless_connectivity/sensortag2015/tearDown.html) .lua -- Refere to http://compasstech.com.au/TNS_Authoring/Scripting/script_tut35.html. require "bleCentral" local bleState = "" local peripheralState = "" l…