Estou desenvolvendo meu projeto de graduação que consiste num bando de sensores ligados ao Arduino, e uma página em PHP apresenta as medidas numa página na internet.
É bem provável que seu arduino tenha um auto-reset. Toda vez que a porta serial é aberta ele reseta o arduino por isso do delay. Você precisa desabilitar o auto-reset. Leia isso: Arduino Playground - DisablingAutoResetOnSerialConnection
Sem o auto-reset, quando a IDE do Arduino começa a mandar o código, vc precisa apertar o botão do reset no Arduino para o bootloader receber o novo código.
Acho que voce deve usar um shield pra ethernet!
pois voce tem uma porta serial, um usuario acessa o php abre esta porta (serial) se outro usuario ta acessaando a pagina o php vai tentar abrir uma porta que ja está aberta, acho que por causa disto da o erro, fiz algo semelhante, com ethernet shield usava pra controlar lampadas na minha casa, e abrir o portao da garagem, que eu monitorava por uma camera na internet!
Talvez melhore o seu codigo mandando ignorar o comado de abertura da porta (serial), se ela ja estiver aberta!
A solução para fazer isto sem pagar por um shield the Ethernet seria que esse script fosse corrido apenas pelo servidor de X em X tempo e os valores seriam guardados numa tabela ou variável global com o servidor de PHP.
Depois o teu script de PHP que serve os clientes enviaria o dito valor.
Se cada cliente tentar abrir a ligação USB, isso vai dar erro. :\
Criei uma página que, quando pega os dados da serial, em vez de exibir para o usuário, grava em um arquivo de texto. Essa página deve ficar rodando continuamente no servidor e cada vez que é carrega, é atualizada automaticamente. Outra página, que será executada pelo cliente, pega os dados do arquivo de texto e mostra ao usuário. Assim, o usuário pode ver a página de forma mais rápida, em vez de ficar esperando o tempo daquele sleep().
Outro problema que eu percebi é que dessa forma tem muito ruído, às vezes dá umas medidas um pouco discrepantes, diferente de quando eu uso aquele exemplo do AnalogReadSerial.
mctimbu:
Outro problema que eu percebi é que dessa forma tem muito ruído, às vezes dá umas medidas um pouco discrepantes, diferente de quando eu uso aquele exemplo do AnalogReadSerial.
Muito provavelmente porque sempre que corres o script, fazes reset ao Arduino. Já experimentaste desactivar o reset automático a ver se melhora?
Tens acesso a uma base de dados no teu servidor? Seria mais interessante (e provavelmente mais eficiente) se metesses o valor numa BD em vez de ficheiros.
Foi o que o Wagner Sartori Junior sugeriu e eu fiz...
Por enquanto está funcionando perfeitamente. Vai ver é mau contato, porque quando não tem nada ligado na entrada analógica, aparece uma valor aleatório. A montagem tá muito mal feita.
Naquele exemplo do AnalogReadSerial, vocês sabem se o Arduino faz algum tipo de média dos valores lidos e apresenta na tela? Porque dessa forma, a leitura do sensor de temperatura, no momento varia de 50 a 51 (decimal). Mas fazendo da outra forma, às vezes chega a aparecer 48, o que dá uma diferença de 2 graus na leitura nesse sensor.