Отправлять данные в клиент EthernetShield

Нет ответов
iukash
Offline
Зарегистрирован: 10.05.2012

В общем просто принимать и отправлять данные я научился, теперь нобходимо реализовать постоянную отправку данных из одной функции (задачи) и получение и обработка в другой задаче.

Делаю так

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() ждала сообщение и отправляла его же если получила!