Seriale e php... Ora lancio tutto dalla finestra.

Buonasera ragazzi. Ho un problema stupido ma che mi sta facendo dannare.
Sto seguendo un esempio preso da Internet tanto per capire come usare la classe php serial. Ma non riesco a farlo funzionare... Cioè, giocandomi il paradiso son riuscito a fare comunicare arduino e pc, ma in maniera scorretta.
Praticamente lo script a seconda che si clicchi su accendi o su spegni invia ad Arduino o la lettera a o la lettera s, quindi un carattere... Un semplicissimo carattere...
Lo sketch dovrebbe interpretarlo e agire di conseguenza. Il problema è che il carattere viene inviato, ma lo sketch lo interpreta in maniera errata, ovvero:
la a è una a accentata, e la s una o accentata...
Ma provando a riprintare la variabile sullo script viene interpretata correttamente. Cioè se con un serial print la vado a leggere con lo script e printare sulla pagina web mi associa correttamente a o s... Come mai Arduino le legge così??? Può essere che lo script le invia come stringa e arduino le salva come char??? Può comportare questo una lettura errata da parte di Arduino???
Ho provato a cambiare il baudrate, a mettere qualche delay per dare il tempo al pc di inviare il dato. Ma a quando pare il problema non sta nell'invio quanto nell'interpretazione...
Comunque vi posto script e sketch, magari c'è qualcosa che non vedo.
Script

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
define("PORT","COM4");
 
if (isset($_GET['action'])) { 
        include "PhpSerial.php";
    $serial = new phpSerial;
    $serial->deviceSet(PORT);
        $serial->confBaudRate(2400);
        $serial->confParity("none");
        $serial->confCharacterLength(8);
        $serial->confStopBits(1);
        $serial->confFlowControl("none");
        $serial->deviceOpen();
        if ($_GET['action'] == "on") { 
            $serial->sendMessage('a');
    } else if ($_GET['action'] == "off") {          
$serial->sendMessage('s'); 
        }
     $read = $serial->readPort();
    print $read;	
        $serial->deviceClose(); 
}
 
?>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Test Arduino</title> 
</head> 
<body> 


<h1>Test Arduino</h1>
 
<a href="<?=$_SERVER['PHP_SELF'] . "?action=on" ?>">
<button style="width:100px""><h1>ON</h1></button></a>
<a href="<?=$_SERVER['PHP_SELF'] . "?action=off" ?>">
<button style="width:100px""><h1>OFF</h1></button></a>
</body> 
</html>

Sketch

int LED = 13;
char oldval= 's',val = '0';
void setup() {
  pinMode(LED,OUTPUT);
  Serial.begin(2400);
}
 
void loop () {
  if (Serial.available() >0){
  val = Serial.read();
  if(val!=oldval)
  oldval=val;
  Serial.println(val);
  if(oldval=='s'){
    digitalWrite(LED,LOW);
  Serial.println('0');
  }else if (oldval=='a'){
  digitalWrite(LED,HIGH);
  Serial.println('1');
  }
  }
 
}

Ah, se dal serial monitor scrivo o a o s, questi vengono interpretati correttamente, e infatti il led o si accende o si spegne a seconda del comando.
Ringrazio chiunque riuscirà ad aiutarmi.
Buona cena ragazzi.

Ciao,
con la PHPSerial io c'ho buttato l'anima per un po', però utilizzando Linux (Raspberry Pi in particolare).
Forse non la usavo bene, non so... hai voglia di cambiare baudrate, di pregare in aramaico, accarezzare Arduino e raspi... era instabile come poche e, soprattutto, se inviavo stringhe lunghe Arduino le interpretava come pareva a lui. Con l'esempio che usi tu, che se non erro è questo, però, funzionava al 99% (inviando sempre e soltanto un carattere, non di più). Del resto, sempre se l'esempio è quello che dico io, alla fine del post leggi:
[PS: Anche se non ho avuto modo di verificare la cosa di persona, vi avviso che mi è stato riferito nei commenti che la libreria lavora bene su linux ma che non permette di inviare dati ad arduino sotto windows ma permette solo di riceverne]

E infatti, da quello che leggevo in giro all'epoca, con Windows quella classe è ancora più str.... essante usarla. Forse potresti usare questa classe. Non l'ho provata, ma pare sia Windows oriented. Soltanto che, purtroppo:
Unrestricted (no delay and no limited data transfer volume) version can be obtained buying it.

P.S.:
una prova l'avevo fatta con fwrite e fread invece di usare la classe, ma su Linux si smadonnava con i permessi per il device in /dev/quellocheera. Magari su Windows è paradossalmente più semplice...

Fai un bel lancio

subnet:
Ciao,
con la PHPSerial io c'ho buttato l'anima per un po', però utilizzando Linux (Raspberry Pi in particolare).
Forse non la usavo bene, non so... hai voglia di cambiare baudrate, di pregare in aramaico, accarezzare Arduino e raspi... era instabile come poche e, soprattutto, se inviavo stringhe lunghe Arduino le interpretava come pareva a lui. Con l'esempio che usi tu, che se non erro è questo, però, funzionava al 99% (inviando sempre e soltanto un carattere, non di più). Del resto, sempre se l'esempio è quello che dico io, alla fine del post leggi:
[PS: Anche se non ho avuto modo di verificare la cosa di persona, vi avviso che mi è stato riferito nei commenti che la libreria lavora bene su linux ma che non permette di inviare dati ad arduino sotto windows ma permette solo di riceverne]

E infatti, da quello che leggevo in giro all'epoca, con Windows quella classe è ancora più str.... essante usarla. Forse potresti usare questa classe. Non l'ho provata, ma pare sia Windows oriented. Soltanto che, purtroppo:
Unrestricted (no delay and no limited data transfer volume) version can be obtained buying it.

P.S.:
una prova l'avevo fatta con fwrite e fread invece di usare la classe, ma su Linux si smadonnava con i permessi per il device in /dev/quellocheera. Magari su Windows è paradossalmente più semplice...

Ciao Subnet, intanto ti ringrazio per il tempo che mi hai perso dietro. Anche se un pò mi hai demoralizzato, soprattutto sul fatto che con stringhe lunghe va in pappa.
Ieri dopo numerose prove (e una visita da parte del sommo che mi ha chiesto gentilmente se la finivo di tirarlo giù perchè poveretto era stanco di dover risalire), ho anche provato a buttare 30 euro e a installare la classe che mi hai linkato ma non son riuscito ad usarla. Pochi esempi e buttati li. Poi mi ci metterò dietro meglio quando il sangue sarà un pò più freddo.
Comunque nulla, anche provando a printare i valori in decimale continuava mi dava dei valori assurdi. Sempre lo stesso, ma non corrispondevano a nessun carattere ascii. Veniva fuori tipo -70. Però erano interpretati correttamente perchè quando li rispedivo indietro al browser mi printava lo stesso valore. E se lo lasciavo come char quale -70 per lo script era la a... Come in effetti avrebbe dovuto essere... (Per fortuna avevo trovato una classe che sotto windows oltre a inviare leggeva anche, perchè la precedente spediva solo).
Oggi mi ci son buttato a capofitto e ho affiancato a windows ubuntu. Installato apache, php e mysql (che tutto sommato quest'ultimo penso che per il mio progetto non mi servirà assolutamente a nulla, ma era nell'insieme). Sudato per tutti i vari permessi (che mi devono ancora spiegare perchè se il mio utente è impostato amministratore e mi loggo con il mio utente amministratore non lo sono, ma vabbè). Ho reinserito nello script la classe che windows non digeriva in lettura e... Funziona!!!
Stesso sketch e stesso script. Non ho cambiato assolutamente nulla... Mi pare una cosa tanto assurda... Comunque son soddisfatto
Ora farò un pò di prove a vedere quanti dati posso mandare senza avere errori. Ma mi accontento di molto poco... Mi bastano 4 byte... Toh, volendo cagare fuori dal secchio al massimo 5 per impostare un comando che se non sono in casa non me ne fregherebbe assolutamente niente. Anzi, a dirti il vero a pensarci bene potrei mandarne anche 2, vado a modificare solo quello che mi interessa ogni volta, senza inviarli tutti. Un byte dice il comando che va modificato e l'altro gli dà il valore.
Boh, ora faccio due prove per capire bene come funziona e vedo come procedere... Speriamo di non trovare altri intoppi. Questo è stato molto demoralizzante.
L'esempio che ho seguito è esattamente quello del link che hai inserito tu.

flz47655:
Fai un bel lancio

Hahaha te fai lo spiritoso, ma se la bile saliva ancora un pò... :grinning: :grinning: :grinning: