Je travaille sur un mobile contrôlé par le Web et j'utilise un port série pour communiquer avec un Arduino. J'ai écrit du PHP qui utilise juste fwrite()
et écrit un ASCII 1 ou un ASCII 2 sur le port série. L'Arduino écoute ce port et fait des choses en fonction de ce qu'il entend. Je sais que mon PHP fonctionne, parce que chaque fois que je lui dis d'envoyer des choses, l'Arduino le reçoit. Voici le code Arduino:lecture de série Arduino
//This listens to the serial port (USB) and does stuff based on what it is hearing.
int motor1Pin = 13; //the first motor's port number
int motor2Pin = 12; //the second motor's port number
int usbnumber = 0; //this variable holds what we are currently reading from serial
void setup() { //call this once at the beginning
pinMode(motor1Pin, OUTPUT);
//Tell arduino that the motor pins are going to be outputs
pinMode(motor2Pin, OUTPUT);
Serial.begin(9600); //start up serial port
}
void loop() { //main loop
if (Serial.available() > 0) { //if there is anything on the serial port, read it
usbnumber = Serial.read(); //store it in the usbnumber variable
}
if (usbnumber > 0) { //if we read something
if (usbnumber = 49){
delay(1000);
digitalWrite(motor1Pin, LOW);
digitalWrite(motor2Pin, LOW); //if we read an ASCII 1, stop
}
if (usbnumber = 50){
delay(1000);
digitalWrite(motor1Pin, HIGH);
digitalWrite(motor2Pin, HIGH); //if we read an ASCII 2, drive forward
}
usbnumber = 0; //reset
}
}
Donc, cela devrait être assez simple. À l'heure actuelle, lorsque j'envoie un ASCII 1 ou un ASCII 2, la DEL avec laquelle je teste (sur la broche 13) s'allume et reste allumée. Mais, si j'envoie un autre ASCII 1 ou 2, il s'éteint puis se rallume. Le but est de l'allumer seulement si un ASCII 1 était la dernière chose envoyée et de rester jusqu'à ce que 2 soit la dernière chose envoyée.
Edit: Voici mon PHP:
<?php
$verz="0.0.2";
$comPort = "com3"; /*change to correct com port */
if (isset($_POST["rcmd"])) {
$rcmd = $_POST["rcmd"];
switch ($rcmd) {
case Stop:
$fp =fopen($comPort, "w");
fwrite($fp, chr(1)); /* this is the number that it will write */
fclose($fp);
break;
case Go:
$fp =fopen($comPort, "w");
fwrite($fp, chr(2)); /* this is the number that it will write */
fclose($fp);
break;
default:
die('???');
}
}
?>
<html>
<head><title>Rover Control</title></head>
<body>
<center><h1>Rover Control</h1><b>Version <?php echo $verz; ?></b></center>
<form method="post" action="<?php echo $PHP_SELF;?>">
<table border="0">
<tr>
<td></td>
<td>
</td>
<td></td>
</tr>
<tr>
<td>
<input type="submit" value="Stop" name="rcmd"><br/>
</td>
<td></td>
<td>
<input type="submit" value="Go" name="rcmd"><br />
</td>
</tr>
<tr>
<td></td>
<td><br><br><br><br><br>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>
J'ai changé cela et maintenant la led ne s'allume plus du tout. Cela doit signifier qu'il ne lit pas un ascii 1 ou 2 droit? – blueintegral
Pouvez-vous vous connecter/imprimer en quelque sorte ce que vous recevez? Publiez également votre code PHP - cela aidera à affiner le problème. –
Si j'essaie d'utiliser le moniteur série qui est intégré à l'environnement arduino, PHP se plaint que le port COM n'est pas disponible pour écrire, – blueintegral