2015-11-08 54 views
0

我想創建一個domotica設置與我的Arduino和我的服務器。在使用射頻發射器之前,我試圖從我的php網頁上控制LED(設置它們的開/關)。PHP網站控制Arduino發送代碼加載網頁

這一切都完美的作品,除了一個事實,即LED1轉彎時我加載/刷新網頁上。我的網頁包含下面的代碼(這是我改編自https://www.lassiemarlowe.com/tutorials/power-led-bulbs-arduino-php-part-2/):

<html> 
<head> 
<title>Arduino Domotica Control Panel</title> 

一些CSS代碼在這裏...

<?php 
switch($_POST) 
{ 
    case isset($_POST['submitOn']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 1); 
     fclose($fp); 
     break; 
    case isset($_POST['submitOff']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 2); 
     fclose($fp); 
     break; 
    case isset($_POST['submitOn1']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 3); 
     fclose($fp); 
     break; 
    case isset($_POST['submitOff1']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 4); 
     fclose($fp); 
     break; 
    case isset($_POST['submitOn2']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 5); 
     fclose($fp); 
     break; 
    case isset($_POST['submitOff2']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 6); 
     fclose($fp); 
     break; 
    case isset($_POST['allon']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 7); 
     fclose($fp); 
     break; 
    case isset($_POST['alloff']): 
     $fp = fopen("/dev/ttyUSB1", "w"); 
     fwrite($fp, 8); 
     fclose($fp); 
     break; 
} 

?> 
</head> 


<body> 

<h1>Control Panel</h1> 


<form class="control-panel-frm" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <input type='submit' class="s3d turnOn" name='submitOn' value='LED 1 on'> 
    <input type='submit' class="s3d switchoff" name='submitOff' value='LED 1 off'> 
    <br><br> 
    <input type='submit' class="s3d turnOn" name='submitOn1' value='LED 2 on'> 
    <input type='submit' class="s3d switchoff" name='submitOff1' value='LED 2 off'> 
    <br><br> 
    <input type='submit' class="s3d turnOn" name='submitOn2' value='LED 3 on'> 
    <input type='submit' class="s3d switchoff" name='submitOff2' value='LED 3 off'> 
    <br><br> 
    <input type='submit' class="s3d turnOn" name='allon' value='All LEDs on'> 
    <input type='submit' class="s3d switchoff" name='alloff' value='All LEDs off'> 

</form> 

如前所述,問題是當我加載/刷新網頁時,LED1(對應php post'submitOn')開啓。當檢查串行監視器時,Arduino收到'1'。

我應該爲了防止我的網頁的加載時發送任何內容到Arduino的改變?

回答

1

我想你理解錯了開關。開關將大括號()的值與大小寫所給出的值進行比較。請參閱switch的手冊頁以獲得更多關於此的說明。

除此之外,你沒有unterstood數據從HTML表單傳遞到PHP應用程序。您發送LED 1 on作爲表單元素submitOn的值。

試試這個:

<?php 
$actions = [ 
    'submitOn' => 1, 
    'submitOff' => 2, 
    //... 
]; 

if(!empty($_POST['action']) && array_key_exists($_POST['action'], $actions)){ 
    $fp = fopen("/dev/ttyUSB1", "w"); 
    fwrite($fp, $actions[$_POST['action']]); 
    fclose($fp); 
} 

?> 
<form class="control-panel-frm" method="post" action=""> 
    <input type="submit" class="s3d turnOn" name="action" value="submitOn"> 
    <input type="submit" class="s3d switchoff" name="action" value="submitOff"> 
</form> 

注意形式的空action將表單數據發送到當前頁面。請參閱Two submit buttons in one form以使用多個提交按鈕。

+0

代碼的'if'行有一個語法錯誤;該行應該以代碼中看到的兩個括號')'而不是兩個結尾。 – DaanMusic

+0

你是完全正確的。我已經修復了它... – pmayer

+0

'array_key_exists'更合適... – pmayer