Помогите извлечь переменные из строки string
- Войдите на сайт для отправки комментариев
Ср, 30/05/2018 - 15:12
Из Processing'га по ethernet приходит стринг для управления сервами. В мониторе порта дуины вижу 2-а числа произвольной длины с пробелом. Скетч ардуины слеплен из разных примеров.
Процессинг отправляет строку так:
c.write((X+90) + " " + (Y+90) +"\n");
Скетч ардуины
#include <Servo.h>
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 70);
EthernetServer server(80);
int data;
Servo myservo1;
Servo myservo2;
byte pos1 = 90;
byte pos2 = 90;
String inputString = "";
boolean stringComplete = false;
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
myservo1.attach(9);
myservo2.attach(8);
inputString.reserve(200);
inputString = "";
}
void loop()
{ EthernetClient client = server.available();
if (client) {
char c = client.read(); //читает клиента
Serial.write(c); //пишет в сериал
if (stringComplete) { //если стринг полный.. В сериал соединении с компом работало, так не хочет
pos1 = inputString[0];
pos2 = inputString[1];
myservo1.write(pos1);
myservo2.write(pos2);
delay(15);
inputString = "";
stringComplete = false;
}}
void serialEvent()
{
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true; } }}
В мониторе порта 2-а целых числа через пробел бегают от джойстика. Чую где-то рядом.. Про стринги кучу примеров перелопатил весь инет.. Мозга не хватает.. Хелп!
Скетч ардуины слеплен из разных примеров.
Опишите, пожалуйста, что он делает (по-Вашему), что Вы бы хотели, чтобы он делал, и что в его работе Вас не устраивает.
И, да, вставьте его правильно, а то так его читать скорее всего не будут.
В приходящей строке есть числа-градусы положения сервоприводов (переменные byte pos1 и pos2), первый байт для одной сервы, пробел, байт для другой сервы, но сервы молчат :( В мониторе порта дуины строка видна, меняется, к примеру 180 120 , а до серв не доходит. Т.е. мне надо извлечь из строки, к примеру первое число 180 и повернуть серву1, извлечь 120 и повернуть вторую серву2. Как быть?
Извиняюсь за некорректный вид, а корректный как?
В 34 строке записывается в сериал то, что приходит от клиента.
А с 36 идет чтение данных из сериала.. Но видимо данные читаются неправильно как то, раз сервы бездвижны..(
При соединение по сериалу кусок кода с 36 строки работает на ура четко, а здесь надо по ethernet ловить, отправлять в сериал и уже оттуда читать..
может 33 строка не char c , а как то по другому со стрингом?
Что значит "видимо"? КТо-то мешает поставить после строки 38 вывод в сериал переменных pos1 и pos2 и посмотреть чему они равны. Будете точно знать, а не "видимо". заодно посмотрите на них, может поймёте в чём ошибка. Печатайте, смотрите.
Числа бегут, в качестве управляющих значений углов серв подходят, но серва не двигается. Может питания не хватает? Запитана от USB, ардуино уно + шилд W5100 + одна серва 995... Без шилда USB тянул и две таких сервы..
Куда они бегут? Правильные числа? Вы смотрите, на числа и анализируйте, а не "бегут". Если мельтешат - шлите пореже и смотрите внимательно. там же чушь собачья у Вас бежит, а вовсе не то, что Вы отправляли.
С питанием норм, серва живая, где-то в коде.. Processing отправляет:
получаю 2-а числа через пробел, но изначально рабочий код для отправки по сериалу был:
если же напишу для ethernet'а так:
то в мониторе дуины получаю меняющиеся символы. Может здесь собака порылась?
Maxfr. сколько можно тупить?
Вам сказали - вставьте после строки 38 вывод в сериал переменных pos1 и pos2 и посмотрите - получаете ли вы то. что отправляли. Почему вы этого не делаете, а продолжаете писать в форум какую-то хрень? Если считаете, что сами знаете, что делать - сами и разбирайтесь. не отнимайте у людей время.
Ощущение такое, что Вы меня не слышите. Вы вообще читаете что Вам пишут? Или Вы пришли сюда выговориться?
Сори.. Читаю, после 38 строки вставляю serial.println(pos1) в мониторе вижу тоже что и отправлял по ethernet : последовательность числовых значений
Сори.. Читаю, после 38 строки вставляю serial.println(pos1) в мониторе вижу тоже что и отправлял по ethernet : последовательность числовых значений
то есть все прекрасно и проблема решена?
Не решена, по задумке pos1, после pos1 = input.String[0];, должно быть числом для сервы1 , но не работатает даже если отправляю по Ethernet значения для одной сервы.
Или Вы выложили в посте #4 левый скетч, не имеющий отношения к действительности, или же Вы просто что-то фантазируете. Тот скетч не может не то, что что-то показывать, а даже компилироваться. Причём не может как раз из-за этих строк, т.к. объект input в программе не существут. Если пытаться компилировать это Ваш "скетч", получается вот такой результат
Попробуйте сами.
Расцениваю это как издевательство. Поэтому, извините, пока Вы не выложите нормальный скетч, вместе с протоколом "что отправлялось и что печаталось", помогайте себе сами.
Расцениваю как издевательство.
похоже на то.
ТС, почему данные о вашем скетче из вас надо клещами вытягивать? - несколько умных и знающих людей собрались вокруг вас, чтобы помочь, а вы, вместо того чтоб четко отвечать на вопросы и выполнять предложенные рекомендации - мычите что-то нечленораздельное и не пытаетесь хоть как-то приблизится к решению?
Давайте так - либо вы четко и точно делаете то, что вам сказали - либо досвиданья.
Скетч процессинг:
Скетч ардуино:
В мониторе порта 90 90 числа 0-180 нужно одно чтоб серва реагировала.
Maxfr,
Вы меня, кончено извините, но я вижу здесь два варианта. Или Вы не умеющий читать идиот, или Вы умышленно издеваетсь над нами.
Вам чёрным по белому писали:
- печатать обе переменные pos1 и pos2. А Вы что печатаете?
- приложить протоколы "что отправлялось и что печаталось". И где они?
В общем так, если Вы идиот, то помочь Вам невозможно, если специально издеваетесь - то помогать не нужно.
Не хотите- не надо. До свиданья.