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?
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...
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...
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 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: