前提・実現したいこと
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の設定など根本的なことの間違いではないと思います
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/10 08:07
2020/12/10 10:38
2020/12/10 12:31
2020/12/10 13:52
2020/12/11 00:24 編集