Помогите разобраться с кодом
- Войдите на сайт для отправки комментариев
Чт, 21/01/2016 - 13:09
char str;
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0)
{
str=Serial.read();
Serial.print(str);
}
if (str=="on")
{
}
}
Подскажите что сдесь не так? Если сравнивать с числовой переменной, то все ок. А мне нужно именно строку. Подскажите пожалуйста.?
Не принято сравнивать символ со строкой. Сравнивай символ с символом: if (str == 'o') или собирай символы в строку String, тогда можно сравнивать строки.
str - это один символ.
А сравнивать пытаемся с "on" - т.е. со строкой из двух символов.
Даже если бы такие сравнения были допустимы, разве могут они быть равны друг другу хоть когда-нибудь?
String s;
void setup()
{
Serial.begin(9600);
}
void loop(){
while (Serial.available()) //если есть что читать
{
char c = Serial.read(); //читаем символ
s += c; //добавляем к строке
if (c == '\n') //если считали символ переноса каретки (строка закончилась)
{
Serial.print("String: "); //выводим строку
Serial.println(s);
if (s=="on"){
Serial.println("Service On");
}
s = "";
}
}
}
Тогда вот так...все равно условие не выполняется.?
Помогите
Конечно, нет.
Ну, вот допустим, Вы ввели в мониторе порта on и нажали Enter.
Что у Вас будет сравниваться? В строке s у Вас сидит "on\n". С чего это оно будет равно "on"?
Я уже не говорю, что структура программы кривая и сильно зависит от того, удастя ли прочитаь всю строку за раз или она разобьётся по разным проходам loop - в этих случаях будет работать по-разному.
И, да, кстати, посмотрите http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii и делайте как там написано.
Конечно, нет.
Ну, вот допустим, Вы ввели в мониторе порта on и нажали Enter.
Что у Вас будет сравниваться? В строке s у Вас сидит "on\n". С чего это оно будет равно "on"?
Я уже не говорю, что структура программы кривая и сильно зависит от того, удастя ли прочитаь всю строку за раз или она разобьётся по разным проходам loop - в этих случаях будет работать по-разному.
И, да, кстати, посмотрите http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii и делайте как там написано.
Уважаемый!!! помогите пожалуйста!!!!!! Я догадывался что принемает "on\n" -\n перевод строки. Дак подскажите пожалуйста как избавиться от него, что бы я мог сравнивать строки прищедшие с порта с нужными мне строками??? За ранее благодарю
Не понимаю, как я могу помочь.
Вы говорите, что понимаете, что в s будет "on\n". Ну, а если понимаете, так почему Вы его сравниваете с "on", а не с "on\n"?
Как Вам тут помочь, если Вы всё понимаете, но не делаете как надо?
А по структуре программы сами смотрите. В конце Loop Вы стираете накопленное значение s. Т.е. если вся Ваша строка "on\n" придёт за раз, то всё нормально. А вот, если придёт только первый символ, а остальные с задержкой - Вы пропустите эту команду.
Не понимаю, как я могу помочь.
Вы говорите, что понимаете, что в s будет "on\n". Ну, а если понимаете, так почему Вы его сравниваете с "on", а не с "on\n"?
Как Вам тут помочь, если Вы всё понимаете, но не делаете как надо?
А по структуре программы сами смотрите. В конце Loop Вы стираете накопленное значение s. Т.е. если вся Ваша строка "on\n" придёт за раз, то всё нормально. А вот, если придёт только первый символ, а остальные с задержкой - Вы пропустите эту команду.
Умный до немогу, но обьяснить не могу.
Нормальные люди!!!!, обьясните как убрать из полученной строки символ перевода к-ки - "/n"
Если Вам нужна помощь, то делайте что Ва говорят.
1. Прменяйте наконец строку, как я писал в прошлом посте.
2. опубликуйте получившуюся программу как положено. Вот я сейчас хочу поговорить о конкретной строке, как я на неё сошлюсь? Если бы Вы опубликовали так, как я Вам написал - были бы номера трок.
3. Запустите программу и опишите, что получилось.
Попробуй так
Вот что мне нужно было
Блин, ну зачем? Ну я же Вам написал - в 14-ой строке нужно просто написать
if
(s==
"on\n"
)
Никакого substring - выигрыш и по времени и по памяти.
Но это не отменяет остального. По-прежнему Вы пропускаете команду, если она придёт в сериал не целиком.
Блин, ну зачем? Ну я же Вам написал - в 14-ой строке нужно просто написать
if
(s==
"on\n"
)
Никакого substring - выигрыш и по времени и по памяти.
Но это не отменяет остального. По-прежнему Вы пропускаете команду, если она придёт в сериал не целиком.
Спосибо, возьму на заметку. Пока мне хватит моего варианта
Вот что мне нужно было
if
(c !=
'\n'
) {
s += c;}//добавляем к строке