2017-09-28 17 views
0

なぜ私は別のファイルで動作し、共有ファイルでは動作しないのかについて頭を浮かべます。この謎を解くことができるヒーローは私のチャンピオンになるでしょう。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文字と他の整数ですか?私は本当に助けを使うことができます!

+0

私は改行を責めます。投稿 'cat -vet newfile.txt' – bishop

+0

あなたがそこで何を意味しているかわかりません、どういう意味ですか?ありがとう@bishop –

+0

私の推測では、編集時のファイルの行末とPHPの作成時の行末が矛盾していて、あなたのプログラムがそれを処理していないと思います。 'cat'はUNIXマシン上のコマンドです。 '-vet'引数はGNU/Linuxマシン上で動作し、ファイルに印字不能文字を表示します。あなたがそれを持っていない場合は、ファイルの実際のバイト数を表示し、行末を再確認するプログラムを使用することをお勧めします(行方不明の非印刷文字はありません)。 – bishop

答えて

0

両方のファイルのエンコードが同じであることを確認しましたか。 (ASCII対Unicode)?