RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
どうやら600回目の記事は成功報告という割と明るい記事になりそうです。
電磁気の授業で死んだ後、放課後。
とりあえず昨日告知したNXTとPICのI2C通信をやってみることにしました。

まぁ予想通りあっという間に終わりました。僕が寝ぼけていたせいで無駄に1時間ほど持っていかれましたけど・・・。
NXTの方は普通に普通の1.27で、PICは例の16F1823で行いました。14ピンの小型のヤツですね。
とりあえず、NXTからデータを送ったり、PICからデータを送ったり。色々してみましたが、
まぁまぁなんの問題もなく無事に通信できていました。
という訳で今日はそれを終わらせて、後はのんびりと・・・何してたっけ。ちょっと思い出せませんねぇ・・・。
うん。きっとそのまますぐ帰ったんですよね。うん、きっとそうだ。
そんな感じで今日はNXT-PIC間I2C通信のお話でした。別に特記するようなことでもないね。
それでは今日はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
電磁気の授業で死んだ後、放課後。
とりあえず昨日告知したNXTとPICのI2C通信をやってみることにしました。
まぁ予想通りあっという間に終わりました。僕が寝ぼけていたせいで無駄に1時間ほど持っていかれましたけど・・・。
NXTの方は普通に普通の1.27で、PICは例の16F1823で行いました。14ピンの小型のヤツですね。
とりあえず、NXTからデータを送ったり、PICからデータを送ったり。色々してみましたが、
まぁまぁなんの問題もなく無事に通信できていました。
という訳で今日はそれを終わらせて、後はのんびりと・・・何してたっけ。ちょっと思い出せませんねぇ・・・。
うん。きっとそのまますぐ帰ったんですよね。うん、きっとそうだ。
そんな感じで今日はNXT-PIC間I2C通信のお話でした。別に特記するようなことでもないね。
それでは今日はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回はポインタの続きです。
前回までで、ポインタと変数の関係についてつらつらと書いていったかと思います。
今回の記事ではここら辺を実際のプログラムを使ってもう一度書いていこうと思います。
と、いう訳で早速プログラムです。
int main(void)
{
int x=5;
int y=2;
int *p;
printf("%d",x);
printf("%p",&x);
p=&x;
printf("%d",*p);
printf("%p",p);
p=&y;
printf("%d",*p);
printf("%p",p);
return 0;
}
例えばこんなプログラムがあったとしましょう。
まず一番目のprintfでは、xの値である5が出力されるのは大丈夫ですね。
じゃあ二番目のprintfは何でしょう。
二番目のprintfは変数xのアドレスになりますので、
わかりません(笑)
変数のアドレスがどうなるかは、その時のメモリーの空き具合によって変わりますので、
プログラムを実行する度に変わってきてくるのです。
因みにアドレスを出力する際には%pを使います。
そして三番目のprintf、ここでは前にpにxのアドレスを代入していることから、これはxの値である5が出力されます。
同様に四番目のprintfは・・・xのアドレスなので此方も不明ですね。
まぁ、二番目のprintfの結果と同じ値が出力されることになります。
そして五番目、ここでは、既にpに新たな変数yのアドレスが代入されていますね。
ということは、ここで出力されるのは、yの値である2になる訳です。
同様に六番目のprintfは変数yのアドレスになります。これもxと同様に数値そのものはわかりませんが、
xのアドレスとyのアドレスが一致することはありませんので、二番目、四番目の値とは異なる値になるはずです。
また、こんなプログラムになると出力はどうなるでしょう。
int main(void)
{
int x=5;
int y=2;
int *p;
p=&x;
*p+=y;
printf("%d",*p);
printf("%d",x);
return 0;
}
このプログラムの場合、まずはポインタpに変数xのアドレスを代入しています。
そしてさらに、そのポインタpの示す値に変数yの値を加えています。
ということなので、一番目のprintfが出力するのは5+2なので7となります。
二番目はと言いますと、pにはxのアドレスがありますので、pがxのアドレスと一致している間は必ず
*p=xとなります。
よって二番目の出力も7ということになります。
こんな感じで、片方が変わればもう片方も変わる。
こういった同期する仕様になっているので、ちゃんと使えば非常に便利ですが、
やっぱり値の変動とか、そもそも今どのポインタがどの変数を示しているのか等、
一目ではわかりにくい部分がどうしても出てきてしまいます。
だから難しい、だからわからない。こうなる訳です。
まぁこれに関しては、正直慣れが一番の特効薬ではないでしょうか。
最初のうちはわかりません。常識です。でもやっていればそのうち慣れてくると思います。
さて、ここまできて一つ疑問に思うのが、「これ、何に使うんだ?」というところでしょう。
だって変数のアドレスがわかったって・・・ん?
ってなりますよね。
実はこのポインタ、例えば関数とか、配列とか、文字列とか、構造体とか、
そこら辺と兼ね合わせて使うことが殆どになります。
まぁこれらの話は後程するとして、まずは先程ちょろっと出てきた文字列や構造体について紹介していこうと思います。
まぁそんなところで今日は終了です。
(^・ω・)ノ RadiumProduction in RoboCup Junior
前回までで、ポインタと変数の関係についてつらつらと書いていったかと思います。
今回の記事ではここら辺を実際のプログラムを使ってもう一度書いていこうと思います。
と、いう訳で早速プログラムです。
int main(void)
{
int x=5;
int y=2;
int *p;
printf("%d",x);
printf("%p",&x);
p=&x;
printf("%d",*p);
printf("%p",p);
p=&y;
printf("%d",*p);
printf("%p",p);
return 0;
}
例えばこんなプログラムがあったとしましょう。
まず一番目のprintfでは、xの値である5が出力されるのは大丈夫ですね。
じゃあ二番目のprintfは何でしょう。
二番目のprintfは変数xのアドレスになりますので、
わかりません(笑)
変数のアドレスがどうなるかは、その時のメモリーの空き具合によって変わりますので、
プログラムを実行する度に変わってきてくるのです。
因みにアドレスを出力する際には%pを使います。
そして三番目のprintf、ここでは前にpにxのアドレスを代入していることから、これはxの値である5が出力されます。
同様に四番目のprintfは・・・xのアドレスなので此方も不明ですね。
まぁ、二番目のprintfの結果と同じ値が出力されることになります。
そして五番目、ここでは、既にpに新たな変数yのアドレスが代入されていますね。
ということは、ここで出力されるのは、yの値である2になる訳です。
同様に六番目のprintfは変数yのアドレスになります。これもxと同様に数値そのものはわかりませんが、
xのアドレスとyのアドレスが一致することはありませんので、二番目、四番目の値とは異なる値になるはずです。
また、こんなプログラムになると出力はどうなるでしょう。
int main(void)
{
int x=5;
int y=2;
int *p;
p=&x;
*p+=y;
printf("%d",*p);
printf("%d",x);
return 0;
}
このプログラムの場合、まずはポインタpに変数xのアドレスを代入しています。
そしてさらに、そのポインタpの示す値に変数yの値を加えています。
ということなので、一番目のprintfが出力するのは5+2なので7となります。
二番目はと言いますと、pにはxのアドレスがありますので、pがxのアドレスと一致している間は必ず
*p=xとなります。
よって二番目の出力も7ということになります。
こんな感じで、片方が変わればもう片方も変わる。
こういった同期する仕様になっているので、ちゃんと使えば非常に便利ですが、
やっぱり値の変動とか、そもそも今どのポインタがどの変数を示しているのか等、
一目ではわかりにくい部分がどうしても出てきてしまいます。
だから難しい、だからわからない。こうなる訳です。
まぁこれに関しては、正直慣れが一番の特効薬ではないでしょうか。
最初のうちはわかりません。常識です。でもやっていればそのうち慣れてくると思います。
さて、ここまできて一つ疑問に思うのが、「これ、何に使うんだ?」というところでしょう。
だって変数のアドレスがわかったって・・・ん?
ってなりますよね。
実はこのポインタ、例えば関数とか、配列とか、文字列とか、構造体とか、
そこら辺と兼ね合わせて使うことが殆どになります。
まぁこれらの話は後程するとして、まずは先程ちょろっと出てきた文字列や構造体について紹介していこうと思います。
まぁそんなところで今日は終了です。
(^・ω・)ノ RadiumProduction in RoboCup Junior
さて。この記事はNXTカテゴリーなのか、PICカテゴリーなのか。
割と悩むことなくNXTカテゴリーにしましたが、特に意味はありません。
NXTとPIC。どちらもI2C通信ができるので、繋げると色々ロボットの幅が広がって凄く便利なのですが・・・。
何故か僕はこれをやったことがないんです。
なんでなんだろう。使う機会がなかったから?とにかくやったことがないんです。
まぁ一番の理由はつい最近までPICでも、3.3Vの24Fや24Hで遊んでいたからでしょうね。
5V対応のPICで遊びだしたのはつい最近の話ですし・・・。
NXTのケーブルから出ている電源も大体5Vなので、3.3VのPICだと何かと不便ですからね。
という訳でI2Cをやってみることになりました。
以前にRCXでPICと通信した際は、謎の2線シリアル通信規格を作って、謎な通信をしていましたが、
今回、NXTではI2Cという共通の通信規格がありますからね。非常に楽にこなせると思います。
今週はまずそんな感じで遊んでいこうと思います。結果はまた後ほど報告ということで。
それでは今日はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
割と悩むことなくNXTカテゴリーにしましたが、特に意味はありません。
NXTとPIC。どちらもI2C通信ができるので、繋げると色々ロボットの幅が広がって凄く便利なのですが・・・。
何故か僕はこれをやったことがないんです。
なんでなんだろう。使う機会がなかったから?とにかくやったことがないんです。
まぁ一番の理由はつい最近までPICでも、3.3Vの24Fや24Hで遊んでいたからでしょうね。
5V対応のPICで遊びだしたのはつい最近の話ですし・・・。
NXTのケーブルから出ている電源も大体5Vなので、3.3VのPICだと何かと不便ですからね。
という訳でI2Cをやってみることになりました。
以前にRCXでPICと通信した際は、謎の2線シリアル通信規格を作って、謎な通信をしていましたが、
今回、NXTではI2Cという共通の通信規格がありますからね。非常に楽にこなせると思います。
今週はまずそんな感じで遊んでいこうと思います。結果はまた後ほど報告ということで。
それでは今日はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
PIC16F1939。 ここ暫く、何度もその単語が出ている PICの型番なのですが、
よくよく考えると、このPIC自体はまだ一回も話題に上がってないんです。
という訳で今回の記事では、このPIC16F1939 についてです。
まず概観はこんな感じ。40PINのPICです。

秋月電子通商にて170円で売ってます。
16Fファミリなので8bitのPICですが、16bitの24Fより早いです。
I/Oピンは最大で36ピン、発振子内蔵型のPICなので普通にフルで使えます。
電源電圧はなんと1.8V~5.0Vまで対応、どの電圧でも動きますが、最高性能を出したい際は5Vで。
動作周波数は最大32MHzとなっています。
旧型の16FはMIPSの関係上、事実上のシステムクロックは動作周波数の4分の1になっていましたが、
この16F19XXシリーズがは、1サイクル1命令なので(分岐を除く)、システムクロックも32MHzです。
A/Dコンバーターは10bit、24Fのように複数個の搭載はされていませんが、アナログピンは全部で14chあります。
アナログ入力14個はこのサイズのPICでは多い方なのではないでしょうか。結構使い勝手がいいですね。
そしてタイマーは独立して5つ搭載されています。当然ですが、そこいらの16Fとは数も質も全然違います。
なんと8bitマイコンのくせに16biタイマーが標準で搭載されていたりするんです。
後、通信モジュールはシリアルのSPI、I2C、EUSARTが対応しています。UARTがないのはちょっと痛いですね・・・。
CCPモジュール、つまりPWM等の波形を扱うモジュールの数も5つと、旧型の16Fを圧倒しています。
後はLCDドライバやらタッチセンサモジュールやら、色々と面白い機能が搭載されています。
まぁこのように、なんか凄いよ。という新しいPICの種類なんですね。
また、同じ40PINで実は160円(10円安い!)で16F1937 というPICも発売されています。

これとの違いはなにかといいますと、RAMとプログラムメモリの量が1939の半分しかなかったりします。
まぁ基本的な性能は変わりませんので、安い方がいいというのであれば此方の方がいいかもしれませんね。(10円だけど)
僕の場合は記述するプログラムの量的な問題から1939の方を使用しています。
でもまぁ普通にプログラムするのであれば、1937のメモリサイズで事足りると思います。
因みに24F なんかになると、ここらへんのメモリの量とか、通信モジュールの数とかが増え始めます。
特にメモリとかがおかしな領域に突入するんです。システム的に絶対あんなに必要ないと思われる量のメモリがあったり・・・。
まぁモジュールはともかく、メモリはそんなに使うことは余り無いと思われますので、
どう考えても24Fのアレは一体・・・ってなりますよね。そんな高度なプログラム、わざわざPICで書かないって。
といっても、結構頑張ったプログラムにしちゃうと1937の場合は足りなくなる場合もでてきますので、
プログラムがつがつ書いちゃうような人には1939の方がお勧めだったりします。
そんな感じで、今日はPIC16F1939 の紹介でした。
(^・ω・)ノRadiumProduction in RoboCupJunior
よくよく考えると、このPIC自体はまだ一回も話題に上がってないんです。
という訳で今回の記事では、このPIC16F1939 についてです。
まず概観はこんな感じ。40PINのPICです。

秋月電子通商にて170円で売ってます。
16Fファミリなので8bitのPICですが、16bitの24Fより早いです。
I/Oピンは最大で36ピン、発振子内蔵型のPICなので普通にフルで使えます。
電源電圧はなんと1.8V~5.0Vまで対応、どの電圧でも動きますが、最高性能を出したい際は5Vで。
動作周波数は最大32MHzとなっています。
旧型の16FはMIPSの関係上、事実上のシステムクロックは動作周波数の4分の1になっていましたが、
この16F19XXシリーズがは、1サイクル1命令なので(分岐を除く)、システムクロックも32MHzです。
A/Dコンバーターは10bit、24Fのように複数個の搭載はされていませんが、アナログピンは全部で14chあります。
アナログ入力14個はこのサイズのPICでは多い方なのではないでしょうか。結構使い勝手がいいですね。
そしてタイマーは独立して5つ搭載されています。当然ですが、そこいらの16Fとは数も質も全然違います。
なんと8bitマイコンのくせに16biタイマーが標準で搭載されていたりするんです。
後、通信モジュールはシリアルのSPI、I2C、EUSARTが対応しています。UARTがないのはちょっと痛いですね・・・。
CCPモジュール、つまりPWM等の波形を扱うモジュールの数も5つと、旧型の16Fを圧倒しています。
後はLCDドライバやらタッチセンサモジュールやら、色々と面白い機能が搭載されています。
まぁこのように、なんか凄いよ。という新しいPICの種類なんですね。
また、同じ40PINで実は160円(10円安い!)で16F1937 というPICも発売されています。

これとの違いはなにかといいますと、RAMとプログラムメモリの量が1939の半分しかなかったりします。
まぁ基本的な性能は変わりませんので、安い方がいいというのであれば此方の方がいいかもしれませんね。(10円だけど)
僕の場合は記述するプログラムの量的な問題から1939の方を使用しています。
でもまぁ普通にプログラムするのであれば、1937のメモリサイズで事足りると思います。
因みに24F なんかになると、ここらへんのメモリの量とか、通信モジュールの数とかが増え始めます。
特にメモリとかがおかしな領域に突入するんです。システム的に絶対あんなに必要ないと思われる量のメモリがあったり・・・。
まぁモジュールはともかく、メモリはそんなに使うことは余り無いと思われますので、
どう考えても24Fのアレは一体・・・ってなりますよね。そんな高度なプログラム、わざわざPICで書かないって。
といっても、結構頑張ったプログラムにしちゃうと1937の場合は足りなくなる場合もでてきますので、
プログラムがつがつ書いちゃうような人には1939の方がお勧めだったりします。
そんな感じで、今日はPIC16F1939 の紹介でした。
(^・ω・)ノRadiumProduction in RoboCupJunior
去年、ロボカップ研究部では、産技高専の文化祭、産技祭で出展を行いました。
内容は、TAとの交流試合的なアレ+センサーの販売でしたね。
色々あって急ごしらえの企画だったので、問題が多発した苦い記憶が残っていますね。
そういう経緯もあって、じゃあ次こそはちゃんとやろうか。という話・・・にはまだなっていませんが(オイ
なんだかんだで今年もなんかやることになりました。
今年も大まかな内容は去年と変わらず、交流試合的な消化試合と、何かしらの物品販売を行おうと考えています。
後は他のいくつかの団体と連携して活動することになるような予感がします(笑)
試合に関しては、まぁ去年と同じ・・・じゃまずいか。もうちょっとまともにやることを考えるとして、
物品販売の方ですが、去年の低堕落なアレよりはちょっと改善する方向で考えています。
とりあえず1個1000円のセンサーだけじゃいくらなんでも残念すぎますよね。
という訳で・・・
訳で・・・。
まぁまだ何にも決まっていません(笑)
とにかく、まずは、ロボカッパー以外の方の需要がないとなので、
ロボカップ関連外のものをちょっと販売しようと思います。
例えば、副部長がゲーム機を作ったりだとか、副部長がキーホルダーを作ったりだとか・・・
まぁ実は僕はが個人的に作成したなんとやらも数百円で販売しようと思っていますので、
それも含めてお求め安い値段でなんやかんややろうと思っています。
そしてもうひとつは去年に引き続いたセンサー販売。
今年は去年のアレの4倍のクオリティを目標に、今、着々と準備・・・というか素案の収集が行われています。
要するにこっちもまだ何を売るか決まってないんです(笑)
僕が企画した商品だと結構いいところまで準備がいっているのですが、他の部員の物はまだ素案の状態だったり。
まぁ販売商品については、また近くなったら公表すると言う形にしようと思います。
そんな感じで、今日は今年の高専祭の告知でした。さて、今年はちゃんとできるかな・・・?
(^・ω・)ノRadiumProduction in RoboCup Junior
内容は、TAとの交流試合的なアレ+センサーの販売でしたね。
色々あって急ごしらえの企画だったので、問題が多発した苦い記憶が残っていますね。
そういう経緯もあって、じゃあ次こそはちゃんとやろうか。という話・・・にはまだなっていませんが(オイ
なんだかんだで今年もなんかやることになりました。
今年も大まかな内容は去年と変わらず、交流試合的な消化試合と、何かしらの物品販売を行おうと考えています。
後は他のいくつかの団体と連携して活動することになるような予感がします(笑)
試合に関しては、まぁ去年と同じ・・・じゃまずいか。もうちょっとまともにやることを考えるとして、
物品販売の方ですが、去年の低堕落なアレよりはちょっと改善する方向で考えています。
とりあえず1個1000円のセンサーだけじゃいくらなんでも残念すぎますよね。
という訳で・・・
訳で・・・。
まぁまだ何にも決まっていません(笑)
とにかく、まずは、ロボカッパー以外の方の需要がないとなので、
ロボカップ関連外のものをちょっと販売しようと思います。
例えば、副部長がゲーム機を作ったりだとか、副部長がキーホルダーを作ったりだとか・・・
まぁ実は僕はが個人的に作成したなんとやらも数百円で販売しようと思っていますので、
それも含めてお求め安い値段でなんやかんややろうと思っています。
そしてもうひとつは去年に引き続いたセンサー販売。
今年は去年のアレの4倍のクオリティを目標に、今、着々と準備・・・というか素案の収集が行われています。
要するにこっちもまだ何を売るか決まってないんです(笑)
僕が企画した商品だと結構いいところまで準備がいっているのですが、他の部員の物はまだ素案の状態だったり。
まぁ販売商品については、また近くなったら公表すると言う形にしようと思います。
そんな感じで、今日は今年の高専祭の告知でした。さて、今年はちゃんとできるかな・・・?
(^・ω・)ノRadiumProduction in RoboCup Junior
ロボット系だとレゴならRCX、SCOUT、Spybot、NXT、他にもロボデザイナーやTJ3にも手を出し
マイコンだとPIC、H8、SH、ARM・・・とまぁ結構な数をこなした事があったりする自分ですが、
実はFPGAやCPLDも齧る程度は手を出してるんです(笑)
といってもここらへん、素子自体が桁違いに高いので所有はしていないんですけど・・・
まぁたまに借りたり何だりで使ったりしているんです。
それで今日また久しぶりにFPGAに触る機会がありまして、Quartusをまたインストールしようとしたのですけど・・・
なんか最新版を入れたらFPGAの型番が対応していないって弾かれてしまいました><。
古いのを使えーって言われてしまったのですが、
今度はその古いのがWindows7に対応していなくてインストールすらできないなんていう惨事に。
という訳でXPの入ったノートPCに入れようと思ったら、今度はファイルの欠損で弾かれてしまいました。
なので今、再びダウンロードしています。
ところがこれが長くて長くて。終わる気配がありません。また日が昇りそうだなぁ・・・。
そんな感じでヒマなので記事を書いてみました。特に意味はありません(笑)
と云う訳でそれではこの辺でー。
そういえばマイコンも多いけど、良く考えると齧ったプログラミング言語の数も多いかもしれない。
専用言語も含めると、C,Java、Javasq、vbs、HTML、XHTML、Python、Ruby、Perl、Tex、NQC、NXC、NBC、VHDL・・・
挙げればキリが無かった(笑)
(^・ω・)ノRadiumProduction in RoboCupJunior
マイコンだとPIC、H8、SH、ARM・・・とまぁ結構な数をこなした事があったりする自分ですが、
実はFPGAやCPLDも齧る程度は手を出してるんです(笑)
といってもここらへん、素子自体が桁違いに高いので所有はしていないんですけど・・・
まぁたまに借りたり何だりで使ったりしているんです。
それで今日また久しぶりにFPGAに触る機会がありまして、Quartusをまたインストールしようとしたのですけど・・・
なんか最新版を入れたらFPGAの型番が対応していないって弾かれてしまいました><。
古いのを使えーって言われてしまったのですが、
今度はその古いのがWindows7に対応していなくてインストールすらできないなんていう惨事に。
という訳でXPの入ったノートPCに入れようと思ったら、今度はファイルの欠損で弾かれてしまいました。
なので今、再びダウンロードしています。
ところがこれが長くて長くて。終わる気配がありません。また日が昇りそうだなぁ・・・。
そんな感じでヒマなので記事を書いてみました。特に意味はありません(笑)
と云う訳でそれではこの辺でー。
そういえばマイコンも多いけど、良く考えると齧ったプログラミング言語の数も多いかもしれない。
専用言語も含めると、C,Java、Javasq、vbs、HTML、XHTML、Python、Ruby、Perl、Tex、NQC、NXC、NBC、VHDL・・・
挙げればキリが無かった(笑)
(^・ω・)ノRadiumProduction in RoboCupJunior
以前に、変数について紹介した記事があったかと思います。
その時に、変数の値を計算する場合についてのことが書かれていました。
単純な四則演算、つまり足す、引く、掛ける、割る、の4つの計算の方法ですね。
この時は、この4つの演算についてしか記述しませんでしたが、
実はC言語で行うことのできる演算はまだまだ他にも沢山あったりするのです。
今日はそのことについて紹介していこうと思います。
・・・とその前に。まずは演算子と言う言葉の話から。
演算子と言うのは、「この演算をしますよ」という一種の命令みたいなものです。例えば足し算だったら+だし、引き算だったら-になりますね。
普通の計算でもそうですが、
演算子は演算をする際には必ず必要になってくる上、行う演算によって表記も変わってきますので、
この演算子をまず理解できないと、実際にどういった演算が行われているかが理解できなくなってしまうのです。
と云うわけで、これから紹介する演算では、演算と演算子、合わせて紹介を行っていくことにします。
まぁ今回紹介するのは演算子のなかでもほんの一部、特にメジャーな演算子のみとさせていただきます。
まずはインクリメント演算子。++とかです。
これらは何かというと、要するに今の変数に1足しますよ。という命令です。実際に書いてみると、
x++;
このような感じになります。これだと、変数xに1足すと言う意味になります。
既存のxの値に1足すという命令なので、xに元々何かしらの数字が入っていないと多分エラーか警告を吐くと思います。
因みにこのインクリメント演算子、前置式と後置式がありまして、前置式は++x;、後置式はx++;と表記します。
これはまぁどちらも変数xに1を足すという意味になるのですが、実はほんのちょっとだけ意味が変わってきます。
変わってくるのは例えばこういった場合。
int X=0;
printf("%d",++x);
例えばこの場合、表示される数は、xに1足されるので1になります。
でもこっちの場合はというと・・・
int X=0;
printf("%d",x++);
なんと0になるのです。
というのも、実は++xの場合は演算を実行してからprintfにxの値を送信しているので
xは1の状態でprintfに送られているのですが、
x++の場合はprintfにxの値を送信してから演算を実行しているのです。
つまり最終的にプログラムではxの値はどちらも1になっているのに、
printfの出力結果はx++と++xで変わってきてしまうのです。
こういった演算子がインクリメント演算子です。
また、同様に--で表記するデクリメント演算子と言う演算子もあります。
これはインクリメント演算子とは真逆で、元の値から1引くと言う演算になっています。
次に紹介するのは論理演算子と言う演算子です。
論理演算子にも色々ありますが、今日紹介するのは&&と||です。
前者が論理&演算子、後者が論理OR演算子と呼ばれる演算子です。
文章で説明するのもいいですが、結構面倒なので実際のプログラムで説明します。
まずは論理&演算子です。例えば論理&演算子だとこんなプログラムが書けます。
if((x==5) && (y==2))
これだと、&&演算子を使うことで、ifの条件が、xが5のときとyが2のとき、両方が成立している場合になります。
このように、論理&演算子では、
「複数の条件が同時に成立している」という条件を作り出すことができる演算子と言うことになります。
同様に論理OR演算子の場合はこのようなプログラムが書けます。
if((x==5) || (y==2))
これだと、||演算子を使うことで、ifの条件が、xが5のときとyが2のとき、どちらかが成立している場合になります。
このように、論理OR演算子では、
「複数の条件のどちらかが成立している」という条件を作り出すことができる演算子と言うことになります。
つまり、この演算子を使うことによってROBOLABやNXT-Gでいう、複合分岐がたった一行で書くことができると言う訳です。
特にロボット等の組み込みプログラムだと、あれやこれやと意味不明な条件の複合が大量に出現しますので、
これを使用することで非常に便利にプログラムを記述することができるようになります。
と云うわけで今日は演算子と演算の紹介でした。演算にはまだまだ沢山の種類が存在しますし、
演算によって優先度なんかも発生したりしますので今後はこういった内容についても記述していこうと思います。
例えばさんすうの世界でも、+より×の方が、×より更に()の方が優先度が高いですよね。
という訳で今日の記事はこの辺で。
(^・ω・)ノRadiumProduction in RoboCup Junior
その時に、変数の値を計算する場合についてのことが書かれていました。
単純な四則演算、つまり足す、引く、掛ける、割る、の4つの計算の方法ですね。
この時は、この4つの演算についてしか記述しませんでしたが、
実はC言語で行うことのできる演算はまだまだ他にも沢山あったりするのです。
今日はそのことについて紹介していこうと思います。
・・・とその前に。まずは演算子と言う言葉の話から。
演算子と言うのは、「この演算をしますよ」という一種の命令みたいなものです。例えば足し算だったら+だし、引き算だったら-になりますね。
普通の計算でもそうですが、
演算子は演算をする際には必ず必要になってくる上、行う演算によって表記も変わってきますので、
この演算子をまず理解できないと、実際にどういった演算が行われているかが理解できなくなってしまうのです。
と云うわけで、これから紹介する演算では、演算と演算子、合わせて紹介を行っていくことにします。
まぁ今回紹介するのは演算子のなかでもほんの一部、特にメジャーな演算子のみとさせていただきます。
まずはインクリメント演算子。++とかです。
これらは何かというと、要するに今の変数に1足しますよ。という命令です。実際に書いてみると、
x++;
このような感じになります。これだと、変数xに1足すと言う意味になります。
既存のxの値に1足すという命令なので、xに元々何かしらの数字が入っていないと多分エラーか警告を吐くと思います。
因みにこのインクリメント演算子、前置式と後置式がありまして、前置式は++x;、後置式はx++;と表記します。
これはまぁどちらも変数xに1を足すという意味になるのですが、実はほんのちょっとだけ意味が変わってきます。
変わってくるのは例えばこういった場合。
int X=0;
printf("%d",++x);
例えばこの場合、表示される数は、xに1足されるので1になります。
でもこっちの場合はというと・・・
int X=0;
printf("%d",x++);
なんと0になるのです。
というのも、実は++xの場合は演算を実行してからprintfにxの値を送信しているので
xは1の状態でprintfに送られているのですが、
x++の場合はprintfにxの値を送信してから演算を実行しているのです。
つまり最終的にプログラムではxの値はどちらも1になっているのに、
printfの出力結果はx++と++xで変わってきてしまうのです。
こういった演算子がインクリメント演算子です。
また、同様に--で表記するデクリメント演算子と言う演算子もあります。
これはインクリメント演算子とは真逆で、元の値から1引くと言う演算になっています。
次に紹介するのは論理演算子と言う演算子です。
論理演算子にも色々ありますが、今日紹介するのは&&と||です。
前者が論理&演算子、後者が論理OR演算子と呼ばれる演算子です。
文章で説明するのもいいですが、結構面倒なので実際のプログラムで説明します。
まずは論理&演算子です。例えば論理&演算子だとこんなプログラムが書けます。
if((x==5) && (y==2))
これだと、&&演算子を使うことで、ifの条件が、xが5のときとyが2のとき、両方が成立している場合になります。
このように、論理&演算子では、
「複数の条件が同時に成立している」という条件を作り出すことができる演算子と言うことになります。
同様に論理OR演算子の場合はこのようなプログラムが書けます。
if((x==5) || (y==2))
これだと、||演算子を使うことで、ifの条件が、xが5のときとyが2のとき、どちらかが成立している場合になります。
このように、論理OR演算子では、
「複数の条件のどちらかが成立している」という条件を作り出すことができる演算子と言うことになります。
つまり、この演算子を使うことによってROBOLABやNXT-Gでいう、複合分岐がたった一行で書くことができると言う訳です。
特にロボット等の組み込みプログラムだと、あれやこれやと意味不明な条件の複合が大量に出現しますので、
これを使用することで非常に便利にプログラムを記述することができるようになります。
と云うわけで今日は演算子と演算の紹介でした。演算にはまだまだ沢山の種類が存在しますし、
演算によって優先度なんかも発生したりしますので今後はこういった内容についても記述していこうと思います。
例えばさんすうの世界でも、+より×の方が、×より更に()の方が優先度が高いですよね。
という訳で今日の記事はこの辺で。
(^・ω・)ノRadiumProduction in RoboCup Junior
4月分のアクセス解析の結果が出ましたので発表します。
・・・いつの間にか、PICが首位独走なんですけど・・・。
4月は大分PIC押しだったせいか、押し切っちゃう形となりました。不動のNXTとはなんだったのか・・・
という訳で一位はPICです。頻繁に出てくるせいか、16F1939の型番のワードも多かったです。
そして第2位がロボカップ、ロボカップジュニア。結構安定しているように見えて安定していないですね。
大会は終了しましたが、競技関連の記事をいくつか書いたからか、高順位を維持しています。
そして3位に下落、真っ逆さまに下降中なのか3位のNXT。ちょっと前まで不動の1位だったのですが、
ここ最近のあっちこっちのワードの急浮上と最近全くNXT関連の記事を書いていない点からか、真っ逆さまです。
次の4位。未だに謎な安定のコンデンサです。何故今尚アクセスが多いのか。謎ってレベルじゃないですよね。
ロボカップ部の某部員が無駄にコンデンサ押しをしてくるコンデンサ信者なのですが、何か関係があるのでしょうか・・・?
そして5位がレゴです。此方もここ暫く殆ど単語は出てきていないような気がしますが、安定のランクインです。
2012年になって、上位3位の変動が激しいような気がしますね。逆に4,5位辺りは安定しているような・・・。
そしてお次は予備調査。今回の予備調査は・・・
フレーズです。要するに検索に入れた文章すべてのデータの統計ですね。
今回なんでこれにしたかといいますと・・・
ワードランキングのコンデンサの安定さの謎が解明されたのです。
というのも・・・なぜかよくわからないのですが、上位10位の殆どが、コンデンサに関わるフレーズなのです。
コンデンサ 使い方 とか コンデンサ 繋ぎ方 とか・・・
なんかとてつもないですよね。
フレーズさえわかってしまえば、同じフレーズをGoogle先生に入力するだけで検索結果から
なんでこのフレーズでアクセスがきたの?ってことがわかってしまうのです。
だって実際に検索をかけてみて結果の欄に自分のブログがあれば
他の人が同フレーズの検索でここにたどり着く確立は高いですからね。
という訳で、「コンデンサ 使い方」と打ってみたのですが・・・。
結果:なんと一ページ目。
そりゃ安定しますよね。1ページ目でひっかかりゃ、普通誰かしらは見ますもの。
同様に「コンデンサ つなぎ方」と打って見ると・・・
なんと、2番目(笑)
いったい何があったのでしょうか。この他にも、コンデンサ関連のフレーズでは、謎の1ページ目が続出しました。
そりゃ、コンデンサワード伸びるわけだ・・・。っていうか伸びないほうがおかしいです。
という訳でフレーズ調査によってコンデンサのワードの伸びの謎は解決しました。
でも新たになんで全部1ページ目かって謎ができちゃったけどね!
因みに他にもオムニボールや、バーニアNXTセンサアダプタV46なんてフレーズが無双状態です。
たまに「ロボカップジュニア」で検索しても、3.4ページ目に現れる謎現象があったりするのですが、
やっぱりフレーズによっては謎の常時1ページ目表示現象があるようです。
どうやらアクセス安定のワードのウラにはこんな秘密があったようですね。
という訳で今日の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
| 順位 | ワード | 数 |
| 1 | PIC | 80 |
| 2 | ロボカップ、ロボカップジュニア | 62 |
| 3 | NXT,nxt | 33 |
| 4 | コンデンサ | 19 |
| 5 | レゴ | 17 |
・・・いつの間にか、PICが首位独走なんですけど・・・。
4月は大分PIC押しだったせいか、押し切っちゃう形となりました。不動のNXTとはなんだったのか・・・
という訳で一位はPICです。頻繁に出てくるせいか、16F1939の型番のワードも多かったです。
そして第2位がロボカップ、ロボカップジュニア。結構安定しているように見えて安定していないですね。
大会は終了しましたが、競技関連の記事をいくつか書いたからか、高順位を維持しています。
そして3位に下落、真っ逆さまに下降中なのか3位のNXT。ちょっと前まで不動の1位だったのですが、
ここ最近のあっちこっちのワードの急浮上と最近全くNXT関連の記事を書いていない点からか、真っ逆さまです。
次の4位。未だに謎な安定のコンデンサです。何故今尚アクセスが多いのか。謎ってレベルじゃないですよね。
ロボカップ部の某部員が無駄にコンデンサ押しをしてくるコンデンサ信者なのですが、何か関係があるのでしょうか・・・?
そして5位がレゴです。此方もここ暫く殆ど単語は出てきていないような気がしますが、安定のランクインです。
2012年になって、上位3位の変動が激しいような気がしますね。逆に4,5位辺りは安定しているような・・・。
そしてお次は予備調査。今回の予備調査は・・・
フレーズです。要するに検索に入れた文章すべてのデータの統計ですね。
今回なんでこれにしたかといいますと・・・
ワードランキングのコンデンサの安定さの謎が解明されたのです。
というのも・・・なぜかよくわからないのですが、上位10位の殆どが、コンデンサに関わるフレーズなのです。
コンデンサ 使い方 とか コンデンサ 繋ぎ方 とか・・・
なんかとてつもないですよね。
フレーズさえわかってしまえば、同じフレーズをGoogle先生に入力するだけで検索結果から
なんでこのフレーズでアクセスがきたの?ってことがわかってしまうのです。
だって実際に検索をかけてみて結果の欄に自分のブログがあれば
他の人が同フレーズの検索でここにたどり着く確立は高いですからね。
という訳で、「コンデンサ 使い方」と打ってみたのですが・・・。
結果:なんと一ページ目。
そりゃ安定しますよね。1ページ目でひっかかりゃ、普通誰かしらは見ますもの。
同様に「コンデンサ つなぎ方」と打って見ると・・・
なんと、2番目(笑)
いったい何があったのでしょうか。この他にも、コンデンサ関連のフレーズでは、謎の1ページ目が続出しました。
そりゃ、コンデンサワード伸びるわけだ・・・。っていうか伸びないほうがおかしいです。
という訳でフレーズ調査によってコンデンサのワードの伸びの謎は解決しました。
でも新たになんで全部1ページ目かって謎ができちゃったけどね!
因みに他にもオムニボールや、バーニアNXTセンサアダプタV46なんてフレーズが無双状態です。
たまに「ロボカップジュニア」で検索しても、3.4ページ目に現れる謎現象があったりするのですが、
やっぱりフレーズによっては謎の常時1ページ目表示現象があるようです。
どうやらアクセス安定のワードのウラにはこんな秘密があったようですね。
という訳で今日の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回はライントレースの続きの記事です。
ロボカップにおけるライントレースでは、ラインが交差することはないのでそこまで難しい課題ではありません。
しかし、普通のライントレースとは違うある特徴があります。
それは途中でラインが途切れること、つまりギャップがあるのです。
といってもそこかしこにそんなもの出現されては溜まったものではありません。
ちゃんとその辺りの規定は存在して、まず、ギャップはラインの直線の部分にのみ置くこと、
そして、ギャップの長さは20cm以内にすることです。
ギャップには、このふたつの大原則があります。
でも、ギャップ自体は直線上でも、ギャップの直前のラインは直線とは限りません。
なので、ライントレース自体が荒いと、ギャップへの入り方によっては
ギャップにまっすぐに入れずにコースアウト、即ち競技進行の停止を取られてしまいます。
なのでその辺りをどう解決するかが課題となってくる訳です。
まっすぐにギャップに入れるようなプログラムを書くか、
またはまっすぐ入れなくてもちゃんと復帰するようなプログラムを書くか・・・
といったところでしょうか。
ギャップの紹介はこんな感じですね。
それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
ロボカップにおけるライントレースでは、ラインが交差することはないのでそこまで難しい課題ではありません。
しかし、普通のライントレースとは違うある特徴があります。
それは途中でラインが途切れること、つまりギャップがあるのです。
といってもそこかしこにそんなもの出現されては溜まったものではありません。
ちゃんとその辺りの規定は存在して、まず、ギャップはラインの直線の部分にのみ置くこと、
そして、ギャップの長さは20cm以内にすることです。
ギャップには、このふたつの大原則があります。
でも、ギャップ自体は直線上でも、ギャップの直前のラインは直線とは限りません。
なので、ライントレース自体が荒いと、ギャップへの入り方によっては
ギャップにまっすぐに入れずにコースアウト、即ち競技進行の停止を取られてしまいます。
なのでその辺りをどう解決するかが課題となってくる訳です。
まっすぐにギャップに入れるようなプログラムを書くか、
またはまっすぐ入れなくてもちゃんと復帰するようなプログラムを書くか・・・
といったところでしょうか。
ギャップの紹介はこんな感じですね。
それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
いつかしらの電池の話の続きです。
今回は何度でも(といっても限界はありますが)充電ができる、二次電池について紹介しようと思います。
まずはニカド電池。
正式にはニッケルカドミウム電池、略してニカド電池です。
現在使われている二次電池の中では最古参の部類に入るのではないでしょうか。
特徴としては、容量は少ないですが、一度流せる電流量が大きいので、
ちょっと昔だとモーターなんかを使用する機器によく利用されていました。
もっと昔だと、充電池は全部これだったような気もしますけど・・・
この電池を使用する上で一番重要なことはメモリー効果でしょうか。
単語でいうと訳がわかりませんが、
要するにニカド電池を充電する際には、充電前に完全放電、つまり電池を使い切らないといけないんです。
そうしないと、充電の時に残っていた電池の容量分だけ充電ができなくなる、これがメモリー効果です。
つまり、使い切らないで充電を続けると、段々メモリー効果で電池容量が減って、最終的に使えなくなる、
これが電池の寿命になる訳です。
ちなみに、一度起こしたメモリー効果は次使う時に電池を使い切ってもなくなりませんが、
ニカド電池の場合は、使えなくなっても数ヶ月ほっとくと勝手にメモリー効果が解消されて、使えるようになるようです。
また、1セル辺りの電圧は1.2Vとなっています。
次に紹介するのはニッケル水素電池、よくニッ水なんて略されていますね。
これはニカド電池後に開発されたものなので、ニカド電池の弱点をカバーするような仕様になっています。
特徴は充電回数の増加。
ニカド電池のウン倍もの数の充電に耐えられます。
そして容量の増加。
ニカド電池は普通の一次電池と比べても残念な容量しかありませんでしたが、
ニッ水は同サイズの一次電池と同等の容量を持っています。
要するに長持ちという訳ですね。
只、ニッ水の場合は充電の際の対応がニカドと全く異なります。
ニッ水の場合は、逆に電池を使い切ってはいけないのです。
電池を使い切ると、逆に充電できる量が大きく減ってしまいます。
なので、ニッ水を使う際はこまめに充電をする必要があります。
また、ニッ水の場合は、充電という行為自体で充電できる最大量がちょっとずつ減っていってしまいます。
また、1セル辺りの公称電圧は此方も1.2Vとなっています。
とりあえずこれがニカド電池とニッケル水素電池の紹介です。
今度はリチウム系の電池について、詳しく記載しようと思います。
それではまた。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回は何度でも(といっても限界はありますが)充電ができる、二次電池について紹介しようと思います。
まずはニカド電池。
正式にはニッケルカドミウム電池、略してニカド電池です。
現在使われている二次電池の中では最古参の部類に入るのではないでしょうか。
特徴としては、容量は少ないですが、一度流せる電流量が大きいので、
ちょっと昔だとモーターなんかを使用する機器によく利用されていました。
もっと昔だと、充電池は全部これだったような気もしますけど・・・
この電池を使用する上で一番重要なことはメモリー効果でしょうか。
単語でいうと訳がわかりませんが、
要するにニカド電池を充電する際には、充電前に完全放電、つまり電池を使い切らないといけないんです。
そうしないと、充電の時に残っていた電池の容量分だけ充電ができなくなる、これがメモリー効果です。
つまり、使い切らないで充電を続けると、段々メモリー効果で電池容量が減って、最終的に使えなくなる、
これが電池の寿命になる訳です。
ちなみに、一度起こしたメモリー効果は次使う時に電池を使い切ってもなくなりませんが、
ニカド電池の場合は、使えなくなっても数ヶ月ほっとくと勝手にメモリー効果が解消されて、使えるようになるようです。
また、1セル辺りの電圧は1.2Vとなっています。
次に紹介するのはニッケル水素電池、よくニッ水なんて略されていますね。
これはニカド電池後に開発されたものなので、ニカド電池の弱点をカバーするような仕様になっています。
特徴は充電回数の増加。
ニカド電池のウン倍もの数の充電に耐えられます。
そして容量の増加。
ニカド電池は普通の一次電池と比べても残念な容量しかありませんでしたが、
ニッ水は同サイズの一次電池と同等の容量を持っています。
要するに長持ちという訳ですね。
只、ニッ水の場合は充電の際の対応がニカドと全く異なります。
ニッ水の場合は、逆に電池を使い切ってはいけないのです。
電池を使い切ると、逆に充電できる量が大きく減ってしまいます。
なので、ニッ水を使う際はこまめに充電をする必要があります。
また、ニッ水の場合は、充電という行為自体で充電できる最大量がちょっとずつ減っていってしまいます。
また、1セル辺りの公称電圧は此方も1.2Vとなっています。
とりあえずこれがニカド電池とニッケル水素電池の紹介です。
今度はリチウム系の電池について、詳しく記載しようと思います。
それではまた。
(^・ω・)ノ RadiumProduction in RoboCup Junior
車椅子の新しい形・・・といえばいいのでしょうか。なんか凄まじい車椅子の動画が上がっていました。
戦車椅子?用途がかなりアレな気がする車椅子ですね。名称はAction Trackchairというそうです。
トラックチェアーなんて単語、初めて聞いた気がする・・・
通常の電動車椅子と同様に電気で動くようです。かなり小回りが効く上に、結構な悪路走行にも対応しているようです。
雪の中でも走行可能というのは大きいですよね。
後ろに補助輪も搭載されているので割りと傾斜のある場所でも走行ができるようです。
最高時速は8キロ程。まぁ普通の車椅子ですよね。どっかの改造品みたく、60km/hなんて出ませんからね。
今日はそんな車椅子の紹介です。
(^・ω・)ノ RadiumProduction in RoboCup Junior
戦車椅子?用途がかなりアレな気がする車椅子ですね。名称はAction Trackchairというそうです。
トラックチェアーなんて単語、初めて聞いた気がする・・・
通常の電動車椅子と同様に電気で動くようです。かなり小回りが効く上に、結構な悪路走行にも対応しているようです。
雪の中でも走行可能というのは大きいですよね。
後ろに補助輪も搭載されているので割りと傾斜のある場所でも走行ができるようです。
最高時速は8キロ程。まぁ普通の車椅子ですよね。どっかの改造品みたく、60km/hなんて出ませんからね。
今日はそんな車椅子の紹介です。
(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(06/08)
(01/12)
(08/29)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
プロフィール
HN:
Luz
性別:
男性
アーカイブ