2017-08-29 4 views
0

Ich versuche, ein Raspberry Pi Relais ein-/ausschalten wie ein Strobe, aber ich kann nicht scheinen, die While-Schleife zu stoppen, die Seite lädt, und das Relais beginnt zu pulsieren , aber ich kann es nicht stoppen. Der einzige Weg besteht darin, den gesamten Webservice zu stoppen.PHP run loop kontinuierlich bis get = stop

Hier ist mein Code:

<?php 
 
if($_GET['type'] == 'switch') { 
 
$output = shell_exec('gpio mode '.$_GET['pin'].' out'); 
 
$output = shell_exec('gpio write '.$_GET['pin'].' '.$_GET['status']); 
 
} 
 

 
if($_GET['type'] == 'blink') { 
 
while(1) { 
 
\t \t $output = shell_exec('gpio write 1 0'); \t 
 
\t \t sleep(0.1); 
 
\t \t $output = shell_exec('gpio write 1 1'); \t 
 
\t \t break; 
 
\t 
 
\t 
 

 

 
\t \t } 
 
} 
 
?>

+1

Nun, Sie müssen es eine Bedingung geben zu stoppen. Was willst du es haben? Nachdem X blinkt? Nach X Sekunden? Nach...? – ishegg

+0

Ich muss es stoppen, wenn ich stop = stop auf diese php-Seite sende. Ich poste auf dieser URL über eine mobile App, ich brauche den Motor, um kontinuierlich zu pulsieren, bis Said Stop var an die Seite gesendet wird – SARUAV

Antwort

0

Ihre Pause; Die Anweisung stoppt die while-Schleife nicht, sondern unterbricht nur die Schleife und prüft dann erneut die while-Bedingung.

Ich empfehle es eine Bedingung eher als ein auch 1.

while (led == 'on') 
{ 
    //Your code 

    if (when you want it to stop) 
    { 
     led = 'off'; 
    } 

} 

geben, nur eine persönliche Empfehlung. Ihre Seite wird nie aufhören, weil der Code immer ausgeführt wird. Sie können eine Datei ausführen, die die LED steuert. Auf diese Weise kann Ihre Seite nicht mehr ausgeführt werden und die LED kann stattdessen über ein Programm auf der Pi statt auf der Website ausgeführt werden. Daher erkennt Ihr Code die Variable "start" oder "stop", und wenn er gesetzt ist, wird das Programm "start_led" ausgeführt.

Wenn Sie dies tun, stellen Sie sicher, dass Sie den Prozess beenden, der die LED steuert, bevor Sie eine andere starten. In Ihrem "start_led" -Programm können Sie einfach ps -aux | grep "start_led" und dann den Befehl kill verwenden, um die Ausführung dieses Programms zu stoppen.