Offline
Newbie
Karma: 0
Posts: 15
|
 |
« on: November 17, 2011, 11:51:54 am » |
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. O código do Arduino é basicamente esse: #define ANALOG_PIN 0
void setup() { Serial.begin(9600); }
void loop() { if (Serial.available() > 0) { if (Serial.read() == '1') Serial.print(analogRead(ANALOG_PIN), DEC); } } E o do PHP: <?php $port = fopen('/dev/ttyUSB0', 'w+'); sleep(2); fwrite($port, '1'); sleep(1); echo fgets($port); fclose($port); ?> Queria saber se haveria alguma maneira de eliminar esse sleep.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #1 on: November 17, 2011, 11:56:20 am » |
Que arduino você está utilizando?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #2 on: November 17, 2011, 12:30:50 pm » |
Arduino Mega.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #3 on: November 17, 2011, 02:03:13 pm » |
É 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: http://www.arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #4 on: November 23, 2011, 08:03:09 am » |
Fiz o esquema da ligar um resistor do +5V pro reset mas deu erro na hora de compilar o programa.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #5 on: November 23, 2011, 09:24:45 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #6 on: November 26, 2011, 05:49:29 pm » |
Que botão é esse?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #7 on: November 27, 2011, 09:40:58 am » |
Que botão é esse?
O único botão que todo arduino tem.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #8 on: January 03, 2012, 01:26:19 pm » |
O primeiro sleep() eu consegui remover... agora falta o segundo.
Além do mais, se mais de uma pessoa acessar a página ao mesmo tempo, dá erro.
|
|
|
|
|
Logged
|
|
|
|
|
Brazil
Offline
Sr. Member
Karma: 0
Posts: 381
|
 |
« Reply #9 on: January 03, 2012, 06:54:32 pm » |
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! Afinal qual erro da? 
|
|
|
|
« Last Edit: January 03, 2012, 06:57:23 pm by Kotch »
|
Logged
|
????????????????????
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 19
Posts: 2305
|
 |
« Reply #10 on: January 04, 2012, 04:52:23 pm » |
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. :\
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #11 on: January 05, 2012, 02:23:12 pm » |
Arrumei uma solução.
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.
|
|
|
|
|
Logged
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 19
Posts: 2305
|
 |
« Reply #12 on: January 05, 2012, 06:07:08 pm » |
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.
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #13 on: January 11, 2012, 12:47:01 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 15
|
 |
« Reply #14 on: January 13, 2012, 10:44:04 am » |
Essas medidas discrepantes não são ruído não...
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.
|
|
|
|
|
Logged
|
|
|
|
|
|