Show Posts
Pages: [1] 2 3 ... 222
1  International / Portugues / Re: Wi-Fi Low Cost... on: September 29, 2014, 04:29:52 pm
De momento não. Tenho um link, mas há um site esp8266.com com imensa informação.
2  International / Portugues / Re: Executar comandos remotos com RF 433MHz - Automação Residencial on: September 29, 2014, 12:14:17 pm
Uma pesquisa no fórum e não é difícil de encontrar...

http://forum.arduino.cc/index.php?topic=149801.0

3  International / Portugues / Wi-Fi Low Cost... on: September 29, 2014, 11:06:59 am
Viva,

Hoje apeteceu-me deixar aqui uma notícia dum chip que me está a dar a volta à cabeça...

O ESP8266. Vem da China, não tem aprovação nenhuma para uso na Europa, por isso dá apenas para o mercado hobbyista, mas o que é interessante é que este chip proporciona a projectos com Arduinos e semelhantes uma interligação Wi-Fi... BARATA!!!

Vejam o preço:

http://www.ebay.co.uk/itm/ESP8266-Serial-WIFI-Wireless-TransceiveR-Module-Send-Receive-LWIP-AP-STA-Arduino-/271596948485?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item3f3c708c05

aí uns 5 dólares ou isso.
Simplesmente incrível.

Eu já tenho um aqui em casa e de momento o grande problema é o interface que não é de todo fácil de usar por ser mais virado para humanos do que para microcontroladores (muitas strings)... mas de resto abre muito boas possibilidades para toda a malta.

Em vez de usar os nRF... por um pouco mais, podemos meter um Arduino com chips destes a enviar dados em UDP como se um PLC se tratasse. Enfim... Que acham disto?
4  International / Portugues / Re: Executar comandos remotos com RF 433MHz - Automação Residencial on: September 29, 2014, 11:01:35 am
Portanto, existe comunicação em dois sentidos... o master activa o alarme e o slave envia o estado do alarme se algo acontecer.

Como vais saber que a comunicação está a funcionar se não tens um feedback?

Se tencionas ter mais que um slave, então tens de ter algo que distinga um slave do outro. Assim sendo, vais precisar no minimo de enviar dois caracteres. Um para te indicar o comando... outro para te indicar qual o nó que o deve executar.

Como vais fazer para garantir que os nós não vão interferir um com o outro?

O problema é que no que toca a comunicações não existe grande e pequena escala. A partir do momento que tens mais que um nó, o trabalho é o mesmo que teres n... pois já tens de garantir que não existe interferência e que o protocolo é bom o suficiente para o que pretendes.

Como vais transmitir com um RF desse género, será aconselhável também teres um método de detectares erros... como um checksum, por exemplo.

Existe um post sobre automação residencial no fórum onde este assunto de comunicações foi falado e examinado em grande detalhe... são 30 e tal páginas, se não me engano, mas com muito sumo... smiley
5  International / Portugues / Re: Executar comandos remotos com RF 433MHz - Automação Residencial on: September 29, 2014, 08:42:00 am
O que tu estás à procura é dum protocolo de comunicação.

Ou seja, um arduino envia algo para o outro e o outro executa uma acção. Um protocolo pode ser tão simples como

Code:
Serial.print("A");

Ou bastante mais complexo com métodos para detectar e até corrigir erros de comunicação. A questão que se põe é, pretendes apenas ligar um LED num (único) arduino, ou pretendes que isto seja mais abrangente com vários Arduinos a comunicar com um central?

A comunicação é apenas num sentido ou em dois sentidos?
6  International / Portugues / Re: WARNING on: September 29, 2014, 03:39:36 am
Antes de mais, vai uma dica... da próxima vez coloca um título que queira dizer algo em vez de meteres só WARNING. A maior parte das pessoas vai pensar que isto é SPAM. Para te ser sincero, eu entrei no tópico apenas para carregar no botão de report até que vi que é uma dúvida válida.

Sim... podes programar em C e provavelmente não vês esse erro. Ou podes programar em VB.

Se Java é mesmo o que pretendes, talvez seja ideal pegares na versão que te é indicada por esse erro. A IDE funciona? Se sim, talvez tenhas mais sorte num fórum de Java. smiley-wink
7  International / Portugues / Re: Problema com attachInterrupt() dentro da classe on: September 28, 2014, 04:11:57 pm
Attachinterrupt pede uma função...

Tu estás a passar um método.  Parece a mesma coisa, mas não é.

8  International / Portugues / Re: Problemas para ativar e desativar o sensor PIR pela web on: September 28, 2014, 03:35:01 pm
O sensor detecta... Até aqui tudo bem, mas só vai disparar um alarme se quando tu, ligares o alarme ele estiver actuado.
Foi isso que programaste....

O que tu queres é dentro da loop ter algo deste genero.

Code:

If (valorSensorPIR ==1 && statusalarme == 1) {
   LigaBuzina(); // andam cá gatunos.
}


Mais nada.
Quando activares o alarme pela web, ele fica armado e quando ler o pir no loop, activa a buzina se for caso disso.
9  International / Portugues / Re: Serial.read() inicio condicionado on: September 27, 2014, 07:57:46 am
Portanto, o protocolo série parece estar a funcionar?

Experimenta com outro lcd então... Talvez até um alfanumérico...

10  International / Portugues / Re: Serial.read() inicio condicionado on: September 26, 2014, 07:54:55 am
Existem algumas coisas que sem testar não te sei dizer (por não usar algumas destas funções...)

Tu mandas um LF para identificar o fim da string, mas não sabes o que é que a tua função ReadBytesUntil faz com esse LF. Idealmente devia tirá-lo do buffer e não o colocar no array da mensagem. Mas não sei se faz isso ou não. Este poderá ser um problema.

O outro é o facto dos arrays não estarem terminados... Mais uma vez, não sei se a função readbytesuntil te coloca um '\0' na variável mensagem para que quando leres como string as funções saibam onde parar. Uma solução para isto é garantires que o teu array mens está limpo.

Code:
char mens[19]; //um array... em vez de 5 ou 6.
unsigned char tipo = 0;
memset(mens, '\0', 20); //isto inicializa o array com '\0'. Para garantir que tudo está limpo e que ficas com um caracter de termino.

Eu não tenho a última versão do Arduino para experimentar isto... mas pelo que mostras nas imagens parece ser uma sobreposição de memória que está a ocorrer.

Outra coisa que terás de fazer, julgo eu, é limpar o LCD antes de refrescares os dados.

Code:
    default:
        delay(4000);
        lcd.clear_lcd(WHITE);
       
}
lcd.str_lcd("                    ",1, tipo, 1, BLACK, -1); //isto deverá "limpar" o LCD para que não haja sobreposição de pixels.
lcd.str_lcd(&mens[1],1, tipo, 1, BLACK, -1);
}


De momento acho que o problema estará no LCD e não necessariamente na comunicação série. Uma maneira de testares isto é desligares o LCD e em vez de mandares os valores para o LCD, envia para a porta série e vê se aparece o que pretendes sempre que os dados são enviados. Assim tiras a limpo qual é ao certo o problema actual.

11  International / Portugues / Re: Serial.read() inicio condicionado on: September 25, 2014, 10:03:50 am
Seja como for... mesmo que isto funcionasse, terias na mesma problemas de sincronização porque estás a assumir que ambos estão a fazer a mesma coisa.

Ou seja, que o computador está a mandar precisamente o que o Arduino quer ouvir... o que pode não ser verdade.
Enviando um caracter de inicio de trama e bastante mais simples para o Arduino de fazer o que tem a fazer... e ficarias com um programa mais leve.

Code:

char mens[20]; //um array... em vez de 5 ou 6.
unsigned char tipo = 0;
if (Serial.available() >20) {
   Serial.readBytesUntil(lf, mens, 20);
}
switch (mens[0]) {
    case 'A':
        tipo = 1;
        break;
    case 'B':
        tipo = 3;
        break;
    case 'C':
        tipo = 4;
        break;
//.... preenche o resto...
}

lcd.str_lcd(&mens[1],1, tipo, 1, BLACK, -1);

Outra coisa...
Isto está extremamente errado!!!!
Code:
while(Serial.available() > 20) //se estiverem 20 caracteres no buffer....
  {
  Serial.readBytesUntil(lf, vr, 20);   //vais ler 20, isto está bem...
  Serial.readBytesUntil(lf, dt, 20);  // + 20 = 40
  Serial.readBytesUntil(lf, tm, 20);  // + 20 = 60
  Serial.readBytesUntil(lf, wip, 20);  // + 20 = 80
  Serial.readBytesUntil(lf, load, 20);  // + 20 = 100...
  }
Não pode funcionar. A solução é definires qual a trama que estás a enviar para o Arduino e partires daí.

Assim vai funcionar facilmente. O que pretendes fazer, além de não funcionar vai ocupar-te imenso tempo para conseguires algo que parece funcionar mas que ao minimo problema dá logo borrada.  
12  International / Portugues / Re: Serial.read() inicio condicionado on: September 25, 2014, 09:42:11 am
Qual é essa biblioteca de lcd que estás a usar?

O LCD tem quantas linhas?
13  International / Portugues / Re: Serial.read() inicio condicionado on: September 25, 2014, 06:25:06 am
Ou seja, os dados foram bem recebidos, mas são mostrados numa ordem estranha?

Repara que todas estas questões podem ser facilmente respondidas com mais informação, particularmente o código fonte...

Até ao momento temos dois pedacinhos de código bastante pequenos e a tua opinião acerca do que o problema é. Sem mais dados é mesmo impossível ajudar.

data1 tem um tamanho constante? Ou é variável?

O sistema linux está a correr como? Tem threads ou processos a aceder à porta série duma forma não sequencial?

A maneira mais robusta de resolver isto é mesmo através dum protocolo... da mesma maneira uqe mandas um caracter de fim, podes enviar um caracter de inicio que te diz o que a string é...

Algo tipo:

Code:
echo "Adata1\0x0d" > /dev/tts/1

14  International / Portugues / Re: Serial.read() inicio condicionado on: September 25, 2014, 01:35:16 am
Não te estarás a esquecer de descartar o enter?

Sem saber qual é a string que estás a receber ou o que está a enviar, não há muito por onde te ajudar...
15  International / Portugues / Re: Serial.read() inicio condicionado on: September 24, 2014, 11:39:53 am
If seriall.available()>20 ...

Não será isso que pretendes?
Pages: [1] 2 3 ... 222