読者です 読者をやめる 読者になる 読者になる

LabVIEW & myDAQ 3 / MAX のテストパネルで動作確認をする / DMM 端子を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.33-38 youtu.be1. myDAQ と PC とを USB ケーブルで接続する。自動的にドライバーがインストールされる。 2. MAX を起動する。…

LabVIEW & myDAQ 2 / ELVISmx をインストールする

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.30-32 1. myDAQ に附属している DVD-ROM をセットする。2. インストールウィンドウが表示されたら [Install] をクリックする。…

LabVIEW & myDAQ 1 / LabVIEW 2014 Home Bundle をインストールする

参考: Interface(インターフェース) 2017年 06 月号, p.110-112 ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.27-30 labviewmakerhub.com/labview を開く [Download Now] リンクを…

TI-Nspire & Lua / 特殊な方程式に対する Nyström 法

参考: パソコンで見る天体の動き, p.109-112特殊な方程式に対する Nyström 法を使って二階のまま解く。ここでいう「特殊な方程式」とは、一次微分も独立変数も含まない二階の方程式のことである。 function nystroem(funcs, t0, inits, initsDot, h, numOfDi…

TI-Nspire & Lua / Shanks のルンゲクッタ法公式

参考: Shanks, E.B., (1965), Higher Order Approximations of Runge-Kutta Type, NASA TN D-2920 (https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19650022581.pdf) function rkShanks(funcs, t0, inits, h, numOfDiv) local unpack = unpack or t…

TI-Nspire & Lua / 古典的ルンゲクッタ法 5 of 5 / 聯立方程式に適用する

参考: パソコンで見る天体の動き, p.26-29 function rkClassic(funcs, t0, inits, h, numOfDiv) local unpack = unpack or table.unpack local dim = #funcs local numOfDiv = numOfDiv or 1 local h = h / numOfDiv local hDiv2 = h / 2 local hDiv6 = h / …

TI-Nspire & Lua / 古典的ルンゲクッタ法 4 / クロージャを使って初期値を更新しながら 1 ステップずつの計算を繰り返すが、1 ステップをさらに内部分割する

function rk(func, t0, x0, step, numOfDiv) -- numOfDiv は 1 ステップの内部分割数 local numOfDiv = numOfDiv or 1 local step = step / numOfDiv local stepDiv2 = step / 2 local stepDiv6 = step / 6 local f1, f2, f3, f4 local t0, x0 = t0, x0 loca…

TI-Nspire & Lua / 古典的ルンゲクッタ法 3 / クロージャを使って初期値を更新しながら 1 ステップずつの計算を繰り返す

function rk(func, t0, x0, step) local t0, x0 = t0, x0 local stepDiv2 = step / 2 local stepDiv6 = step / 6 local halfPoint = t0 + stepDiv2 local f1, f2, f3, f4 return function() f1 = func(t0 , x0 ) f2 = func(halfPoint , x0 + stepDiv2 * f1) …

TI-Nspire & Lua / 古典的ルンゲクッタ法 2 / 何ステップかを一度にまとめて計算する

参考: パソコンで見る天体の動き, p.25 function rk(func, period, init, step) local step = step local from = period[1] local to = period[2] local initList = {init} local timeList = {from} local stepDiv6 = step / 6 local stepDiv2 = step / 2 fo…

TI-Nspire & Lua / 古典的ルンゲクッタ法 1 / 1 ステップだけ計算する

参考: パソコンで見る天体の動き, p.22 function rk(func, from, initVal, step) local f1 = func(from , initVal ) local f2 = func(from + step / 2, initVal + step * f1 / 2) local f3 = func(from + step / 2, initVal + step * f2 / 2) local f4 = fun…

PIC16F1939 & MPUトレーナー 1 of 1 / タッチセンサーを使う

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.163-168 PIC16F1789 を PIC16F1939 に差し替える。 main.c // 閾値 を 0x1000 から 0x1600 に変更した以外はテキスト p.168, リスト 19-2 のまま。 //…

PIC16F1789 & MPUトレーナー 18 of 18 / Microwire EEPROM のリード & ライト

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.217-224ターミナルは Tera Term である。 main.c // テキスト p.222, リスト 24-2 のまま

TI-Nspire & Lua / 独自のイテレーターを作る

リストの from 番目の要素から要素を num 個吐き出す。リストは循環しているものとする。 何か特別に意味のあることをしているわけではない。 function loop(list, from, num) local dim = #list local num = num or dim local iGlobal = 0 local iLocal = (…

TI-Nspire & Lua / 高階函数の例

参考: 日経ソフトウエア 2017年 1月号 [雑誌], 付録 JavaScript 実践テクニック, p.018, リスト 9 -- 函数 add の引数に函数 (ここでは函数 string.len と tonumber のいずれか) を取る。 function add(a, b, func) return func(a) + func(b) end print(add(…

PIC16F1789 & MPUトレーナー 17 / SD カードにアクセスする

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.209-216ターミナルは Tera Term。 main.c // テキスト p.213-214, リスト 23-6 のまま

PIC16F1789 & MPUトレーナー 16 / SPI EEPROM のリード & ライト

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.197-205ターミナルは Tera Term。 main.c // テキスト p.203, リスト 23-2 のまま

PIC16F1789 & MPUトレーナー 15 / I2C EEPROM のリード & ライト

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.189-196 main.c //テキスト p.193、リスト 22-2 のまま

PIC16F1789 & MPUトレーナー 14 / UART を使う / PC から PIC へ 1 文字送る

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.169-176 main.c #include "mcc_generated_files/mcc.h" #define LED0 RB2 #define LED1 RB3 #define LED2 RB4 char sio_getc() { char ch; ch = EUSAR…

PIC16F1789 & MPUトレーナー 13 / ウォッチドッグタイマーを使う

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.149-156 main.c /* テキスト p.155、リスト 17-3 のまま。経過時間を表示するプログラムである。 ウォッチドッグタイマーのタイムアウトピリオドは 4 …

PIC16F1789 & MPUトレーナー 12 / PWM を使ったビープ音で音階を発生する

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.143-148 main.c #include "mcc_generated_files/mcc.h" volatile int msCnt = 0; void delay_ms(int cnt) { msCnt = cnt; while(msCnt); } void SetBe…

TI-Nspire & Lua / DAC で任意波形を描くための波形テーブルを生成する 2 / interpolate() 使う

関連: TI-Nspire & Lua / DAC で任意波形を描くための波形テーブルを生成する 1 / 任意の数式を波形テーブルにする - .tns interpolate3.tns - Google ドライブ

Wolfram / 三次元勾配ベクトル場

f=x^2+y^2+z^2; v=VectorPlot3D[gradf,{x,-1,1},{y,-1,1},{z,-1,1}, VectorStyle -> "Segment"]; c=ContourPlot3D[f,{x,-1,1},{y,-1,1},{z,-1,1},Mesh->None,ContourStyle->Opacity[0.5,Blue]]; Show[v,c] 参考: レクチャーズオンMathematica, p144-145

Wolfram / ローレンツアトラクター

sol=NDSolve[{x'[t]==10(y[t]-x[t]),y'[t]==x[t](28-z[t])-y[t],z'[t]==x[t]y[t]-(8/3)z[t],x[0]==1,y[0]==0,z[0]==0},{x[t],y[t],z[t]},{t,0,50}]; p[t_]={x[t],y[t],z[t]}/.sol[[1]]; lorenz=ParametricPlot3D[p[t],{t,0,50},PlotRange->All] 参考: レクチ…

Wolfram / 方形波の合成

s[x_, n_] = (4/Pi)*Sum[Sin[(2 k - 1) x]/(2 k - 1), {k, 1, n}]; Manipulate[Plot[Evaluate[s[x, n]], {x, -2 Pi, 2 Pi}, PlotRange -> {-3, 3}], {n, 1, 10, 1}]参考: レクチャーズオンMathematica, p.91-92

TI-Nspire & Lua / ループの刻み幅に小数を使う場合の注意

for i = 1, 2, 0.1 do print(i) -- 2 に達しない (1.9 のあとに 2 を通り過ぎてループを抜けてしまう) end for i = 11, 12, 0.1 do print(i) -- 12 に達する end

TI-Nspire & Lua / シンプソンの公式による積分

.lua function integraSimps(f, from, to, numOfDiv) local sum = 0 local step = (to - from) / (numOfDiv or 2^5) ---[[ for i = (from + 2 * step), (to + step / 10), (2 * step) do sum = sum + (f(i - 2 * step) + 4 * f(i - step) + f(i)) * step / 3…

TI-Nspire & Lua / DAC で任意波形を描くための波形テーブルを生成する 1 / 任意の数式を波形テーブルにする

関連: TI-Nspire & Lua / DAC で任意波形を描くための波形テーブルを生成する 2 / interpolate() 使う - .lua function createWave(func) local POW = math.pow local FLOOR = math.floor local CEIL = math.ceil local MIN = math.min local MAX = math.max…

PIC16F1789 & MPUトレーナー 11 / DAC で任意の波形を生成する

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p131-134 テーブルに格納した 8 ビットデータを順番に読み取って任意波形を生成する。リファレンス電圧には電源電圧を使う。 main.c #include "mcc_gene…

TI-Nspire 組込函数 interpolate()

三次補間で未知の函数を近似する。 構文: interpolate(xValue, xList, yList, yPrimeList) 返値: リスト 実行例 1: 実行例 2 (既知のポイントの傾きを実行例 1 とは逆にした): .tns interpolate2.tns - Google ドライブ

PIC16F1789 & MPUトレーナー 10 / パルス幅を測る

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.99-102 Timer1 のクロックを 1 MHz (= 16 MHz / 4 クロック / 4 分周) にすると、Timer1 は 1 μsec (= 1/(1 MHz)) ごとにインクリメントする。 16 ビ…

PIC16F1789 & MPUトレーナー 9 / 周波数を測る

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p95-98 Timer1 を周波数カウンターに使う。Timer1 のクロックソースを外部クロックに設定し、その外部クロックの数 (下の例では Genuino101 から出力さ…

PIC16F1789 & MPUトレーナー 8 / 遅延函数を作る

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.77-83

PIC16F1789 & MPUトレーナー 7 / LCD モジュールに何かを表示する

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.69-76 main.c #include "mcc_generated_files/mcc.h" #include "lcd.h" #define PUSH_SW0 RA3 #define PUSH_SW1 RB7 #define PUSH_SW2 RE3 volatile i…

PIC16F1789 & MPUトレーナー 6 / 7 セグメント LED を使う 2 / 外部スイッチで何かを表示する

main.c #include "mcc_generated_files/mcc.h" #define PUSH_SW0 RA3 #define PUSH_SW1 RB7 #define PUSH_SW2 RE3 #define DIG1 RE0 //千の位 #define DIG2 RE1 //百の位 #define DIG3 RE2 //十の位 #define DIG4 RC1 //一の位 volatile int msCnt = 0; void…

PIC16F1789 & MPUトレーナー 5 / 7 セグメント LED を使う 1

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.61, 64-65 youtu.be main.c #include "mcc_generated_files/mcc.h" #define DIG1 RE0 //千の位 #define DIG2 RE1 //百の位 #define DIG3 RE2 //十の位…

PIC16F1789 & MPUトレーナー 4 / 外部スイッチで LED を点滅する

参考: 定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ), p.59 main.c #include "mcc_generated_files/mcc.h" #define LED0 RB2 #define LED1 RB3 #define LED2 RB4 #define PUSH_SW0 RA3 #define PUSH_SW1 RB7 …

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(テーブル, {…