String

Holaf
Offline
Зарегистрирован: 16.03.2018
Суть такова, я пытаюсь управлять ргб лентой по блютусу через телефон. Но я дошел до проблемы когда мне нужно управлять яркостью ленты(pot). Я решил сделать через операции со строками, но ничего не заработало. Я попытался посмотреть через serial.println что выдает значение, что бы понять где ошибка, но в итоге все крякнуло(в коде). Кто нибудь может подсказать где ошибка или другой возможный вариант решения этой проблемы.
#define blu 3
#define grn 6
#define red 5
String val, pot;
int myLength, r, g, b;
void setup()
{
  analogWrite(grn, 0);
  analogWrite(red, 0);
  analogWrite(blu, 0);
  Serial.begin(9600);
  pinMode(red, OUTPUT);
  pinMode(grn, OUTPUT);
  pinMode(blu, OUTPUT);
}
void loop()
{
 if (Serial.available()){
    val = Serial.readString();
    myLength = val.length();
    val.remove(myLength-3, myLength);
    pot.substring(myLength-3, myLength);
    if (val == "red")
    {
      analogWrite(red, pot.toInt());
    }
    if (val == "green")
    {    
      analogWrite(grn, pot.toInt());
    }
 
    if (val == "blue")
    {
      analogWrite(blu, pot.toInt());
    }
     
      Serial.println(val);
      Serial.println(pot);
    }
  
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Прям так и крякнуло?  Громко?

И этта, почитай про сравнение строк в С. Ну хоть немношка.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
Holaf
Offline
Зарегистрирован: 16.03.2018

Holaf пишет:
 

(Крайне извиняюсь за мою невнимательность и рассеяность)
#define blu 3
#define grn 6
#define red 5
String val, pot;
int myLength, r, g, b;
void setup()
{
  analogWrite(grn, 0);
  analogWrite(red, 0);
  analogWrite(blu, 0);
  Serial.begin(9600);
  pinMode(red, OUTPUT);
  pinMode(grn, OUTPUT);
  pinMode(blu, OUTPUT);
}
void loop()
{
 if (Serial.available()){
    val = Serial.readString();
    myLength = val.length();
    val.remove(myLength-3, myLength);
    pot.substring(myLength-3, myLength);
    if (val == "red")
    {
      analogWrite(red, pot.toInt());
    }
    if (val == "green")
    {    
      analogWrite(grn, pot.toInt());
    }

    if (val == "blue")
    {
      analogWrite(blu, pot.toInt());
    }
     
      Serial.println(val);
      Serial.println(pot);
    }
  
}

 

 

 

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Из Вашего кода без всякого ущерба можно убрать строки с 23 по 36.

vk007
Offline
Зарегистрирован: 16.06.2015

Астрологи объявили неделю вопросов от новичков о сравнении строк???

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, мужики, со сравненением строк на этот раз всё в порядке. Переменная val объявлена как String, а у этого класса есть метод

unsigned char operator == (const char *cstr) const {return equals(cstr);}

Вот он и сравнивает. По идее, должно быть нормально.

ТС,

Я не понимаю фразы "в итоге все крякнуло(в коде)". Вы уж потрубитесь изъясняться внятно.

По Вашему коду, я бы поставил вывод не в конце, а в строках 19-22 после каждой строки. И тогда сразу обнаружил бы странность в строке 22, например. Даже две странности.

1. Выражение "pot.substring(myLength-3, myLength);" не имеет никакого сымсла, т.к. результат ничему не присваивается.

2. В этом выражении Вы используете pot, которая ниде и никогда не получает нкакого значения. Где Вы присваиваете что-либо переменной pot? А если нигде, то какой смысл брать от неё подстроку?