質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1251閲覧

Python3にてエラーコードが出てしまい、前に進めません…

furanberu

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/17 14:52

全くの初心者です。ラズベリーパイのPython3を使ってセンサーからの結果をもとに100円と500円玉の通過した枚数を足していき、その合計金額を出力するプログラムを作りたいと思っているのですが、2つのブログを参考にコードを書いたところ、
64行目にてsyntaxError: invalid syntaxとのエラーが出てしまいました。
コードの大まかな内容としては、ラズベリーパイの16ピン(GPIO_PIN1)と23ピン(GPIO_PIN2)に入ったデータを、電卓の画面のようなLCDディスプレイ16桁×2行にwriteLCDという関数(?)を使って、入力した数字や文字をそのまま反映させるといった内容です。
一番下のWhile文の中身はLCDディスプレイの2行目に表示させようとしているプログラムです。
16ピンに入力された時に、16ピンに入力された回数を前回の数+1(i=i+1)として3桁で表示し、23ピンの回数はそのまま3桁(j)で表示し、100円と500円の合計金額(k)を10桁で表示させ、0.5秒待機させたいと思っています。
また、23ピンに入力された時に、16ピンに入力された回数(i)をそのまま3桁で表示し、23ピンの回数は前回の数+1(j=j+1)3桁で表示し、100円と500円の合計金額(k)を10桁で表示させ、0.5秒待機させたいと思っています。
どちらにも入力されなかった場合に0.5秒待機するプログラムのつもりです。
以下2つが参考にさせて頂いたブログです。
https://www.denshi.club/pc/raspi/i2caqmlcdarduinode1-aqm0802.html
https://chasuke.com/motionsensor/

python

1from datetime import datetime 2import smbus 3import time 4import subprocess 5import RPi.GPIO as GPIO 6 7 8INTERVAL = 0.5 9 10GPIO_PIN1 = 16 11GPIO_PIN2 = 23 12 13GPIO.setmode(GPIO.BCM) 14GPIO.setup(GPIO_PIN1,GPIO.IN) 15GPIO.setup(GPIO_PIN2,GPIO.IN) 16 17i2c = smbus.SMBus(1) 18addr02=0x3e 19_command=0x00 20_data=0x40 21_clear=0x01 22_home=0x02 23display_On=0x0f 24LCD_2ndline=0x40+0x80 25 26 27def command( code ): 28 i2c.write_byte_data(addr02, _command, code) 29 time.sleep(0.1) 30 31def writeLCD( message ): 32 mojilist=[] 33 for moji in message: 34 mojilist.append(ord(moji)) 35 i2c.write_i2c_block_data(addr02, _data, mojilist) 36 time.sleep(0.1) 37 38def init (): 39 command(0x38) 40 command(0x39) 41 command(0x14) 42 command(0x70) 43 command(0x56) 44 command(0x6c) 45 command(0x38) 46 command(_clear) 47 command(display_On) 48 command(0x0c) 49 50 51init() 52command(_clear) 53writeLCD("100 500 total ") 54command(LCD_2ndline) 55if _name_ == '_main_': 56 i = 1 57 k = 1 58 try: 59 while True: 60 if(GPIO.input(GPIO_PIN) == GPIO.HIGH): 61 writeLCD(str("{0:03d}".format(i))+str("{0:03d}".format(j))+str("{0:10d}".format(k)) 62 i = i + 1 63 j = j 64 k = i * 100 + j * 500 65 time.sleep(SLEEPTIME) 66 elif(GPIO.input(GPIO_PIN2) == GPIO.HIGH) : 67 writeLCD(str("{0:03d}".format(i))+str("{0:03d}".format(j))+str("{0:10d}".format(k)) 68 i = i 69 j = j + 1 70 k = i * 100 + j * 500 71 time.sleep(SLEEPTIME) 72 else: 73 time.sleep(SLEEPTIME)

いろいろと試し、調べてみましたが何が原因なのかわからず手詰まりになってしまいました…
専門的な言葉や意味などは全くと言っていいほどわからないような初心者なので、どこのコードをこう書き直したほうがいいと教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Python

writeLCD(str("{0:03d}".format(i))+str("{0:03d}".format(j))+str("{0:10d}".format(k))

開きカッコと閉じカッコの数が合っていないです。


64行目にてsyntaxError: invalid syntaxとのエラーが出てしまいました。

エラーログはそのまま貼ってください。

投稿2018/12/17 15:00

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

furanberu

2018/12/17 15:15

ご回答ありがとうございます! カッコが閉じれていないところが2箇所あったのでそちらの方を修正し、実行したところ以下のようなエラーが出てしまいました… File "i2c.py", line 76 ^ SyntaxError: unexpected EOF while parsing 何度も申し訳ないのですがよろしくお願い致します。
LouiS0616

2018/12/17 15:20 編集

全く同じミスをしている行が二つあるように見えますが、両方直したのですか? あと、トレースバックを貼っていただけるとこちらが行数を数えないで済みます。
furanberu

2018/12/17 15:37

両方修正しました。 すみません、トレースバックをどう出力するかすら分かっていなくてだせません… 一応言われている場所は1番最後の行の空欄のことみたいです。
LouiS0616

2018/12/17 15:42 編集

Traceback... から始まる複数行を丸コピーすれば良いです。 もちろんユーザ名など個人情報は伏せて構いません。 ひょっとして、ラズベリーパイ特有の事情があるのかもわかりませんが。 --- tryに対するexceptが無いからでは?
furanberu

2018/12/17 15:43

他の方にもお話を聞いてみたのですがおそらくそれかと思います。 もう少し頑張ってみようと思います!
furanberu

2018/12/17 16:29

出来ました!!! センサー部分は熱でやられて毎秒反応してしまいますが、ちゃんと動いた時にめっちゃ嬉しさがこみあげてきました…! 諦めなくて本当に良かったです! 夜遅くまでこんな素人のためにわざわざ時間を割いていただきありがとうございました!!
guest

0

python のプログラムの書式チェックには pylint や pylama というコマンドを利用したり、プログラムを書く時のエディタの書式チェックをする設定を組み込むと良いです。
(質問文にあるコードは pylama ではたくさんの警告がでました...)

私も raspberry pi の センサーをつかったプログラムの練習をしたことがあります。

https://github.com/katoy/raspberry-pi-gpio

ここの See also に記載してあるページは私にとっては貴重な情報源になりました。

投稿2018/12/17 17:05

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

furanberu

2018/12/17 17:58 編集

なるほど… たしかにプログラムを書く上で書式チェックを自動でしてくれるのは助かりますね…! 今回は助けもあってなんとかプログラムを完成させることが出来ましたが、今後なにかプログラムを作ることになった時はぜひこちらを参考にさせていただきます! 軽く見てみましたが、ラズベリーパイにディスプレイやキーボードなどに繋がなくてもPCで利用できる方法が載っていたので、効率よく作業ができるように今後の為にも設定しておこうと思います…!
katoy

2018/12/17 22:26

フォルダを PC と ラズベリーパイ で共有設定し、ファイル編集は PC で行うという方法を私はとっています。
furanberu

2018/12/17 22:33

それは便利ですね! 参考にさせていただきます!
katoy

2018/12/17 22:37

フォルダ共有以外に、画面を PC のディスプレーに表示し、PC側のマウス、キーボードで操作する設定も便利です。 http://izmiz.hateblo.jp/entry/2017/09/22/230146 Raspberry Pi に VNC でアクセスする (2017/9版)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問