🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

Q&A

1回答

1563閲覧

raspberry piでサーボモータを動かしたい

bakibakiyo

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

0グッド

0クリップ

投稿2020/12/10 07:37

編集2020/12/10 07:38

前提・実現したいこと

raspberry pi zero whを使ってブラウザ上からサーボモーターを動かしたいです。

具体的にはONとOFFのチェックボックスを用意しました。
ONにチェックをして送信ボタンを押すとサーボモーターが0度→90度→0度に動き
OFFにチェックをして送信ボタンを押すとサーボモーターが0度→-90度→0度に動く処理を行いたいです。

今のところONにチェックをして送信ボタンを押すとサーボモーターが0度→90度に動き
OFFにチェックをして送信ボタンを押すとサーボモーターが0度→-90度に動かすことはできたのですが

0度→90度→0度、0度→-90度→0度に動かそうとすると、うまくいかずエラーが出る状態です。

発生している問題・エラーメッセージ

:8000/favicon.ico:1 Failed to load resource: the server responded with a status of 404 (Not Found) (index):51 true (index):54 Uncaught ReferenceError: outresult2 is not defined at check ((index):54) at HTMLInputElement.onclick ((index):29)

該当のソースコード

python

1import webiopi 2import time 3import wiringpi as GPIO 4 5SERVO_PAN = 23 6 7SERVO_PAN_TRIM = 12 8 9SERVO_PAN_LEFT_LIMIT = 60 10SERVO_PAN_RIGHT_LIMIT = -60 11 12SERVO_ANGLE_MIN = -90 13SERVO_ANGLE_MAX = 90 14SERVO_PULSE_MIN = 0.75 15SERVO_PULSE_MAX = 2.4 16SERVO_CYCLE = 50 17 18PWM_WRITE_MIN = 0 19PWM_WRITE_MAX = 1024 20 21SERVO_DUTY_MIN = SERVO_PULSE_MIN/SERVO_CYCLE 22SERVO_DUTY_MAX = SERVO_PULSE_MAX/SERVO_CYCLE 23 24SERVO_PAN_DUTY_MIN = (SERVO_DUTY_MAX - SERVO_DUTY_MIN) / (SERVO_ANGLE_MAX - SERVO_ANGLE_MIN) * ((SERVO_PAN_LEFT_LIMIT +SERVO_PAN_TRIM) - SERVO_ANGLE_MIN) + SERVO_DUTY_MIN 25SERVO_PAN_DUTY_MAX = (SERVO_DUTY_MAX - SERVO_DUTY_MIN) / (SERVO_ANGLE_MAX - SERVO_ANGLE_MIN) * ((SERVO_PAN_RIGHT_LIMIT+SERVO_PAN_TRIM) - SERVO_ANGLE_MIN) + SERVO_DUTY_MIN 26 27SERVO_PAN_PWM_WRITE_MIN = PWM_WRITE_MAX * SERVO_PAN_DUTY_MIN 28SERVO_PAN_PWM_WRITE_MAX = PWM_WRITE_MAX * SERVO_PAN_DUTY_MAX 29 30def getServoPanPWMvalue(val): 31 32 pwm_value = int((SERVO_PAN_PWM_WRITE_MAX - SERVO_PAN_PWM_WRITE_MIN) * val + SERVO_PAN_PWM_WRITE_MIN) 33 return pwm_value 34 35webiopi.setDebug() 36 37def setup(): 38 webiopi.debug("Script with macros - Setup") 39 GPIO.wiringPiSetupGpio() 40 GPIO.pinMode(SERVO_PAN,GPIO.OUTPUT) 41 GPIO.softPwmCreate(SERVO_PAN,0,50) 42 43def loop(): 44 webiopi.sleep(5) 45 46def destroy(): 47 webiopi.debug("Script with macros - Destroy") 48 49@webiopi.macro 50def setHwPWMforPan(duty1,duty2): 51: 52 GPIO.softPwmWrite(SERVO_PAN, getServoPanPWMvalue(float(duty1))) 53 webiopi.sleep(5) 54 GPIO.softPwmWrite(SERVO_PAN, getServoPanPWMvalue(float(duty2)))

javascript

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <meta name="viewport" content="width=device-width"> 6 <title>Controller</title> 7 <script type="text/javascript" src="/webiopi.js"></script> 8 <script type="text/javascript"> 9 </script> 10 11 <style type="text/css"> 12 </style> 13</head> 14 15<body> 16<h1 align="center">教室鍵管理システム</h1> 17<div align="center"> 18<table border="1"> 19<tbody> 20 <tr> 21 <th>教室名</th><th>ON</th> <th>OFF</th> <th>送信</th> 22 </tr> 23<tr> 24<div class="slidecontainer"> 25<form name="smartLock"> 26 <td>3301</td> 27 <td> <input type="radio" value="26" name="rbtn">施錠</td> 28 <td><input type="radio" value="35" name="rbtn">開錠</td> 29 <td> <input type="button" value="送信" onClick="check()"></td> 30</form> 31</div> 32</tr> 33 34</tbody> 35</table> 36</div> 37 38<script> 39 var division = 20; 40 var commandID = 0; 41 42 function check(){ 43 var rcheck = document.smartLock.rbtn[0].checked; 44 if (rcheck){ 45 var outvalue = 26; 46 var outvalue2 = 35; 47 } else { 48 var outvalue = 35; 49 var outvalue2 = 26; 50 } 51 console.log(rcheck) 52 var outresult = outvalue/division 53 var outresult = outvalue2/division 54 webiopi().callMacro("setHwPWMforPan", outresult, outresult2); 55 }; 56</script> 57 58</div> 59</body> 60</html>

試したこと

90度には動かせたのでPINやIPアドレスやWebiopiの設定など根本的なことの間違いではないと思います

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

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

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

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

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

guest

回答1

0

outresult2 is not defined

と書いてあるので「outresult2が宣言されてないんだな」と思います。
そのようなアタリを付けてコードを読みます。
outresult2が含まれる箇所を検索してみましょう
たしかに無いですね。

js

1 var outresult = outvalue/division 2 var outresult = outvalue2/division 3 webiopi().callMacro("setHwPWMforPan", outresult, outresult2);

代わりにoutresultが2つあります

投稿2020/12/10 07:43

編集2020/12/10 07:47
ozwk

総合スコア13551

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

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

bakibakiyo

2020/12/10 08:07

素早いご対応ありがとうございます! outresult2を追記し、実行したところ true webiopi.js:394 Uncaught ReferenceError: $ is not defined at WebIOPi.callMacro (webiopi.js:394) at check ((index):54) at HTMLInputElement.onclick ((index):29) このようなエラーメッセージが出てしまいました 90度には動かす処理はできているため at WebIOPi.callMacro (webiopi.js:394) の部分は関係ないと思われるのですが、どうすればよろしいでしょうか?
ozwk

2020/12/10 10:38

多分ですけど引数は配列で渡してください [outresult,outresult2]
bakibakiyo

2020/12/10 12:31

この部分を function check(){ var rcheck = document.smartLock.rbtn[0].checked; if (rcheck){ var outvalue = 26; var outvalue2 = 35; } else { var outvalue = 35; var outvalue2 = 26; } console.log(rcheck) var outresult = outvalue/division var outresult = outvalue2/division webiopi().callMacro("setHwPWMforPan", outresult, outresult2); } このように変更してみたのですが、うまくいきません... 何度もお聞きしてすみません! function check(){ var rcheck = document.smartLock.rbtn[0].checked; if (rcheck){ var outvalue = 26; var outvalue2 = 35; } else { var outvalue = 35; var outvalue2 = 26; } console.log(rcheck) var outresult = outvalue/division var outresult2 = outvalue2/division let result = [outresult, outresult2] webiopi().callMacro("setHwPWMforPan", *result); }; エラーメッセージはこのようになっています Uncaught SyntaxError: Unexpected token '*' 2(index):29 Uncaught ReferenceError: check is not defined at HTMLInputElement.onclick ((index):29)
bakibakiyo

2020/12/10 13:52

さらに改良して function check(){ var rcheck = document.smartLock.rbtn[0].checked; if (rcheck){ var outvalue = 26; var outvalue2 = 35; } else { var outvalue = 35; var outvalue2 = 26; } console.log(rcheck) var outresult = outvalue/division var outresult2 = outvalue2/division let result = [outresult, outresult2] webiopi().callMacro("setHwPWMforPan", *result); }; 上記のコードを function check(){ var rcheck = document.smartLock.rbtn[0].checked; if (rcheck){ var outvalue = 26; var outvalue2 = 35; } else { var outvalue = 35; var outvalue2 = 26; } console.log(rcheck) var outresult = outvalue/division var outresult2 = outvalue2/division let result = [outresult, outresult2] webiopi().callMacro("setHwPWMforPan", result); }; としてみましたが、どうすればいいかわかりません 今回terateilを使うのが初めてなのですがマナー違反などしてませんでしょうか?? ご迷惑おかけして申し訳ないです! エラーメッセージはこのようになっています webiopi.js:394 Uncaught ReferenceError: $ is not defined at WebIOPi.callMacro (webiopi.js:394) at check ((index):49) at HTMLInputElement.onclick ((index):29) WebIOPi.callMacro @ webiopi.js:394 check @ (index):49 onclick @ (index):29
ozwk

2020/12/11 00:24 編集

うーんなんでしょうか /etc/webiopi/configは正しく設定してますよね? あとはそのコードに正しく動いていた 0->90度 "も" 0->90->0とは別関数として追加してみて 正しく動くか見てみるとか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問