Сразу совет: сравнивать принятые данные между собой. Если предыдущая строка равна текущей строке, то не обращаем на неё внимание, сравниваем следующую, иначе обнаружена новая метка и в предыдущую строку записываем текущую.
Пытаюсь написать что то по смыслу напимонающее, но ардуинка отказывается воспринимать адекватно, и отметает напрочь. С данными типа int, получается легко (просто тестовыц скетч, никак не относящийся к теме). А со String такя тема не прокатывает. Может ссылкой на литературку поможете? Только не гугл запрос и не ардуино.ру, так уже пробывал
А где именно в коде прописан момент "1секунду игнорировать"? Я свое железо наблюдаю, и честно говоря, увеличил бы интервал секунд до 5-6. Выделенную строчку вижу. Конкретно куда цифру 5 написать?))
Можете добавить строку delay(5000); непосредственно перед while(Serial1.available()) Serial1.read();
пробывал
не канает
он как будто специально ждет 5 секунд и только потом начинает опять херней страдать.
в общем суть такая, в оригинальном скетче (почти ни чем не отоичается, кроме моргание диодом замененным на открывание/закрывание двери) дуинка хреначит действия по очереди. То есть допустим я дверь закрыл, потом идет delay(5000), потом дверь сама открыватся и такой цикл пока ей не надоест. Ровно столько, сколько считыватель раз считал ключ. Если кол-во не четное, все супер конечно. Рано или поздно закроется. Но это же не комильфо.
типо два брелка таскать? Я еще условие добавил. Переменная отвечающая за состояние дверь. Она работает правильно, судя по циклу повторений. Если б не работало, замок бы просто закрывался до посинения
Я не могу, у меня нет экстрасенсорных способностей, а на картах код врядли получится разложить.
а зачем экстрасенсорные способности?
код есть. Типы данных известны. Вопрос как ограничить поток. Пробывал загонять все в массив, а потом брать только первое значение. Но со String не получается. Прочитал теорию, стринг и есть массив. Поэтому не знаю чтобы замутить. Рассмотреть матрицу, где каждая строка полученное значение и брать только первую?
матрицу String так же описывать? Как string[,]=new string? В теории не заметил
// two strings not equal (case sensitivity matters):
stringOne = "This";
stringTwo = "this";
if (stringOne != stringTwo) {
Serial.println(stringOne + " =! " + stringTwo);
}
// you can also use equals() to see if two strings are the same:
if (stringOne.equals(stringTwo)) {
Serial.println(stringOne + " equals " + stringTwo);
}
else {
Serial.println(stringOne + " does not equal " + stringTwo);
}
Есть способ проще, приняли метку и в течении 1 секунд игнорируем какие либо данные, то есть попросту по истечении секунды очищаем буфер.
String s = "";
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial1.available())
{
s += (char)Serial1.read(); // то же самое, что и s=s+input;
if (s.length() == 26)
{
digitalWrite(13, HIGH); // зажигаем светодиод
delay(1000); // ждем секунду
digitalWrite(13, LOW); // выключаем светодиод
Serial.println(s);
s="";
while(Serial1.available()) Serial1.read();
}
}
}
вот после этого уже усилия были лишними. только дошло, что никакого времени не нужно, потому что цикл while. включил комп, проверил, работает. всем спасибо за проделанную работу. будет новая задумка по использованию дуины, обызательно напишу. уж извините) спасибо всем большое!
да с такими познаниями афтор нас еще не раз порадует :)
наверное в вашем сверх современном мегаполисе дети рождаются с познаниями такого рода. В моей же деревне ( учтите, мне так говоритт можно, вам нет) слыхать не слыхивали что такое ардуино или вообще микроконтроллер. Занимаюсь я этой темой неделю. До этого небольшой опыт в программировании на турбопаскале и сишарпе. Самый длинный и сложный код написанный мной в период обучения едва ли может сравниться с этими 30 строчками по функционалу и полезности. Так что да, я вас порадую, и скорее всего не самым умным или хотя бы хитрым вопросом.
Сразу совет: сравнивать принятые данные между собой. Если предыдущая строка равна текущей строке, то не обращаем на неё внимание, сравниваем следующую, иначе обнаружена новая метка и в предыдущую строку записываем текущую.
Есть способ проще, приняли метку и в течении 1 секунд игнорируем какие либо данные, то есть попросту по истечении секунды очищаем буфер.
String s = ""; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(13, OUTPUT); } void loop() { if (Serial1.available()) { s += (char)Serial1.read(); // то же самое, что и s=s+input; if (s.length() == 26) { digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем секунду digitalWrite(13, LOW); // выключаем светодиод Serial.println(s); s=""; while(Serial1.available()) Serial1.read(); } } }Пытаюсь написать что то по смыслу напимонающее, но ардуинка отказывается воспринимать адекватно, и отметает напрочь. С данными типа int, получается легко (просто тестовыц скетч, никак не относящийся к теме). А со String такя тема не прокатывает. Может ссылкой на литературку поможете? Только не гугл запрос и не ардуино.ру, так уже пробывал
А где именно в коде прописан момент "1секунду игнорировать"? Я свое железо наблюдаю, и честно говоря, увеличил бы интервал секунд до 5-6. Выделенную строчку вижу. Конкретно куда цифру 5 написать?))
В приведённом выше скетче, это delay(1000);
Можете добавить строку delay(5000); непосредственно перед while(Serial1.available()) Serial1.read();
Пытаюсь написать что то по смыслу напимонающее, но ардуинка отказывается воспринимать адекватно, и отметает напрочь.
Пытаюсь написать что то по смыслу напимонающее, но ардуинка отказывается воспринимать мой неадекватный код, и отметает напрочь.
К сожалению, что вы там пытаетсь написать видно только вам. А читать нужно все тоже самое - Программирование.
я бы раз в сутки метку опрашивал - так... чиста для усугубления бестолковости задачи
В приведённом выше скетче, это delay(1000);
Можете добавить строку delay(5000); непосредственно перед while(Serial1.available()) Serial1.read();
пробывал
не канает
он как будто специально ждет 5 секунд и только потом начинает опять херней страдать.
в общем суть такая, в оригинальном скетче (почти ни чем не отоичается, кроме моргание диодом замененным на открывание/закрывание двери) дуинка хреначит действия по очереди. То есть допустим я дверь закрыл, потом идет delay(5000), потом дверь сама открыватся и такой цикл пока ей не надоест. Ровно столько, сколько считыватель раз считал ключ. Если кол-во не четное, все супер конечно. Рано или поздно закроется. Но это же не комильфо.
Перефразируя мою бывшую учительницу в школе:"Так, Клапауций, встал и вышел из темы"
пол часа смеха прошло. Опоздал.
Я читал. Пытаюсь подстроить, но мой неадекватный код адекватнее не становится. Помочь можете?
Перефразируя мою бывшую учительницу в школе:"Так, Клапауций, встал и вышел из темы"
пол часа смеха прошло. Опоздал.
щаз!
*нужно две метки - одна для закрытия двери, вторая для открытия.
Ага
типо два брелка таскать? Я еще условие добавил. Переменная отвечающая за состояние дверь. Она работает правильно, судя по циклу повторений. Если б не работало, замок бы просто закрывался до посинения
Я не могу, у меня нет экстрасенсорных способностей, а на картах код врядли получится разложить.
Вот посмотрите пример темы, как нужно правильно задавать вопросы.
Я не могу, у меня нет экстрасенсорных способностей, а на картах код врядли получится разложить.
а зачем экстрасенсорные способности?
код есть. Типы данных известны. Вопрос как ограничить поток. Пробывал загонять все в массив, а потом брать только первое значение. Но со String не получается. Прочитал теорию, стринг и есть массив. Поэтому не знаю чтобы замутить. Рассмотреть матрицу, где каждая строка полученное значение и брать только первую?
матрицу String так же описывать? Как string[,]=new string? В теории не заметил
Тип string (который на самом деле массив char) и тип String - не одно и тоже. У второго есть метод equals(), для сравнения строк.
Примерчик можно? Попробую адаптировать под мои нужды
// two strings not equal (case sensitivity matters): stringOne = "This"; stringTwo = "this"; if (stringOne != stringTwo) { Serial.println(stringOne + " =! " + stringTwo); } // you can also use equals() to see if two strings are the same: if (stringOne.equals(stringTwo)) { Serial.println(stringOne + " equals " + stringTwo); } else { Serial.println(stringOne + " does not equal " + stringTwo); }Взято отсюда: http://arduino.cc/en/Tutorial/StringComparisonOperators
Допустим
а поток как разделить на стринг1 и стринг2?
у меня же поток прет. Ограничение на количество символов уже ввел
так он мне несколько значений подряд подгоняет. По моим словам мало что понятно, могу видео снять=))))
Да понятно всё. Днём, если будет время, набросаю пример.
а поток как разделить на стринг1 и стринг2?
String s = ""; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(13, OUTPUT); } void loop() { if (Serial1.available()) { char ch = Serial1.read(); if(ch != ' ') s += ch; else { if(s == "4E00ABF38593") { Serial.println(s); digitalWrite(13, HIGH); // зажигаем светодиод delay(3000); // ждем секунду digitalWrite(13, LOW); // выключаем светодиод while(Serial1.available()) Serial1.read(); } s=""; } } }Есть способ проще, приняли метку и в течении 1 секунд игнорируем какие либо данные, то есть попросту по истечении секунды очищаем буфер.
String s = ""; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(13, OUTPUT); } void loop() { if (Serial1.available()) { s += (char)Serial1.read(); // то же самое, что и s=s+input; if (s.length() == 26) { digitalWrite(13, HIGH); // зажигаем светодиод delay(1000); // ждем секунду digitalWrite(13, LOW); // выключаем светодиод Serial.println(s); s=""; while(Serial1.available()) Serial1.read(); } } }вот после этого уже усилия были лишними. только дошло, что никакого времени не нужно, потому что цикл while. включил комп, проверил, работает. всем спасибо за проделанную работу. будет новая задумка по использованию дуины, обызательно напишу. уж извините) спасибо всем большое!
у меня же поток прет... По моим словам мало что понятно...
вся суть двухстраничной переписки.
аффтар, пеши исчо!
да с такими познаниями афтор нас еще не раз порадует :)
да с такими познаниями афтор нас еще не раз порадует :)
наверное в вашем сверх современном мегаполисе дети рождаются с познаниями такого рода. В моей же деревне ( учтите, мне так говоритт можно, вам нет) слыхать не слыхивали что такое ардуино или вообще микроконтроллер. Занимаюсь я этой темой неделю. До этого небольшой опыт в программировании на турбопаскале и сишарпе. Самый длинный и сложный код написанный мной в период обучения едва ли может сравниться с этими 30 строчками по функционалу и полезности. Так что да, я вас порадую, и скорее всего не самым умным или хотя бы хитрым вопросом.
В моей же деревне ( учтите, мне так говоритт можно, вам нет) слыхать не слыхивали что такое ардуино или вообще микроконтроллер.
Эт чего вдруг мне мою деревню нельзя называть деревней? Если она даже на карте деревней обозначена! и до ближайшего города 200 км...
Эт чего вдруг мне мою деревню нельзя называть деревней? Если она даже на карте деревней обозначена! и до ближайшего города 200 км...
молчи, деревеньщина - что ты можешь знать о высоте глубины интеллекта крупномегаполисного небожителя?
молчи, деревеньщина - что ты можешь знать о высоте глубины интеллекта крупномегаполисного небожителя?
ай барин простите, крепостные мы, не грамотные.. с деревни своей почитай никуда не выезжаем. до города доехать уже событие..