ввод и опознание текста на ардуино

Тема в разделе "Arduino & Shields", создана пользователем angabanga, 24 дек 2015.

  1. angabanga

    angabanga Нерд

    Ребят в эксперименте 19 в задании после написано переделать программу , что б она понимала буквенный ввод. кто-нибудь понимает как делать это? у меня уже бошка опухла
    вот код исходной

    #define LED_PIN 9
    // для работы с текстом существуют объекты-строки (англ. string)
    String message;

    void setup()
    {
    pinMode(LED_PIN, OUTPUT);
    Serial.begin(9600);
    }

    void loop()
    {
    // передаваемые с компьютера данные поставляются байт за
    // байтом, в виде отдельных символов (англ. character). Нам
    // нужно последовательно их обрабатывать пока (англ. while)
    // в порту доступны (англ. available) новые данные
    while (Serial.available()) {
    // считываем (англ. read) пришедший символ в переменную
    char incomingChar = Serial.read();
    // не стоит путать целые числа и символы. Они соотносятся
    // друг с другом по таблице, называемой кодировкой. Например
    // '0' — это 48, '9' — 57, 'A' — 65, 'B' — 66 и т.п. Символы
    // в программе записываются в одинарных кавычках
    if (incomingChar >= '0' && incomingChar <= '9') {
    // если пришёл символ-цифра, добавляем его к сообщению
    message += incomingChar;
    } else if (incomingChar == '\n') {
    // если пришёл символ новой строки, т.е. enter, переводим
    // накопленное сообщение в целое число (англ. to integer).
    // Так последовательность символов '1', '2', '3' станет
    // числом 123. Результат выводим на светодиод
    analogWrite(LED_PIN, message.toInt());
    // обнуляем накопленное сообщение, чтобы начать всё заново
    message = "";
    }
    }
    // посылайте сообщения-числа с компьютера через Serial Monitor
    }




    автор пишет , что Вам может пригодиться один из методов String: toLowerCase(yourString) илиtoUpperCase(yourString), которые возвращают переданную строку yourString, приведенную к нижнему или верхнему регистру соответственно. только он не сказал куда его вставить. а я вставил его и месадже и инкомингяччардж- толку никакого. отказывается работать.
     
  2. angabanga

    angabanga Нерд

    нарооод. ау
     
  3. Sindbad

    Sindbad Гик

    имеется в виду, что, например, с компьютера передается "GREEN" и зажигается зеленый светодиод, а если передается "YELLOW", то загорается желтый светодиод. Принципиально сложного ничего нет - получили строчку, дальше if ...... else if.

    Допустим, написали вы такую программу. И хотите её усовершенствовать, чтобы он понимала не только слова набранные заглавными буквами, но и маленькими и даже так "GrEeN" тоже чтобы понимала. Все варианты написания в сложное условие не запихнешь, их слишком много, вот тут-то и пригодятся функции toLowerCase(yourString) или toUpperCase(yourString)
     
  4. angabanga

    angabanga Нерд

    #define LED_PIN 9
    // для работы с текстом существуют объекты-строки (англ. string)
    String message;

    void setup()
    {
    pinMode(LED_PIN, OUTPUT);
    Serial.begin(9600);
    }

    void loop()
    {
    while (Serial.available()) {

    char incomingChar = Serial.read();

    message += incomingChar;


    if (message == "on" ){


    digitalWrite(LED_PIN,HIGH);
    }else if(message =="off"){
    digitalWrite(LED_PIN,LOW);
    }
    message = "";

    }

    а почему тогда вот это не работает???
     
  5. angabanga

    angabanga Нерд

    я ввел он и написал цикл если он то включай- ничего не происходит.
     
  6. Sindbad

    Sindbad Гик

    скетч помещаете в соответствующий тег

    прикладываете скриншот обмена с портом

    и описываете как ведет себя схема.

    Пока непонятно, что значит "не работает".
     
  7. angabanga

    angabanga Нерд

    я не знаю что такое тег, но вот скриншот программы. а суть следующая к 9 пину подключен светодиод с резистором. и при вводе в сериал монитор слова "on" светодиод должен загораться, а при вводе "off" отключаться. вот и все ничего не работает из этого естественно
     
  8. angabanga

    angabanga Нерд

    вот скрин
     

    Вложения:

  9. angabanga

    angabanga Нерд

    там есть команда сериал принт сразу после ввода- я ее для себя вставил что бы хотя бы видить как он текст воспринимает. корректно или нет.
     
  10. Sindbad

    Sindbad Гик

    Отладочный принт это очень хорошо. Но нужен скриншот монитора порта вместе с тем, что вы набираете и что получаете от Ардуины.

    Программы в форуме вставлять с помощью кнопки:
     

    Вложения:

  11. angabanga

    angabanga Нерд

    вы про это? вот тут я пару раз ввел "on" / никакого отклика на схеме. диод не горит (со схемой проблем нет . напредидущем опыте все работало. те же пины и т д
     

    Вложения:

  12. angabanga

    angabanga Нерд

    да и кстати я пытался пользоваться функциями oLowerCase(yourString) или toUpperCase(yourString)

    но он выдавал ошибки. говорил что там не должно быть пусто в скобках. тогда я писал в скобки мессадж- он писал что интовое значения нельзя туда вводить, но прикол в том, что месадж не инт, а стринг- меня этот дебаггер в конец путает
     
  13. angabanga

    angabanga Нерд

    но первом длеом конечно вопрос, почему прога выше не работает. ведь вроде все логично. выходит программа читает текст немного не так как я думаю? что же тогда мне с этим делать?
     
  14. Sindbad

    Sindbad Гик

    Наблюдение первое: команда принт не вывела ничего, вас это не смутило?

    Наблюдение второе: последняя команда цикла очищает переменную месседж. Т.е. строка "on" или "off" не соберется никогда, поэтому и команды включения/выключения не выполнятся никогда.
     
    angabanga нравится это.
  15. angabanga

    angabanga Нерд

    как это не вывела? все она вывела. я ввел он- мне вывела он она я же сказал.
     
  16. angabanga

    angabanga Нерд

    и мисейдж обнуляется в конце циклов- так что если до этого мисейдж был он он сначала в ключит а обнулившись просто пройдет мимо, тк как он уже не он. но он не вклбючает
     
  17. angabanga

    angabanga Нерд

    так тольок что я переписал прогу подобным образом и все зароботало. вот только обратите внимание на отладчик. я ввел последовательно "он"- зажегся, потом ввел офф- потух, потом снова он- зажегся. а в мониторе набор букв почему-то перекосило жутко. доп символы приклеились
     

    Вложения:

  18. angabanga

    angabanga Нерд

    так все я окончательно сделал как надо . вот как это выглядит:


    большое спасибо что указали на обнуление месаджа. правда я пока не до конца понял почему оно влияло на исход, раз выполнялось после всех циклов
     

    Вложения:

  19. Radius

    Radius Гик

    Вы обнуляли message не дожидаясь перевода строки, то есть после каждого введенного символа. Из-за этого у вас не собиралась правильно ни команда "on" ни команда "оff".
     
    angabanga нравится это.