Ввод данных в порт (HELP)
- Войдите на сайт для отправки комментариев
Всем здррасте))) Это снова Я со соими вопросами))) Вчера вроде разобрались как ардовину научить выполнять комманды и ведь все здорово, выполняет, и вроде всем спасибо, все свбодны, но не тут то было... Не долго музыка играла, а светодиод мигал))
Ситуация следующая мне необзодимо подаять команду на запись некоторого числа в переменную. Ну собственно комманду он принимает, ждет ввода данных... я их ввожу, а он негодяй вбивает в них "-1" и нечего другого ....
в ожидании использую Serial.available(); . удалось определить что "-1" это возврат отсутствия данных от сериалавалибал... но я введь ее ввожу... в общем как то так...
а еще может кто подскажет как задавать значение переменной совместно в коммандой? Например: led_blink_set_234 - 234 - число которое нужно затолкать....
вот мой код
String data; boolean bl = true; boolean led = false; int ledPin = 2; boolean a = false; int ms = 249; void setup(){ pinMode(ledPin,OUTPUT); digitalWrite(ledPin,LOW); Serial.begin(9600); Serial.setTimeout(5); } void loop(){ if (led == true) {digitalWrite(ledPin,HIGH);} //Serial.print(ms); if (led == false) {digitalWrite(ledPin, LOW);} if (bl == true) {led = !led; delay(50);} } void serialEvent() { //if (Serial.available()>0) //{ data = Serial.readString(); data.trim(); Serial.println("=> " + data); //} if (a == false && data == "halo"){Serial.println("Vasabi)"); a=true;} if (a == true && data == "help") { Serial.println("BukaCorp"); Serial.println("Help text"); Serial.println("Commands:"); Serial.println("led_on - ON all LED"); Serial.println("led_off - OFF all LED"); Serial.println("led_blink - Blink LED"); Serial.println("led_status - Print status LED"); } if (a==true && data == "led_on") {led =true; bl = false;} if (a == true && data == "led_off"){led = false; bl = false;} if (a == true && data == "led_blink"){bl = true;} //if (a == true && data == "led_blink_off"){bl = false;} if (a == 1 && data == "led_blink_set") { Serial.println("Set blink time ms:"); while(!Serial.available()){ ms = Serial.read(); } Serial.println(ms); } if (a == true && data == "led_status" && bl == false) { Serial.print("LED status: "); if (led == true) {Serial.println("ON");} if (led == false) {Serial.println("OFF");} } if (a == true && data == "led_status" && bl == true) { Serial.println("LED status: Blink"); } }
или как в Стринге найти число и затолкать его в ИНТ?
Калапуций давай без ругани... говорил же что я пошел другим путем а и твой код что то под сриал е поет...
Калапуций давай без ругани... говорил же что я пошел другим путем а и твой код что то под сриал е поет...
с чего бы это моему коду под сериал не работать?
сам проверял???
это было во первых...
во вторых где в твоем коде поиск в объекте числа??? или преобразование объекта в число...
я же по Русски написал что пошел другим путем...
сам проверял???
ок. аргументировано обоснуй, почему мой код не может работать с сериалом - что в нём такого, чего нет в сериале?
погоди секунду...
ок.
я не буду измываться - просто замени DigiUSB на Serial, DigiUSB.tx_remaining() на Serial.availableForWrite(), удали DigiUSB.delay(1) и DigiUSB.begin(), добавь Serial.begin(хххх) - всё
ничего не забыл?
delay(1); удалить
//if (DigiUSB.tx_remaining() > (b.length() + 1)) { // проверка места в буфере USB для строки длиной + 1 символ.
раскомментировать DigiUSB.tx_remaining() на Serial.availableForWrite()
давай по порядку
1 - по этому поводу я добился результатов при помощи класса String
я так понимаю что разница нишь в том что у тебя строка собирается а у меня целиком падает... мы скажем пришли к одному и тому же разными путями... н вопрос остался открытым... Как в Стринге отдельть число от текта в переменную?? потому что и ты и я помещаем данные в стринг)
а по поводу кода бэза бес норм код... личто на затупил с Serial.availableForWrite(); спс за подсказку....
Как в Стринге отдельть число от текта в переменную??
тебе не нужно в стринге отделять число - работай с приёмом посимвольно: когда приходит цифра, складывай её в отдельную строку. достаточно завести две строки - пусть одна будет текст, вторая - цифры, строку с цифрами переведёшь в число toInt() по условию получения символа перевода строки или просто буквы
ну тогда рассказывай как разделять число от симвоа)))
ну тогда рассказывай как разделять число от симвоа)))
тю.
if(цифра) {} else {};
что то вроде
if(a=1){тра та та} else {ту ту ту}
iif(a=2) {тра тта та} else {ту ту ту}
и т.д.???
что то вроде
if(a=1){тра та та} else {ту ту ту}
iif(a=2) {тра тта та} else {ту ту ту}
и т.д.???
if(a == 0 || a == 1 ||... a == 9){прибавить символ к концу строки цифр} else {прибавить символ к концу строки всего остального}
на тебе для ознакомления таблицу символов ascii http://book.itep.ru/10/ascii.htm - будешь знать, что у тебя по сериалу летает, кроме цифр и букв
СПС) ну рас уж пошлла такая пьянка может ты подскажес как по среди цикла его заставить подождать ввода цифр???
СПС) ну рас уж пошлла такая пьянка может ты подскажес как по среди цикла его заставить подождать ввода цифр???
не нужно ничего ждать - принимай все символы, проверяй ифами - цифра это или нет, если нет пусть улетает в никуда и считывается следующий символ.
какой, нафиг, цикл? - собрался превратить МК в кирпич, ожидая своих цифр?
я в том плане - ввожу комманду, от мне в ответ.. введите число.. я ему ввожу и цикл продолжается...
я в том плане - ввожу комманду, от мне в ответ.. введите число.. я ему ввожу и цикл продолжается...
значит так - забудь слово цикл while
у тебя всё крутится в цикле loop() - этого тебе достаточно.
ифами проверяешь наличие чего-то в сериале - .available()
если там буквы, складываешь эти буквы в строку букв, строку проверяешь на соответсвие коммандам, если соответсвует, то печатаешь в сериал "введите цифру"
если там цифры, складываешь эти цифры в строку цифр, по условию приёма символа перевода строки или чего-то другого, свидетельсвующего, что ты все цифры набрал - что-то делаешь: превращаешь строку цифр в число, которое записываешь в переменную.
ок... буду пытаться)))
спасибо за помощь, но альтернативный вариант я все же нашел))) сначала ввод данных а потом поиск там чисел)))
спасибо за помощь, но альтернативный вариант я все же нашел))) сначала ввод данных а потом поиск там чисел)))
ты проверял? - пошли в сериал "xxxxxxled_blink_setxxxxxxx"
"xxxxled_blink_setxxxx@ -в такой форме он не будет знать комманды...
в этом скетче отн сначала считывает комманду, а ужже относительно нее изменяет переменную....
допустим "led_blink_set 123" это изменение частоты мерцания
а "led_set 2" это изменит мигающий светодиод
"blink_set 3" изменит форму мерцания...
ну то например собственно... все я считаю отвечает требованиям удаленного консольного управления... сейчас буду EEPROM храннение переменныхделать что бы перезагрузке изменения сохранялись, а сброс делался по комманде)))
"xxxxled_blink_setxxxx@ -в такой форме он не будет знать комманды...
ты проверил, что произойдёт при вводе led_blink_setx?