hola, tengo 2 módulos uno maestro y otro esclavo,
la idea base es la siguiente
el maestro manda
inicio I
dirección en binario 101
la función E para activar o desactivar un led,
O la función A, para que el esclavo envié una cadena de información
la cadena de información consta de los siguientes valores
boolean p = 1;
boolean v = 1;
boolean m = 1;
int th = 16;
int hh = 23;
int c = 9;
boolean pp = 1;
int mm = 5;
int tt = 16;
int vv = 3;
la cadena de datos entonces Seria algo así "11110000100001000110010000100" ya convertido los datos anteriores a binario y juntan dolos en el orden descrito anterior
"p v m th hh c pp mm tt vv" "1 1 1 10000 10000 1000 1 100 10000 100"
todo esos valores se requiere enviarlo en binario
(Muy importante no enviarlo Serial.print(var,BIN); )
por que alli solo lo enviamos como binario por el monitor serial. mas no estamos convirtiéndolo a binario como tal el dato de la variable. tengo un dip en los pines analogicos para obtener la dirección por cada modulo
por lo pronto tengo el siguiente codigo
esclavo
int DipSwitch [3];
const int TxRxPin = 4;
char Inicio = ' ';
int DireccionModulo;
char Fin = ' ';
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
if (analogRead(i + 3) > 500) {
DipSwitch[i] = 1;
}
if (analogRead(i + 3) < 500) {
DipSwitch[i] = 0;
}
}
String Code = String(DipSwitch[3]) + String(DipSwitch[2]) + String(DipSwitch[1]) + String(DipSwitch[0]);
DireccionModulo = Code.toInt();
Serial.println(DireccionModulo);
pinMode(TxRxPin, OUTPUT);
digitalWrite(TxRxPin, LOW);
}
void loop() {
if (Serial.available() != 0) {
Inicio = Serial.read();
if (Inicio == 'I') {
int DireccionServidor = Serial.parseInt();
if (DireccionServidor == DireccionModulo) {
char Funcion = Serial.read();
if (Funcion == 'E') {
Fin = Serial.read();
if (Fin == 'F') {
// entra para realizar algun cambio
}
}
if (Funcion == 'A') {
Fin = Serial.read();
if (Fin == 'F') {
digitalWrite(TxRxPin, HIGH);
Serial.print("I");
Serial.print(DireccionModulo);
Serial.print("F");
Serial.print( //Enviar 34 bits );
Serial.flush();
digitalWrite(TxRxPin, LOW);
}
}
}
}
}
delay(100);
}
maestro
int TxRxPin = 4;
int Boton_Envio = 10;
boolean Memoria_Boton = false;
char Inicio = ' ';
char Fin = ' ';
int Direccion_Servidor = 0;
void setup() {
Serial.begin(9600);
pinMode(TxRxPin, OUTPUT);
pinMode(Boton_Envio, INPUT);
}
void loop() {
if (Memoria_Boton == false) {
Memoria_Boton = true;
Direccion_Servidor = Direccion_Servidor + 1;
if (Direccion_Servidor > 4) {
Direccion_Servidor = 1;
}
digitalWrite(TxRxPin, HIGH);
Serial.print("I");
Serial.print(Direccion_Servidor, BIN);
Serial.print("A");
Serial.print("F");
Serial.flush();
digitalWrite(TxRxPin, LOW);
delay(10);
}
uint8_t Convertir = sizeof(Direccion_Servidor) * 8;
char str [Convertir + 1];
itoa(Direccion_Servidor, str, 2);
int IP = String(str).toInt();
if (Serial.available() != 0 && Memoria_Boton == true) {
Inicio = Serial.read();
if (Inicio == 'I') {
int DireccionModulo = Serial.parseInt();
if (DireccionModulo == IP) {
Fin = Serial.read();
if (Fin == 'F') {
String Funcion = Serial.readString();
Serial.print("\n");
Serial.print("I");
Serial.print(DireccionModulo);
Serial.print(Funcion);
Serial.println("#");
Memoria_Boton = false;
}
}
}
}
if (Direccion_Servidor > 4) {
Direccion_Servidor = 0;
}
}
con este código puedo enviar los datos pero es muy lento me imagino porque lo estoy enviar como string los datos, requiero que la velocidad sea mayor mínimo poder hacer el recorrido de 4 módulos en 1 segundo, les agradecería mucho su ayuda aunque sea para aumentar la velocidad de transmisión