初心者からのプログラミング入門、ソフトウェア開発の学習を支援する WisdomSoft のホームページです。
初心者からのプログラミング入門、ソフトウェア開発の学習を支援する WisdomSoft のホームページです。
長谷川 裕行 (はせがわ ひろゆき) 大阪芸術大学 写真学科で映像文化をテーマに研究、講師を務める一方でライター、テクニカルアドバイザーとしても第一線で活躍中。 サラリーマン時代にBASICと出会い、3か月で業務アプリケーションを開発。COBOLも覚えたが物足りず、汎用機、オフコン、UNIXへと興味の対象を広げ、1年後にはC言語とx86のアセンブリ言語を習得。雑誌に投稿したプログラムのReadme.txtが気に入られて執筆の世界に入る。 実践的な業務アプリケーションの知識を生かし、プログラミングの“キモ”を親しみやすい文章で執筆された記事は、時間が経過しても読まれているため、公開を継続している。
お知らせ: 2022/9/1 CS50 を活用した非営利/協賛企業による「コロナ学生支援」プロジェクトを実施中 ▼ 学生の方へ:CS50 の学習(履修証明書の取得)を一緒に取り組むプロジェクト CS50日本語版の翻訳コントリビューターである CODEGYM が主催する、非営利/無償のプロジェクト「CODEGYM Academy (外部リンク)」は、昨年に続き2022年度(春/秋)も、キャリア選択を控えた学生に対し、以下の企業の協賛により無償で17週間のプログラミング教育カリキュラムを提供します。 CODEGYM Academy 協賛企業(2022年) https://codegym.jp/academy/ 今年度のエントリーは締め切りました — ようこそ! このページは、ハーバード大学 CS50 の日本語版翻訳プロジェクトのページです。当サイトのドメインに掲載されているコンテンツは、Cre
Arduinoでsprintfの書式設定 こんにちは、くろべこです。 C言語である型式をフォーマットに従って文字列に変換する関数としてsprintfがありますよね。 今回はArduinoで使用できるフォーマット指定子の整理を記事として書いていきたいと思います。というのもArduinoではsprintfで一部のフォーマット指定子が使うことが出来ません。 具体的に言うと浮動小数点を表すフォーマット指定子が使用できないんですよね。これは、ちょっと不都合がありまして表示機などに浮動小数点を表すときに小数点以下を丸めたりする処理がめんどくさくなります。 ここら辺の浮動小数点を文字列に変換する方法についても解説していきますね。
今年の目標は理想のRTOS(リアルタイムOS)の自作だ。って、いうか、もう2月なんですけど。遅!(笑) 【タイマー粒度の問題】 RTOSは覚えきれないほど沢山の物があるが、共通する一番の問題はタイマー粒度がせいぜい1ms程度と荒すぎることだと思っている。調べる気力もないので不確かではあるが恐らく全てのRTOSがそうなっていると思われる。これはタイマー処理の実装の問題である。 例えば、マイクロ秒間隔で正確な制御がしたい。そんな単純なことがRTOSでは出来ない。出来ないというよりも作法的にRTOSでやってはいけないと言うべきかもしれない。タイマー粒度より細かい時間ではタイマーウェイトが使えないため優先度の高いタスクでループ処理にて時間待ちさせるしか方法はない。数10マイクロ秒程度ならまだ許せるかもしれないがループ待ちの間は他のタスクの実行を妨げることになるため数百マイクロ秒以上もの長い期間をル
以前からArduinoのタイマー割り込み処理ってなぜこんな複雑なんだろうと思っていた。 調べてみるとタイマーは高速PWMモードで16MHzの場合で1024usという中途半端な時間で割り込みが発生するようになっている。 millis()の戻り値はミリ秒であるため補正するために約42ms毎に1ms補正しているようだ。ということは補正時にmillis()の戻り値が1飛ぶことになる...millis()の戻り値が1msずつ変化すること期待しているアプリにとっては想定外のことが起こる可能がありそうだ。ちなみに8MHzでは2msずつ変化し補正時のみ4ms変化することになるようだ。CTCモードなら補正いらないのにな...こんなんでいいのか? micros()は補正なしのオーバーフローカウンター値から計算して求めているので問題ないが当然ながら補正しているmillis()と補正していないmicros()では
タイマー割り込みとは そもそもタイマー割り込みとは何でしょうか. Arduinoのプログラムはsetup関数とloop関数に書き込みます.loop関数は繰り返し実行されるので,一定の時間間隔でプログラムを実行したい場合はdelay関数などを使って一定の周期でプログラムが実行されるように調整するかもしれません. しかし,このようにdelayを使ったやり方は正確な周期を生み出すことができません.delay関数は任意の時間プログラムの実行を遅らせることができる関数ですが,実際のプログラムがどのくらいの時間が必要なのかがわからないからです. 以下の図を見てください. そのようなときに便利なのがタイマーです. タイマーはloop関数とは関係なく,一定の時間間隔で実行できます.そのため,ロボットの制御入力を行う際に非常に便利な機能です.ほかにもセンサーの測定間隔も一定の周期で行われるので,timerは
●Arduinoで割り込みを使う Arduinoでは、ほぼ完全にハードウエアに近い部分は見えなくなっており、 割り込みベクターやレジスタをスタックに退避するなど、細かい事は考える必要が無く、非常に簡単になっています。 しかし、内部処理に割り込みが使用されている関数を割り込み処理の中で使うとうまく動作しないため注意が必要です。 millisやdelayのように、一定の時間経過を扱う関数や、シリアル通信などの外部の通信を行う関数には内部に割り込み処理が使われているため、 割り込み処理の中で使用するとうまく動作しない可能性があります。 ▼割り込みピンの設定 使用可能な割り込みピンは、Arduino Megaボード以外のほとんどのボードでは デジタルピン2番3番が使用可能と思われます。 利用するボードにより違うかもしれませんので事前に調べる必要があります。 デジタルピン2番に割り込みを設定するには
Arduinoでなんらかの時間的に正確な処理をしたい時、Arduinoのタイマーライブラリを利用すると簡単に出来る。ArduinoのタイマーライブラリはMsTimer2とTimerOneがあり、これらのライブラリを利用すると、一定時間ごとに関数を「割り込み(interrupt)」で呼び出す、ということがさくっと出来る。 【永久保証付き】Arduino Uno 出版社/メーカー: スイッチサイエンスメディア: Personal Computers購入: 2人 クリック: 15回この商品を含むブログを見る Arduinoのタイマー Arduinoはハードウェアの機能としてタイマーを持っている。これはArduinoで使用しているAVRというマイコンの機能で、各種ライブラリ上から使われている。Arduinoで使用している主要なAVRマイコン*1では、Timer0、Timer1、Timer2の3つの
Arduino言語 Arduino言語はC/C++をベースにしており、C言語のすべての構造と、いくつかのC++の機能をサポートしています。また、AVR Libcにリンクされていて、その関数を利用できます。 setup() loop() 制御文 if if else switch case for while do while break continue return goto 基本的な文法 ; (セミコロン) {} (波カッコ) コメント #define #include 算術演算子 + - * / % (剰余) = (代入) 比較演算子 == != < > <= >= ブール演算子 && (論理積) || (論理和) ! (否定) ビット演算子 ビット演算子は変数をビットのレベルで計算するためのものです。ビット演算子によって、広範囲なプログラミング上の問題を解決することができます。 &
1 はじめに Arduino という名前を聞いたことがあるかもしれません。最近流行っているみたいだなと思われているかもしれません。ここでは、そんな Arduino について紹介したいと思います。 1.1 Arduino ってなに? Arduino というのは、簡単に書くと マイコンボード (Arduino マイコンボード) 開発環境 (Arduino IDE) の2つがセットになったものです。マイコン?難しそう。と、思われるかもしれませんが、そんなことがないように、うまく工夫されているのが特徴です。 1.2 電子工作もプログラミングもしたことがないんですけれど 電子工作をしたことがなくても大丈夫です。Arduino と、ジャンプワイヤという、ピンが両端についた電線、ブレッドボードという穴のたくさん並んだ板、使いたい電子部品を用意すれば、半田付けなしに楽しめます。もちろん、ブレッドボードを使
何らかの理由によりVC++のエディタ画面以外でコードを編集したいと言う事はよく有る。そういった時、いざVC++でコンパイルしようとした時に警告が発生する事がある。 例えば以下のようなコードを何らかのテキストエディタで記述し、UTF-8で保存する。 #include <iostream> using namespace std; int main() { cout << "このプログラムには日本語の文字列が含まれています。" << endl; } で、これをコンパイルすると、以下のような警告/エラーが発生する事が有る。 test.cpp : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 test.cpp(6) : error C2001: 定数が 2
本ページのLPCXpresso54114に、Baseboard、Arduinoプロトタイプシールドを使ったNXP版FreeRTOSアプリケーションテンプレートを発売しました。FreeRTOS基礎固め、FreeRTOSアプリケーションのプロトタイプ開発に最適です。 FreeRTOSを例に、RTOS基本機能を解説し、習得のための開発環境と、RTOSサンプルソフトを示します。 IoT MCUのソフト開発は、RTOS: Real Time Operation Systemが必要になると思います。その理由が以下です。 一般的なMCU開発でも、通信UART制御は処理が複雑で重く、鬼門! IoT MCUの通信プロトコルが何に決まるかは不透明だが、UARTに比べて複雑な通信処理になることは明らか これらの対策、切り札として、FreeRTOSやmbed OSなどのMCU RTOSが期待されています。弊社ブロ
概要 OSSのメンテナっぽいことをやるとき、githubで特定のpull requestの正当性を確認したいということがあると思う。ブランチチェックアウトすれば良くね?って単純に考えていたけど、結構面倒くさかったので、メモっとく。 やり方 とりあえず、repositoryをcloneして、branchを見てみる。 $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/feature/support_gemfile remotes/origin/master remotes/origin/test_1.0.0
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く