Alguém pode me informar?

Com a função attachInterrupt () consigo parar uma comunicação em 9600 bauds e começar outra no mesmo programa com 4800 bauds?

Exibições: 556

Responder esta

Respostas a este tópico

WDC, boa noite,

detalhe mais sua necessidade.

Rui

 Boa noite Rui Viana

Estou com um projeto onde estou usando um modulo RF 433Mhz,  dois arduinos uno e shield GSM sim900. Em um arduino uso módulo Transmissor para enviar um sinal e no outro arduino uno, uso o módulo Receptor e o shield Gsm acoplado no mesmo arduino. No meu programa preciso usar a comunicação da seguinte forma para para o módulo RF 433mhz

Serial.begin(9600). Mas meu shield gsm  usa também essa velocidade  serial.begin(9600). Dessa forma não está funcionando. gostaria de saber se tem como usar uma outra velocidade 4800 bauds para o GSM, no mesmo programa?   

#include <RCSwitch.h>
// insira a biblioteca
RCSwitch mySwitch = RCSwitch ();
#include "SIM900.H"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

int led = 13; // conexão (IN1) do Motor 1 (M1) = (IN1M1)
int value = -1; // Variavel responsavel em receber os dados do RF
int ledPin_vermelho = 5; //adicionado no programa
int ledPin_verde = 4; //adicionado no programa
const int botao_porta = 7;
int botao_porta_estado = 0;
const int botao_motorista = 6;
int botao_motorista_estado = 0;

// Programa GSM
int numdata;
boolean started = false;
char smsbuffer[160];
char n[20];

char sms_position;
char phone_number[20];
char sms_text[100];
int i;

void setup() // seta os pinos dos motores como saida
{

pinMode(led, OUTPUT);
pinMode(ledPin_vermelho, OUTPUT);
pinMode(ledPin_verde, OUTPUT);
pinMode(botao_porta, INPUT);
pinMode(botao_motorista, INPUT);

Serial.begin(9600);
Serial.println("\n Comunicacao RF LINK esta OK! Funcionando. ");
mySwitch.enableReceive(0); // seta como receptor/ 0 "0" é para nao interromper, deixar continuo o pino padrao DATA 2
Serial.println("\n GSM Pronto! ");
delay(50);


//Partee referente ao gsm
Serial.begin(9600);

if (gsm.begin(9600))
{
Serial.println("\nstatus=READY");
started=true;
}

void loop() {

botao_motorista_estado = digitalRead(botao_motorista);
botao_porta_estado = digitalRead(botao_porta);

if (mySwitch.available()) // Quando estiver sinal disponivel
{

value = mySwitch.getReceivedValue(); // recebe na variavel value no status


if (value == 1 && botao_motorista_estado == 1 && botao_porta_estado == 0)
{

digitalWrite(ledPin_verde, LOW);
delay(500);
digitalWrite(ledPin_verde, HIGH);
digitalWrite(ledPin_vermelho, LOW);
delay(500);
digitalWrite(ledPin_vermelho, HIGH);
digitalWrite (led, HIGH);
Serial.print("\n Valor recebido: ");
Serial.print(mySwitch.getReceivedValue());
Serial.println("\n Motorista e crianca no carro com as portas fechadas!");


}

if (value == 1 && botao_motorista_estado == 0 && botao_porta_estado == 0)
{

digitalWrite(ledPin_verde, LOW);
digitalWrite(ledPin_vermelho, HIGH);
delay(500);
digitalWrite(ledPin_vermelho, LOW);
digitalWrite(led, LOW);
Serial.print("\n Valor recebido: ");
Serial.print(mySwitch.getReceivedValue());
Serial.println("\n Motorista NAO esta no carro, CRIANCA esta na cadeira e porta FECHADA!");

// Programa GSM
started = true;
Serial.println("\nstatus=READY");
}

if (started)
{
if (sms.SendSMS("+553171745729", " Arduino SMS.Manda uma mensagem para meu numero ai!"))

Serial.println("\nSMS enviado OK.");
}

else
{
Serial.println("\nError sending SMS.");
}
if (started)
{
sms_position = sms.IsSMSPresent(SMS_UNREAD);
if (sms_position)
{

Serial.print("SMS position:");
Serial.println(sms_position, DEC);
sms.GetSMS(sms_position, phone_number, sms_text, 100);
Serial.println(phone_number);
Serial.println(sms_text);
}

delay(2000);
}

}

if (value == 1 && botao_motorista_estado == 0 && botao_porta_estado == 1)
{

digitalWrite(ledPin_verde, HIGH);
delay(50);
digitalWrite(ledPin_verde, LOW);
digitalWrite(ledPin_vermelho, HIGH);
digitalWrite(led, LOW);
Serial.print("\n Valor recebido: ");
Serial.print(mySwitch.getReceivedValue());
Serial.println("\n Motorista NAO esta no carro, CRIANCA esta na cadeira e a porta ABERTA!");

}

mySwitch.resetAvailable();

}

A velocidade não vai alterar nada.

Você tem que iniciar a segunda serial, indicando os pinos a serem usados:

SoftwareSerial SerialSim900(10, 11); // RX, TX

Inicialize sua segunda serial dentro do setup():

SerialSim900.begin(9600);

E ajuste o seu código para usar o SerialSim900 para se comunicar com o seu SIM900.

Boa sorte,

  'Eiju

Eiju

Farei os testes Obrigado pela dica!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço