diff --git a/chuukan_happyou.csv b/chuukan_happyou.csv index b772345..a48ece9 100644 --- a/chuukan_happyou.csv +++ b/chuukan_happyou.csv @@ -1 +1 @@ -sumaho +すまっほ diff --git a/tello.rb b/tello.rb new file mode 100644 index 0000000..2ab671d --- /dev/null +++ b/tello.rb @@ -0,0 +1,60 @@ +require "socket" + +class Tello + def initialize(host="192.168.10.1", port=8889, bind=9000) + @udps = UDPSocket.open + @sockaddr = Socket.pack_sockaddr_in(port, host) + @udps.bind('0.0.0.0', bind) + @log = [] + + @th = Thread.start do + loop do + begin + sleep(0.1) + #puts "# response #{@udps.recv(1518)}" + @udps.recv(1518) + rescue StandardError => e + puts "# error #{e.message}" + end + end + end + @t2 = Thread.start do + @stateudp = UDPSocket.open + @stateudp.bind('0.0.0.0', 8890) + loop do + l = @stateudp.recv(65535) + @status = l if l && l>"" + sleep 0.1 + end + end + end + + def close + # puts '# close Tello' + @udps.send('land', 0, @sockaddr) + Thread.kill(@th) + Thread.kill(@t2) + @udps.close + @stateudp.close + end + + def send_command(message) + # puts "# send #{message}" + @udps.send(message, 0, @sockaddr) + end + def getlog + @log.shift + end + def getstatus + @status + end +end + +if __FILE__ == $0 then + tello = Tello.new + tello.send_command('command') + tello.send_command('takeoff') + sleep(3) + tello.send_command('land') + tello.close +end diff --git a/test.rb b/test.rb index c67ba49..970f4a7 100644 --- a/test.rb +++ b/test.rb @@ -1,7 +1,4 @@ -p "aaa" -print "aaa" - -全然書き込めてなかったので、7/28 ~ 8/4 の講義内容まとめをかきます。 +全然書き込めてなかったので、7/28 ~ の講義内容まとめをかきます。 ###7/28 本講義2回目 値(数値、文字列)や変数の扱いを学んだ。 @@ -12,7 +9,9 @@ 入力終了時にEnterをおすため、getsで取得した文字列の最後には改行文字\nがつく。 chomp(chomp!) : 文字列の最後に付いた改行文字\nを切り取る。 改行文字\nが付いていないときは何もしない。 + to_s, to_i, to_f : 変数などの型をそれぞれString, Int, Floatに変換する。 + printf : fは"format"の略で、その名の通り書式を指定して出力する。 printやputsとは違い、引数を()にいれて渡す必要がある。 %幅d:右詰め整数, %-幅d:左詰め整数 @@ -26,7 +25,7 @@ -###8/3 本講義3回目 +###8/3 本講義3回目 和算・if 和算の話を聞いたり、if, whileについて学んだ。 ####覚えたこと @@ -60,3 +59,193 @@ || : または ! : 〜ではない ...etc + +####感想 + 演算子の種類・使い方が理解できた。 + + + +###8/4 本講義4回目 ゲームを作ろう +if, while について詳しく学んだ。 + +####覚えたメソッド +if : 主に +``` +if 条件式 [then] + ...式 +end +``` + の形で使う。条件式の結果が真(True)であればthenからendまでの中身を実行する。 + 条件式が偽(False)のときは、elsifやelseがあればその中身を実行するが、 + なければ何もしない。thenは無くても可である。 + また、if修飾子として使うこともできる。その場合は、 +``` +式 if 条件式 +``` + となり、右辺の条件式が真(True)のときだけ左辺の式を実行する。 + 偽(False)のときはnilを返す。 + ちなみに、ifとは反対のunlessというメソッドも用意されている。 + +elsif : if式のあとに、 +```Ruby +if 条件式1 [then] + ... +elsif 条件式2 [then] + ... +end +``` + のように続けて記述する。条件式1が偽(False)のときに、条件式2が + 真(True)であればelsifの式の中身を実行する。条件式2もまた偽(False) + であるときは、このelsifのあとにさらにelsifやelseがあればその中身を + 実行する。 + elseif や else if , elif ではなく、elsif である。 + +else : ifやelsif, unless, case などの条件分岐の式で、else以前の条件にすべて + 当てはまらなかったときにこの中身が実行される。 +```Ruby +例) +x = rand(15) # 0...15の(疑似)乱数を発生させる + +if x >= 10 # xが10以上ならば + + puts "xは10以上!" + +elsif x >= 5 # xが10以上でない(10未満)かつ5以上ならば + + puts "xは5以上10未満!" + +else # xが10以上でなく、5以上でもない(5未満)ならば + + puts "xは0以上5未満!" + +end +``` + +while : 主に +```Ruby +while 条件式 [do] + ... +end +``` + の形で使われる。条件式が真(True)の間ずっとdoからendまでのループ処理を + 続ける。条件式が偽(False)である・偽(False)になった場合はループ処理を終える。 + doは無くても可。また、whileも修飾子として使える。 +```Ruby +式 while 条件式 +``` + の形になり、右辺の条件式が真(True)の間、左辺の式を繰り返し実行する。 + ちなみに、whileは通常何も(nilしか)返さないが、breakに引数をつけると + その値を返すようになる。 + +break : ループ処理を中断し、終わらせる。 + +next : ループ処理をスキップし、次のループに移る。 + +redo : ループ処理を中断し、もう一度ループの中身を実行する。 + +end : 条件分岐やループなどのブロックの終わりを示す。 + +sleep : プログラムの実行を止め、スリープする。()の中は、 + 正の値であれば浮動小数点数でも良い。 + 省略するとほぼ永久的にスリープする。 + +rand : 疑似乱数を発生させる。引数として0を与えれば0.0 以上 1.1 未満の実数を、 + 正の整数の場合は0以上で、指定した整数未満の整数を返す。その他の値 + (例えば正の不動小点数や負の整数など)を指定した場合はそれのto_intの + 絶対値が指定されたものとみる。 + また、引数には範囲を指定することもできる。その場合、始端・終端がそれぞれ + 整数のときは整数、少なくとも片方が実数であるときは実数を返す。 + +srand : 疑似乱数生成器の種を設定し、古い種を返す。引数は、そのto_intの + 絶対値が指定されたものとみなす。種を同じ値にすれば、疑似乱数の + 生成パターンも同じになる。 + +####感想 +if, whileやelsif, breakなどを使った応用までできた。 + + + +###8/5 本講義5回目 配列 +配列の使い方や仕組みを学んだ。 + +####覚えたこと +配列 : 複数の値を1つのオブジェクトに格納したもの。要素を,(カンマ)で区切ったものを + [](角括弧)で囲む。配列の中にさらに配列を入れることもできる(多次元配列)。 + 配列の名前[添字]のようにすると要素を取り出せる。 + +要素 : 配列の中身。 + +添字 : 配列の中身を取り出すときにつける数字。0から始まる。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +