а....ну понятно....
попробуйте так:
int receivedBytes = 0;
do
{
receivedBytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
stream.Write(buffer, 0, receivedBytes);
} while (receivedBytes > 0);
у меня нету вашего отвечающего...поэтому даже не пытался запускать ваш код.....предложил то, что бы проверил у себя
Можно по принципу емкостного мультитач-экрана сделать. Под полем располагаются пластинки конденсаторов. Соединенные матрицей. Постоянно сканируется изменения емкости каждой ячейки. Если над ячейкой робот - емкость ячейки будет отличаться. Можно посредством емкостной связи роботу его координаты передать.
Но мой первый способ дешевле и проще. На одном роботе достаточно одного неподвижного ультразвукового приемника и вычислителя. Во втором способе нужна вращающаяся система и лучше два сонаправленных приемника - так пики острее будут (при правильной обработке) и соответственно точно позиционирования выше.
Чтобы определить координаты, нужно знать три направления: на север и на два маяка или на три маяка. Только два направления не хватает: насколько помню из школы - мы так не точку получим, а окружность.....линию в общем.
Теперь надо понять как мерить направление. Проще всего тут сканирование. На голове робота ставим вращающийся ультразвуковой приемник и непрерывно измеряем уровень сигнала. Кроме того, мы должны знать момент времени t0, когда сонар проходит некоторое выделенное направление (например смотрит вперед робота) это чтобы нулевой угол знать. Если построить график сигнала - будут три явных пика в определенные моменты времени относительно t0. Зная скорость вращения сонара, мы узнаем углы. Зная углы - получим координаты.
Когда определяешь координаты по пройденному расстоянию, то ошибка накапливается. Нужно время от времени заново калиброваться, позиционируясь другими способами.
В трех углах ставим ультразвуковые излучатели, каждый со своей частотой. Каждую секунду излучатели делают "пик". Робот слушает излучатели из измеряет время приема каждого "пика". Зная разницу между первым и вторым "пиком" и вторым и третьим "пиком", зная координаты излучателей, зная скорость распространения звука, можно найти координаты робота. Скорость звука меняется в зависимости от температуры и давления. Перед началом работы установить робота в известное место и нажать кнопку "калибровать".
Просто два ультразвуковых маяка по углам. Робот меряет направления на маяки, зная их координаты, вычисляет свое местоположение.
На поле на каждом квадратном сантиметре нарисовать QR-код с его координатами. =)
Вариант с АЦП посложнее. Есть микросхемы АЦП, которые выдают измеренные данные в SPI. У малины есть контакты, которые можно сконфигурировать для работы с SPI. Плюс нужно будет некоторый нормирующий усилитель между источником аудиосигнала и АЦП поставить, чтобы согласовать уровень сигнала с входным диапазоном АЦП (это если нужно более полно использовать диапазон АЦП).
Далее, если вы все вот это реализуете, то у вас получится поток чисел. Что вы с ним потом делать будете - тот еще вопрос.
По хорошему, конечно, микрофонный вход для этого не предназначен. На плеере у вас стерео, на usb-звуковухе. И уровни сигналов не совсем те. На микрофонный вход подается напряжение поменьше. Если есть возможность в звуковой карте отключить предусилитель микрофона, то хорошо. Ну или на маленькой громкости плеера попробовать.
Можно сделать и с#: отдельным окном, отдельным контролом рядом с webkitbrowser`ом или прямо внутри webkitbrowser`а. А почему не используете системную экранную клавиатуру?
эммм....так не бывает. При закрытии другого процесса, объекта больше не будет.
Если вам нужна некоторая общая функциональность для разных процессов, то может стоит ее выделить в отдельный процесс, например в службу?
попробуйте так:
int receivedBytes = 0;
do
{
receivedBytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
stream.Write(buffer, 0, receivedBytes);
} while (receivedBytes > 0);
у меня нету вашего отвечающего...поэтому даже не пытался запускать ваш код.....предложил то, что бы проверил у себя