Отправлять данные в клиент EthernetShield
- Войдите на сайт для отправки комментариев
Пнд, 21/05/2012 - 19:04
В общем просто принимать и отправлять данные я научился, теперь нобходимо реализовать постоянную отправку данных из одной функции (задачи) и получение и обработка в другой задаче.
Делаю так
int rasTemp()
{
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<<8)+data[0];
Temp = Temp>>4;
Serial.print("T=");
Serial.print(Temp);
Serial.print("C");
Serial.print("\n");
delay(3000);
return Temp;
}
void TcpClient()
{
EthernetClient client = server.available();
char str[128];
char myint[128];
client.readBytes(myint,4);
int i = *(int *) myint;
Serial.print(i);
client.readBytes(str,i);
for(int i2 = i; i2 < 128; i2++)
{
str[i2] = NULL;
}
Serial.print(str);
client.write(str);//отправили клиенту то что получили
}
}
void SendTemp(int Temper){
EthernetClient client = server.available();
if (client) {
char rezult[10];
int Temper1 = int(Temper/10);
int Temper2 = Temper - int(Temper/10)*10;
rezult[0] = Temper1 + 48;
rezult[1] = Temper2 + 48;
for(int i = 2; i < 10; i++)
{
rezult[i] = NULL;
}
client.write(rezult);
delay(2000);
}
}
void loop() {
//Работа с tcp клиентом
TcpClient();
//Температура
int Temp = rasTemp();
//отправка температуры
SendTemp(Temp);
}
Все функции выполняются в цикле все нормально, но проблема в том что в функции SendTemp() не выполняется условие if (client) пока не произойдет чтение client.readBytes() и следовательно не проходит отправка клиенту, т.е. не получается организовать асинхронную передачу на клиент информации. А необходимо чтобы функция SendTemp() все время в цикле слала клиенту данные, а функция TcpClient() ждала сообщение и отправляла его же если получила!