Передать в ардуину переменную.

trium1983
Offline
Зарегистрирован: 16.04.2013

Добрый день!

Есть несколько слайдеров из библиотеки ControlP5. Значение которых надо передать на Ардуину, соответственно чтобы Ардуина понимала что откуда. 

Значения слайдеров снимаются во float. Тут подумал немного и решил все это дело преобразовывать в стринг и кидать значения в виде:

temp1 20

temp2 23

temp1 20

temp2 23 и.т.д.

Набрасал код для процессинга:

String upiss = Float.toString(upi);
 upiss1=("temp1 "+upiss);
 println(upiss1);}

Serial.println(upiss1);
 myPort.write(upiss1);

где upi - значения первого слайдера (float), upiss и upiss1 - String соответственно.

Далее попытался поймать все это ардуинкой, набрасав кодик:

  if (Serial.available()){
    inString=Serial.read();

    if(inString.indexOf("temp1")>=0)  {
print(inString.substring(inString.indexOf("", 6)));
inString=(inString.substring(inString.indexOf("", 6)));//гостинная
println(inString);}
float inString = pr;

}
if (tempS1>pr) {digitalWrite(outputPin2, HIGH);}
if (tempS1<pr){digitalWrite(outputPin2, LOW);}

Но...не тут то было....ругается компилятор, говорит мол "'print' was not declared in this scope" 

Где косяк?

tempS1 это значение датчика температуры

Попробывал по другому:

 

  if (Serial.available()){
    inString=Serial.read();

    if(inString.indexOf("temp1")>=0)  {
serial.print(inString.substring(inString.indexOf("", 6)));
inString=(inString.substring(inString.indexOf("", 6)));//гостинная
serial.println(inString);}
float inString = pr;

}
if (tempS1>pr) {digitalWrite(outputPin2, HIGH);}
if (tempS1<pr){digitalWrite(outputPin2, LOW);}

Ругань исчезла, но на ползунок Ардуинка так и не отзывается

 

 

ourlive
Offline
Зарегистрирован: 26.05.2012

Синтаксис беде-беда, работать найн. Тренироваться стоит начать с передачи всего одного символа и чтоб ардуинка на него верно реагировала. Потом повторить с двумя. Через некоторое время выяснить, что они путаются, всё пропало и ничего не работает. Через ещё какое то время удастся узнать, что println('1'); это два символа (а иногда и три).

А то любят тут понастроить космодесантных катеров, а потом удивляются, чего же это кофеварка странно в нём работает.

А вообще отладку рекомендую начать с выяснения, а какой же поток символов в ардуинку приходит?

trium1983
Offline
Зарегистрирован: 16.04.2013

ourlive пишет:

Синтаксис беде-беда, работать найн. Тренироваться стоит начать с передачи всего одного символа и чтоб ардуинка на него верно реагировала. Потом повторить с двумя. Через некоторое время выяснить, что они путаются, всё пропало и ничего не работает. Через ещё какое то время удастся узнать, что println('1'); это два символа (а иногда и три).

А то любят тут понастроить космодесантных катеров, а потом удивляются, чего же это кофеварка странно в нём работает.

А вообще отладку рекомендую начать с выяснения, а какой же поток символов в ардуинку приходит?

 

А вот самому интересно что делает myPort.Write? Посылает строку? Или что? Строку с переносом? Или же все валит в одну кучу.....Нигде инфы не найдешь.

Вот с serial.Print и serial.Println все ясно и понятно истолковано.....Но serial.Print в процессинг не работает с строками, за то ардуина всегда пожалуйста! 

По сути мне надо толкнуть в порт строку типа temp1 XY с переносом, поймать ее ардуиной, выдернуть из нее XY, 

преобразовать XY в float.....

Nosferatu
Offline
Зарегистрирован: 04.11.2012

trium1983 пишет:

ourlive пишет:

Синтаксис беде-беда, работать найн. Тренироваться стоит начать с передачи всего одного символа и чтоб ардуинка на него верно реагировала. Потом повторить с двумя. Через некоторое время выяснить, что они путаются, всё пропало и ничего не работает. Через ещё какое то время удастся узнать, что println('1'); это два символа (а иногда и три).

А то любят тут понастроить космодесантных катеров, а потом удивляются, чего же это кофеварка странно в нём работает.

А вообще отладку рекомендую начать с выяснения, а какой же поток символов в ардуинку приходит?

 

А вот самому интересно что делает myPort.Write? Посылает строку? Или что? Строку с переносом? Или же все валит в одну кучу.....Нигде инфы не найдешь.

Вот с serial.Print и serial.Println все ясно и понятно истолковано.....Но serial.Print в процессинг не работает с строками, за то ардуина всегда пожалуйста! 

По сути мне надо толкнуть в порт строку типа temp1 XY с переносом, поймать ее ардуиной, выдернуть из нее XY, 

преобразовать XY в float.....

Инфа здесь:

Serial     

write()

trium1983
Offline
Зарегистрирован: 16.04.2013

Writes bytes, chars, ints, bytes[], Strings to the serial port - тут все ясно как божий день. Но! Не понятно.

Выводим, допустим, Serial.write ("Hi!") что будет по факту?

Hi! Hi! Hi! Hi! Hi! Hi! Hi! Hi!

или

Hi!

Hi!

Hi!

Hi!

?

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Как организуете на стороне ардуино, так и будет.

ourlive
Offline
Зарегистрирован: 26.05.2012

trium1983 пишет:

Writes bytes, chars, ints, bytes[], Strings to the serial port - тут все ясно как божий день. Но! Не понятно.

Выводим, допустим, Serial.write ("Hi!") что будет по факту?

Hi! Hi! Hi! Hi! Hi! Hi! Hi! Hi!

или

Hi!

Hi!

Hi!

Hi!

?

Будет символ в символ что отправлено, для перевода строки +"/n' или лучше по таблице символов найти char(13) кажется.

Каждый раз одно и тоже, хочешь отладить передачу данных, запхай в ардуину простейший скетч посимвольно читающий всё из буфера порта и отсылающий посимвольно обратно. Отсылай через терминал и наблюдай результат, отсылай через что угодно и смотри на эхо. Если всё сходится, значит всё работает. И никаких вопросов что по факту, все факты на лице так сказать видны.