Serial communication Arduino

0

I am trying to solve a certain exercise in class by my teacher. Basically the exercise is: With two arduinos prepared to make serial communication between TX and RX, it must transmit four code sequences through a two-key keyboard.

Pin 0 - RX

Pin 1 - TX

Pin 7 - Key A

Pin 8 - Key B

Pin 13 - Led

Key A  Key B

Result  0 0 Led Off

0 1 Cast 1010101010101010

 Cast 11111100000101010

1 1 Led On

I studied the material on Arduino's own site on serial programming, I developed my own code but encountered problems with it. I'll drop you down for those who want to take a look.

NOTE: I can guarantee that there is nothing wrong with the hardware and this question only concerns the programming itself.

CODE:

// TRANSMISSOR

int numA = 7; 

int numB = 8;


void setup(){

Serial.begin(9600); // Configurado a serial

}

void loop(){


numA = 0; // Bit 0A criado

numB = 0; // Bit 0B criado

Serial.write(numA); // Bit 0A transmitido

Serial.write(numB); // Bit 0B transmitido

delay(2000); // Tempo de 2 segundos



numA = 1; // Bit 1A criado

numB = 1; // Bit 1B criado


Serial.write(numA); // Bit 1A transmitido

Serial.write(numB); // Bit 1B transmitido


delay(2000); // Tempo de 2 segundos

} 


//RECEPTOR


int recByteA;

int recByteB;

int led = 13;


void setup(){

Serial.begin(9600); // Configurado a comunicação serial

pinMode(led,OUTPUT); // Configurado o LED como saída

}


void loop(){

if(Serial.available() > 0){ // Verifica se existe informação na serial em 
Serial.avaliable

recByteA = Serial.read(); // Caso sim o Bit é gravado em recByte que vem de Serial.read

}

if(Serial.available() > 0){ // Verifica se existe informação na serial em Serial.avaliable

recByteB = Serial.read(); // Caso sim o Bit é gravado em recByte que vem de Serial.read

}

if(recByteA == 0 && recByteB == 0){ // Testa se o Bit que esta em recByteA e B é igual a 0

digitalWrite(led,LOW); // Se o Bit for Zero o LED apaga

}

else if(recByteA == 1 && recByteB == 1){ // Testa se o Bit que esta em recByteA e B é igual a 1

digitalWrite(led,HIGH); // Se o Bit for Um o LED liga

}

else if(recByteA == 0 && recByteB == 1){ // Testa se o Bit que esta em recByteA é igual a 0 e recByteB é igual a 1

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

recByteA = 1;

recByteB = 0;

}

else if(recByteA == 1 && recByteB == 0){ // Testa se o Bit que esta em recByteA é igual a 1 e recByteB é igual a 0

recByteA = 1;

recByteB = 1;

recByteA = 1;

recByteB = 1;

recByteA = 1;

recByteB = 1;

recByteA = 0;

recByteB = 0;

recByteA = 0;

recByteB = 0;

recByteA = 0;

recByteB = 1;

recByteA = 0;

recByteB = 1;

recByteA = 0;

recByteB = 1;

recByteA = 0;

}

}
    
asked by anonymous 24.11.2017 / 00:22

1 answer

0

Because of the lack of experience I have with arduino, this part is likely to give an error, because the execution of the loop will probably be faster than the serial transmission. Then it will read the two bytes in a different loop by adding them to the recByteA variable.

// receptor
// Verifica se existe informação na serial em Serial.avaliable
if(Serial.available() > 0)
{
    // Caso sim o Bit é gravado em recByte que vem de Serial.read
    recByteA = Serial.read(); 
}
// Verifica se existe informação na serial em Serial.avaliable
if(Serial.available() > 0)
{
    // Caso sim o Bit é gravado em recByte que vem de Serial.read
    recByteB = Serial.read(); 
}

One option would be to switch if to while by locking the loop in that part until the two bytes are read

while(Serial.avaliable() == 0) delay(1);
recByteA = Serial.read();
while(Serial.avaliable() == 0) delay(1);
recByteB = Serial.read();
    
25.11.2017 / 06:56