vk007 - дело ваше, хотите - возитесь. По мне - обьяснять ему сейчас принципы обработки строк в Сериал - это все равно что заставлять трехлетнего заучивать законы термодинамики. Повторить сможет, понять -нет.
ну я вот сейчас пытаюсь сделать то что написано, с цветом вроде более менее понятно, но вот задержка вы указали разные цифры а мне их может можно как то как одну считать. Тоесть мне не понятно, как сделать что бы скетч понял где цифра
Если жеcolor == '0' (или '1', или '2', ..., или '9'), т.е. считали цифру, то значит в порт пришло число (т.е. данные для задержки) и читаем его val = Serial.parseInt();
Вот как раз Serial.parseInt() и вычитывает все байты из буфера (пока не упрется в не число или данные в буфере не закончатся), и преобразует эту кучку байтов в число. Т.е. отправили в порт в виде строки "100", прочитали его val = Serial.parseInt(); и в val оказалось число 100.
В мониторе порта если написать 100 и отправить, то в ардуину прийдет именно строка "100".
После строки chosed_color = rPin; и ей подобных добавьте еще по одной строке Serial.read(); (просто, без никаких присваиваний ее какой либо переменной).
Ну я же писал уже не один раз - это все сделает Serial.parseInt() - она создана для этого, искать в строках, поступивших из порта, число и извлекать его из них. Почитали бы наконец ее описание что-ли.
Вы кроме байтов, еще путаетесь в цифрах и числах. Цифры - это как буквы, а числа - слова. Цифр всего 10 (0, 1, 2, 3, 4, 5, 6, 7, 8 и 9) - их этих цифр строятся числа, как слова из букв.
На будущее, желательно скетч оптимизировать, а также подправить на случай, если будут приходить некорректные команды (иначе может клинить). Также четвертая строка тут лишняя.
upd. Может диоды не так подключили? Катоды на землю, аноды через резисторы ом так на 180 - 330 к пинам (3, 5 и 6).
upd2. Между прочим, в данном скетче, например, комманда типа R200 (без пробелов подряд) тоже будет работать.
что означает оптимизировать, дело в том что все работало как нужно в том смысле что и светодиод работал нормально, и блютуз тоже, а вот с этим скетчем что то глухо, вы вообще на какой плате все проверяете?
b707, у меня вот прямо сейчас этот скетч работает на настоящей ардуине с настоящими светодиодами. Мигают будь здоров. Тут что-то с подключениями, или неправильной скоростью порта, или еще какая-то невнимательность.
b707, у меня вот прямо сейчас этот скетч работает на настоящей ардуине с настоящими светодиодами. Мигают будь здоров. Тут что-то с подключениями, или неправильной скоростью порта, или еще какая-то невнимательность.
Да я не сомневаюсь, не думайте. Просто последовательно проверяю, какие части скетча работают, а какие нет. Методика отладки "Разделяй и влавствуй" :)
а что не так??
вы вчитайтесь - он в порт "строку с расширением byte" отправляет :))))))
да ладно :) если он так думает и пишет, еще не значит что так оно на самом деле :)
Drew20, вы прочитали мое сообщение #49, там все понятно?
vk007 - дело ваше, хотите - возитесь. По мне - обьяснять ему сейчас принципы обработки строк в Сериал - это все равно что заставлять трехлетнего заучивать законы термодинамики. Повторить сможет, понять -нет.
Удачи обоим :)
ну я вот сейчас пытаюсь сделать то что написано, с цветом вроде более менее понятно, но вот задержка вы указали разные цифры а мне их может можно как то как одну считать. Тоесть мне не понятно, как сделать что бы скетч понял где цифра
Значит прочитали не до конца, а я писал:
Если же color == '0' (или '1', или '2', ..., или '9'), т.е. считали цифру, то значит в порт пришло число (т.е. данные для задержки) и читаем его val = Serial.parseInt();
Вот как раз Serial.parseInt() и вычитывает все байты из буфера (пока не упрется в не число или данные в буфере не закончатся), и преобразует эту кучку байтов в число. Т.е. отправили в порт в виде строки "100", прочитали его val = Serial.parseInt(); и в val оказалось число 100.
В мониторе порта если написать 100 и отправить, то в ардуину прийдет именно строка "100".
тоесть это то что необходимо сделать согласно вашему обьяснению
нет походу это не то что нужно, потому-что через монитор порта если отправить 100 или R значит что то не то я написал
Не совсем. Вы сравниваете incoming_byte только с '0', а как же все остальные цифры?
тоесть мне нужно от 0 до например 1000?
Я написал, как нужно.
так а как мне потом получить например 200??
И еще, Вы не удаляете символ из буфера.
После строки chosed_color = rPin; и ей подобных добавьте еще по одной строке Serial.read(); (просто, без никаких присваиваний ее какой либо переменной).
так а как мне потом получить например 200??
Ну я же писал уже не один раз - это все сделает Serial.parseInt() - она создана для этого, искать в строках, поступивших из порта, число и извлекать его из них. Почитали бы наконец ее описание что-ли.
та я вот уже прочитал))) но все равно не работает может я не то посылаю в монитор порта или в скетче ошибка опять
Вы кроме байтов, еще путаетесь в цифрах и числах. Цифры - это как буквы, а числа - слова. Цифр всего 10 (0, 1, 2, 3, 4, 5, 6, 7, 8 и 9) - их этих цифр строятся числа, как слова из букв.
Ну пока оно и не будет работать как надо. Мы еще не доделали все. А, кстати, как оно работает сейчас?
никак, вообще глухо, пишу в монитор R а оно ничего не делает, вот я и подумал что опять где то затупил
В седьмой строке переменную val инициализируйте как int val = -1;
А строки 43-46 заверните в условие:
Т.е. пока не указан цвет и не указана задержка - со светодиодами не работаем.
а какой запрос послать через монитор порта?? пробовал R просто оно ничего не показало, 100 тоже глухо, R100 таже фигня
Сначала R, потом 100. Итоговый скетч покажите.
Монитор порта настроен на ту же скорость, что и в скетче? Светдиоды подключены (через соответствующие резисторы) к нужным пинам и так как надо?
да все да, но не работает
Одну минуту, расчехлю ардуину и проверю, а то у меня к этому времени уже тоже в мыслях каша.
спасибо
Проверяйте схему, скорость порта. У меня работает как надо.
Буквы R, G или B отправляете большие? Не r, g или b случайно?
а вы вводили в одну строку R 100 или последовательно?
Последовательно
это не зависит от разновидности платы?
Не должно. Пины вы же явно указали.
На будущее, желательно скетч оптимизировать, а также подправить на случай, если будут приходить некорректные команды (иначе может клинить). Также четвертая строка тут лишняя.
upd. Может диоды не так подключили? Катоды на землю, аноды через резисторы ом так на 180 - 330 к пинам (3, 5 и 6).
upd2. Между прочим, в данном скетче, например, комманда типа R200 (без пробелов подряд) тоже будет работать.
что означает оптимизировать, дело в том что все работало как нужно в том смысле что и светодиод работал нормально, и блютуз тоже, а вот с этим скетчем что то глухо, вы вообще на какой плате все проверяете?
Плата Nano. Монитор порта стандартный (из Arduino IDE). На компьютере если что.
Я надеюсь вы тоже на компе все это делаете?
у меня uno, а скетч точно правильно написан? может я попробую сделать прогу на андроид и попытаться отправить с телефона?
Drew20
замените пятую строчку на
byte chosed_color = rPin;
и попробуйте ввести 100
опять ничего
значить проблема не в скетче походу(((
опять ничего
значить проблема не в скетче походу(((
тогда уж до кучи седьмую на
int val = 500;
b707, у меня вот прямо сейчас этот скетч работает на настоящей ардуине с настоящими светодиодами. Мигают будь здоров. Тут что-то с подключениями, или неправильной скоростью порта, или еще какая-то невнимательность.
b707, у меня вот прямо сейчас этот скетч работает на настоящей ардуине с настоящими светодиодами. Мигают будь здоров. Тут что-то с подключениями, или неправильной скоростью порта, или еще какая-то невнимательность.
Да я не сомневаюсь, не думайте. Просто последовательно проверяю, какие части скетча работают, а какие нет. Методика отладки "Разделяй и влавствуй" :)
Drew20, а скетч вообще прошивается? Попробуйте в сетапе в конце дописать какой-нибудь Serial.println("Привет, мир!");
Будет оно печататься в мониторе?
Drew20, а скетч вообще прошивается? Попробуйте в сетапе в конце дописать какой-нибудь Serial.println("Привет, мир!");
Будет оно печататься в мониторе?
погодите, пусть седьмую строчку поменяет - это будет примерно то же самое, но информативнее.
да это работает нормально, вывело фразу
поменяйте седьмую и пятую строку, как я вам сказал - и напишите результат.
Ну значит что-то со светодиодами. Мультиметр или осциллограф есть? Можете посмотреть, что на пинах 3, 5 и 6 творится?
да мигает
та не светодиод работает нормально
Каким монитором порта вы пользуетесь? Стандартным ардуиновским на ПК?
да
да мигает
значит, как минимум, красный светик работает.
Тогда остается только монитор порта. Добавьте диагностический вывод на каждый принятый символ - типа "эха" - и посмотрите, что же там передается.