Go Down

Topic: Arduino Uno + Icomsat 1.1 SIM900 (Read 2317 times) previous topic - next topic

brunolrs

Oct 23, 2012, 06:32 pm Last Edit: Oct 23, 2012, 07:11 pm by brunolrs Reason: 1
Boa tarde,
   
Componentes:
   1 - Motor de Passo
   2 - Leds;
   3 - Push Button
   4 - Arduino Uno
   5 - Icomsat 1.1 SIM900
  As funções do programas:
     1 - Envio um sms e o motor de passo e acionado com o led amarelo, recebo o sms de confirmação;
     2 - Envio um sms e o motor de passo e acionado  com o led verde, recebo um sms de confirmação;
     3 - Aperto o push button e recebo um SMS informando o seu acionamento.
  Comecei a escreve o código somente para acender e apagar um led, procurei ajuda na net incrementei meu código mais ainda nada.
  Coloquei os jumpers do shield em rx 4 e tx 5
  Alguém pode me ajudar a descobrir meu erro? Será que estou seguindo o caminho certo?
   Código:
    Tentei colocar o código mais sempre utrapassa o limite, por isso vai em anexo.
    Desde de já agradeço muito a ajuda

HugoPT

#1
Oct 24, 2012, 09:51 pm Last Edit: Oct 24, 2012, 09:55 pm by HugoPT Reason: 1
Bom olhando ao teu codigo encontrei algo que penso estar errado:
Code: [Select]

void checksms(){
 if(gsm.available() > 0){
   Serial.println("--------Nova SMS----------");
gsm.flush();
   delay(1000);
   lesms();
   vadidacodigo();
 }
};

//--------------------------------------------------------------------------------------------------------------------------------------------------------------

void lesms(){
 Serial.println("-----------------------Lendo SMS---------------------");
 delay(2000);
 gsm.println("AT+CMGR=1\r");
gsm.flush();
 for( x=0; x<255; x++){
   data[x]='\0';
 }
 x=0;


Se invocas o comando para ler a sms com o AT+CMGR=1 logo apos ele, o modem devolve te para a porta Serie o corpo da SMS que ira ser carregada no Buffer a espera de ser descarregado.O teu problema penso que seja logo a seguir quando corres o gsm.flush !! Sabes o que o flush faz?
Limpa o buffer :P
Logo nada depois sera lido

Quote
Flush

The new library supports the flush() method, which works the same way that HardwareSerial's flush() does.

     void flush(); // discard the contents of the RX buffer.


Posso estar errado mas ...
Depois podes explicar o que pretendes fazer neste ciclo if?
Code: [Select]
for( x=0; x<255; x++){
    data[x]='\0';
  }






Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

brunolrs

Hugo PT

No trecho de if abaixo armazeno a SMS recebida em uma String e despois trato ela abaixo.


E o que é que o teu programa não faz?

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).

brunolrs

Ele recebe uma SMS, armazena essa SMS em uma String, retira o código da string e ativa um led basicamente e isso. Agora eu queria fazer o caminho inverso. Exemplo: Ativar um sensor através de uma SMS e se esse sensor fosse ativado eu receberia uma SMS.

Acho que temos de primeiro definir os termos.

Um sensor não pode ser activado. Pode ser lido. Um actuador, pode ser activado mas não pode (normalmente) ser lido.

Dito isto, queres mandar um SMS e activar um LED. Isto já funciona?

Para receberes uma mensagem quando o sensor ser activado, como é o sensor? É digital ou analógico? Já fizeste um programa só para enviar SMSs?
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).

brunolrs

A parte de mandar a SMS e ligar ou desligar um led ja funciona com o código acima.
Compreendo a parte do sensor,  mas eu posso colocar um pino em HIGH ou em LOW para fornecer ou não voltagem para um sensor?
O problema em si seria esse, como inserir um interrupção para depois que um determinado pino fosse ativado(assim ligando o sensor( Um sensor pir ou mesmo um PUSH BUTTON) em recebesse um SMS avisando que isso aconceu?



Depende de quanto o sensor consome. Diria que para a maior parte dos sensores que se usam com breadboard isso pode ser feito na boa, senão é adicionar um transistor. Mas porque quererias fazer isso? O projecto funciona a pilhas? Estás ciente que os sensores podem ter tempos de arranque até darem dados fiáveis?

Assim de repente...

Code: [Select]


const int pino_SMS = XXXX; //mete tu o pino...

....


loop() {


if (HIGH == digitalWrite(pino_SMS)) { //escolhe a polaridade do botão aqui...
   //se botão ou sensor activado...
   gsm.println("AT+CMGS=939393933\nACTIVADO");
   gsm.print(0x1a); // isto é equivalente ao Ctrl + Z
}


}



Não me parece que colocar uma interrupção seja bom neste caso. Apenas tens de garantir que o programa passa pela parte de testar o pino de x em x milisegundos e isso por si só garante que não vais ter o sistema a mandar SMSs a torto e a direito. A propósito, seria benéfico colocares um tipo de lógica desses aqui para evitar que mandes SMSs devido a bouncing dos contactos. :)

Era isto que tinhas dúvidas?
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).

brunolrs

Entendi,
     A noite vou testar e aviso progresso

brunolrs

#9
Oct 27, 2012, 07:37 pm Last Edit: Oct 27, 2012, 08:19 pm by brunolrs Reason: 1
Na verdade eu queria simular um alarme que ligasse e desligasse através da SMS, por isso teria que "desativar ou ativar" o sensor. Pois caso a alarme estivesse ligado  eu faria a leitura do sensor caso o alarme estivesse desligado eu não faria a leitura do sensor. Não consegui fazer utilizando o código acima. Pensei que na verdade podeira utilizar um led e caso o pino do led estive HIGH ai faria a leitura se estivesse low não faria a leitura, mas também não funcionou.

Go Up