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