flyingbirdのiPhoneアプリ開発記録

- PolyRhythmの中の人がiPhoneアプリ開発中に思ったことを記録するブログです -

RASPBERRY PI ZERO W でLチカ

用意した物

  • ピンヘッダを取り付けたラズパイは既にあります。 Amazonで購入。
    どれもこれもたくさん入っていて、単純なLチカだと余ります
    とは言え、Lチカセットみたいのを購入するより割安。皆で分けても良さそう
    • ブレッドボード
    • ジャンパワイア
    • LED
    • 抵抗


ラズパイ側

  • GPIOの手前側、左から3番目のピンがGND
  • 同じく手前の、左から8番目のピンがGPIO(23)


LED側

  • 以下の組み合わせで繋げていく
    1. GPIO(23) ⇔ LEDアノード(プラス極) ※足の長い方
    2. LEDカソード(マイナス極) ※足の短い方 ⇔ 抵抗(330Ω)
    3. 抵抗(330Ω) ⇔ GND


Lピカ

  • まず、お試しで、Lピカを・・・
    奥側の一番右のピンが3.3v(常時通電)のピンなので、GPIO(23)に繋げたジャンパワイアをそこに差し替えてLEDが発光するかお試し。
    うん、光りました。OKそう。



Lチカ

  • 差し替えたピンを元に戻して・・・

  • 以下のソースを記載したpyファイルを作成し、
    sudo python xxx.py で実行する
import RPi.GPIO as GPIO
import time

pin_no = 16
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin_no, GPIO.OUT)

try:
        while True:
                GPIO.output(pin_no, True)
                time.sleep(0.05)
                GPIO.output(pin_no, False)
                time.sleep(0.05)
                GPIO.output(pin_no, True)
                time.sleep(0.05)
                GPIO.output(pin_no, False)
                time.sleep(0.75)

except KeyboardInterrupt:
        pass

GPIO.cleanup()


結果

  • チカチカした〜〜!!
    はてブロは動画貼れないのか・・・


参考にしたサイト

  • ありがとうございました

deviceplus.jp
akimacho.hatenablog.com
developersnote.jp

【Swift】AVAudioPlayerのinitializeでエラー!?

  • AVAudioPlayerを使ってmp3を再生しようと実装をした時にハマったこと・・・
    • 以下のソースの様にAVAudioPlayerをイニシャライズしようとすると、何故かその行でブレイクしてしまう・・・何かの例外はキャッチして止まっているようだが、何も情報が出ない・・・。にもかかわらず、ステップアウトしていくと、クラッシュするでもなくそのまま処理が進んでってしまう。なんじゃこれは。。。
AVAudioPlayer(data: data, fileTypeHint: AVFileTypeMPEGLayer3)


  • これでいいのか!?
    • ググってもなかなか解決策が見当たらなかったのだが、ようやく以下のリンク先にあるやり方で解決。例外が発生すると、そこで自動的にブレイクする設定にしていたのだが、その例外の種類を全開にしていると起こるようだ。。。「All」から「Objective-C」に変えたら確かに起こらなくなった。以下のリンク参照

stackoverflow.com

【Swift】UIToolbarをキーボードと一緒に上げ下げしたい

画面の下に張り付いているUIToolbar… こいつを画面下から現れるキーボードと一緒に上げ下げしたい!!

  • ようやく答えを見つけた。以下のリンクを参照してなんとか解決。

stackoverflow.com

  • リンク先はconstraintsの参照をViewControllerにもたせていたが、identifier使って取ってみた
	@objc private func keyboardWillShow(_ notification: Notification) {
		let frame = notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue
		let height = frame.cgRectValue.height
		let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double

		UIView.animate(withDuration: duration) {
			super.view.constraints.first(where: { (constraint) -> Bool in
				return constraint.identifier == "toolBar"
			})!.constant = height
			super.view.layoutIfNeeded()
		}
	}

	@objc private func keyboardWillHide(_ notification: Notification) {
		let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double

		UIView.animate(withDuration: duration) { 
			super.view.constraints.first(where: { (constraint) -> Bool in
				return constraint.identifier == "toolBar"
			})!.constant = 0
			super.view.layoutIfNeeded()
		}
	}

【Swift】複数のUITextFieldを1つのUITextFieldDelegateで扱う時の話

  • 下記の事をやったときに、どのUITextFieldを操作しても同じDelegateメソッドが発火してしまう。DelegateメソッドのパラメータにUITextFieldが渡ってくるのだが、配置したUITextFieldのどれでDelegateが発火したかどうやって判断するのが良いのか?
    1. ViewControllerに複数のUITextFieldを配置
    2. UITextFieldのdelegateをそのViewControllerに接続
    3. ViewControllerでUITextFieldDelegateをimplements


  • UITextFieldにtagを付けて、パラメータで渡ってきたUITextFieldのtagで判断する
  • UITextFieldを@IBOutletで参照し、その参照とパラメータが同じかどうかで判断する

どっちかな〜〜

stackoverflow.com
iphonedevsdk.com

フィラメントLED

・さて、どれがLEDでしょうか?f:id:flyingbird69:20170208012056j:image

まさかこんなLEDの電球があるとは思わなかった。答えは一番左端の奴がLED。これ全然わかんないでしょ。LEDの右隣が10Wの白熱電球。で、更にその右隣が25Wの白熱電球。LEDなのに全く違和感なし。これなら全部LEDにしちゃっても問題ないな。

 

 

Swiftでバーコードを読もうとした時のエラー

バーコードでエラー

  • Swiftでバーコードを読んでみようと、ちょっとやってみた。
    すると、以下のエラーに出くわした。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureMetadataOutput setMetadataObjectTypes:] Unsupported type found - use -availableMetadataObjectTypes'


正誤表

どうも、処理の順番がマズってたみたいだ

let aVCaptureMetadataOutput = AVCaptureMetadataOutput()	
aVCaptureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
aVCaptureSession!.addOutput(aVCaptureMetadataOutput)
aVCaptureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code]
let aVCaptureMetadataOutput = AVCaptureMetadataOutput()	
aVCaptureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
aVCaptureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code]
aVCaptureSession!.addOutput(aVCaptureMetadataOutput)

何が問題かって言うと、「metadataObjectTypes」に値を設定するタイミング・・・
SessionにaddOutputした後、じゃないと駄目みたい。