なぜ私は別のファイルで動作し、共有ファイルでは動作しないのかについて頭を浮かべます。この謎を解くことができるヒーローは私のチャンピオンになるでしょう。PHP/Pythonの奇妙な振る舞い
これは私がやろうとしていることです、PHPスクリプトはデータをファイルに書き込みます。 0,1、または-1です。同じテキストファイルがPythonスクリプトから読み込まれ、-1または1と0に基づいてサーボモーターを左右に移動させます。ダミーのテキストファイルを自分で作成してPythonで読むと、それは魅力的ですが、PythonスクリプトでPHPのテキストファイルを読むと、コンソールに値が表示されますが、サーボは動かない!!!私は読み書き騒動があるか、0と1が書き込まれているかどうかはわかりません。ここにコードがあります。
PHPスクリプト:
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
if ($_POST['leftb'])
{ echo "Left is pressed"; // If Left button is pressed
$txt = -1;} // Set txt to -1
else if ($_POST['rightb'])
{ echo "Right is pressed"; // If Right button is pressed
$txt = 1;} // Set txt to 1
fwrite($myfile, $txt); // Write the value to file
fclose($myfile); // Close file
sleep(1); // Wait 1 second
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = 0; // Reset previous value to 0
fwrite($myfile, $txt); // Write to the same file
fclose($myfile); // Close the file
?>
のPythonスクリプト:あなたが見ることができるように
# System initialization on Raspberry Pi 3
import time
import RPi.GPIO as GPIO
initial = 5
GPIO.setmode(GPIO.BOARD)
GPIO.setup(38,GPIO.OUT)
pwm=GPIO.PWM(38,50)
# Set the servo position in the middle (5)
pwm.start(5)
position = initial
while True:
f = open("newfile.txt","r") # Read file written by PHP for value
x = f.read();
x = int(x) # Make sure its an integer value
position = position + x # Increment or decrement initial position
if position != initial: # If position is different from initial position, update the servo position
pwm.ChangeDutyCycle(position)
print position # Print to screen the current servo position
else:
pwm.stop() # If no new position detected, stop the servo
f.close() # Close the text file
time.sleep(0.8)
、一般的なテキストファイルには、2つのプログラム間で共有されています。ファイルの名前は "newfile.txt"です。私は手動で、私はそれを開いたり、単純に実際にはサーボを回転させないで、端末上のpythonの出力を参照してPHPスクリプトによって書かれているデータを見ることができます。私は新しいテキストファイルを作成し、手動で-1または1または0を書いてサーボが完全に動くなら、同じことが働くでしょう。
2つのテキストファイルに同じ-1または1が異なる理由を理解できませんか? 1文字と他の整数ですか?私は本当に助けを使うことができます!
私は改行を責めます。投稿 'cat -vet newfile.txt' – bishop
あなたがそこで何を意味しているかわかりません、どういう意味ですか?ありがとう@bishop –
私の推測では、編集時のファイルの行末とPHPの作成時の行末が矛盾していて、あなたのプログラムがそれを処理していないと思います。 'cat'はUNIXマシン上のコマンドです。 '-vet'引数はGNU/Linuxマシン上で動作し、ファイルに印字不能文字を表示します。あなたがそれを持っていない場合は、ファイルの実際のバイト数を表示し、行末を再確認するプログラムを使用することをお勧めします(行方不明の非印刷文字はありません)。 – bishop