Enviando String de PC a Outro com Arduinos

Eae galera, sou novato na programação de arduino, e fiz um código que envia uma string de um arduino a outro por Tx e Rx, ele está quase certo, está ocorrendo apenas um "atraso" para mostrar as string...

Fiz um código para o arduino que envia e um para o que recebe;

Arduino que Envia:

char var[5]="casa";
char C_1[5];
int i=0;
void setup()  
{
  Serial.begin(9600); 
}

void loop()
{
  C_1[0]=var[0];
  C_1[1]=var[1];
  C_1[2]=var[2];
  C_1[3]=var[3];
  C_1[4]='\0';
  
  for (i = 0; i < 3; i++) {
    Serial.println(C_1);
}
  for(i=0;i<=4;i++){
  if (Serial.available()>0)
   Serial.write(var[i]);
   delay(1000);
}
}

Arduino que recebe:

char C_1[6];
int i=0;
void setup()  
{ 
  Serial.begin(9600); 
}

void loop() 
{
  if ( Serial.available ()>=4) 
  {
    C_1[0]= Serial.read();
    C_1[1]= Serial.read();
    C_1[2]= Serial.read();
    C_1[3]= Serial.read();
    C_1[4]= '\0';

for (i = 0; i < 3; i++) {
    Serial.print(C_1);
}
    C_1[3] = '\0';
     Serial.print(C_1);
    delay(1000);
}
}

Aonde está esse erro no code, que está atrasando o print da mensagem?

Valeeu :slight_smile:

Define atraso?

Como ligaste os dois Arduinos? Que recebes na porta série?
Eu vejo alguns erros, mas se dizes que funciona, devo estar errado.

tipo eu mando a palavra casa de um e do outro chega ca, sa,casacasa,s,c, tipo as strings vem separadas.... Liguei o tx dum no rx do outro e vice versa...

Esse pode ser o teu problema.

Tens o TX e RX ligados ao ATmega, mas também ao chip FTDI que comunica com os PCs. Se queres fazer algo do género tens de emular uma porta série com a newsoftserial e passar esses dados para a Serial.

Podes até experimentar tirar os chips ATMEL das placas e ligar fios do TX/RX entre eles e a comunicacão acontece na mesma.

Não usei o newsofterserial mas mesmo assim consegui enviar a mensagem o problema não parece estar no arduino UNO e sim no codigo... ou estou enganado...

Bom vamos por partes.

for (i = 0; i < 3; i++) {
Serial.println(C_1);

isto deve te imprimir na porta 3 vezes a string "casa" que se tiveres isso bem ligado o segundo arduino ira receber, so que ele ira provavelmente fazer o autoreset e ira perder alguns caracteres.
Quanto a tua questao que afirmas de atraso bom assim de repente parece me estar aqui o teu atraso:

for(i=0;i<=4;i++){
if (Serial.available()>0)
Serial.write(var*);*

  • delay(1000);[/quote]*
    Escreves cada byte da string e mandas esperar 1 segundo.Se estas a passar 5 bytes isto deve demorar 5 segundos a correr.É isto que te queixas?
    Sinceramente nao vejo o porque de fazeres este delay ai, nem porque é que queres confirmar se tens algo no buffer :fearful:
    if (Serial.available()>0) -> Esta linha ai nao faz nada pratico pois ela apenas retorna true ou false, mas em ambas as situaçoes nada fara pois esse if nao esta a executar nenhuma instruçao, so estas a avaliar ! Para executar algo terias de ter algo à frente da avaliaçao, tipo if (Serial.available()>0)correAlgo(); ou dentro de umas { }.
    Se apenas queres fazer um eco entre os arduino podes fazer isso melhor ...

HugoPT:
if (Serial.available()>0) -> Esta linha ai nao faz nada pratico pois ela apenas retorna true ou false, mas em ambas as situaçoes nada fara pois esse if nao esta a executar nenhuma instruçao, so estas a avaliar ! Para executar algo terias de ter algo à frente da avaliaçao, tipo if (Serial.available()>0)correAlgo(); ou dentro de umas { }.
Se apenas queres fazer um eco entre os arduino podes fazer isso melhor ...

O if sem chavetas executa a próxima instrução condicionalmente quer esteja à frente ou em baixo.
Experimenta:

void setup(){
  
  Serial.begin(19200);
  
  unsigned char trip = 1;

if (trip) 
  Serial.println("No Work");
  
Serial.println("change");
trip = 0;
}

void loop() {
}

Sim tens razão, desculpem a minha má visão.