Вывод на экран
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!
Прошу, о уважаемые эксперты, не злиться на меня из-за создания столь пустячной темы, но я определённо что-то упускаю, а что именно не понимаю.
Суть вот в чём:
По шине UART подключен дисплей Nextion. Редактором интерфейсов были сзданы 2 ползунка (слайдера), которые сообщают текущий угол поворота валов двух сервоприводов (прим.: взаимодействие дисплея и кода налажено, обработчик работает правильно).
В ходе выполнения части кода void setup() с дисплея снимаются положения ползунков (от 0 до 180, изначально выставлено в 0) и выводятся на экран командой Serial.println(softSerial.read()); и всё работает хорошо.
Но потом начинается петлевая функция loop(), в которой ардуино ожидает сигнал с дисплея, а затем раскладывает его в соотвтетствии с именем изменённого обекта:
void loop(){ if(softSerial.available()>0){ String str; while(softSerial.available()){str+=char(softSerial.read()); delay(10);} for(int i=0; i<str.length(); i++){ //Serial.println(i); delay(1000); if(memcmp(&str[i],"h0" ,2) == 0){i=i+5; Serial.println(str[i-3], DEC);} else if(memcmp(&str[i],"h1" ,2) == 0){i=i+5; Serial.println(str[i-3], DEC);} } } }
Это всё работает правильно только до тех пор, пока ползунок не достигает значения 127, после чего, видимо, вследствие наступившего переполнения, на выводе появляется число -129 и начинает возрастать (к нулю).
Я перепробовал все свои соображения по этому поводу и, чувствую, упустил что-то мелкое, но важное из виду. Буду очень признателен за помощь!
P.S. Код и бьиблиотека взяты с сайта https://wiki.iarduino.ru/page/Nextion/
P.P.S. А ещё я не очень понимаю, как в образце они так ловко передали в качестве значения рабочего цикла выхода pinVD1 (цифру нада) элемент из массива текстового формата, что, теоритически, ардуино не должна была понять.
А, что кода не будет? Вы предлагает нам его сами выискивать хрен знает где и сами догудаваться какой именно код Вы оттуда взяли и как поменяли?
Что в вашем понимании и в данном контексте значит "работает не правильно"?
Давайте по порядку:
1. необходимый код я представил (в отсутствующей части нет необходимости).
2. даже если вы хотите видеть весь код, то вам НЕ нужно думать, откуда бы его взять, поскольку я прикрепил ссылку на страницу, в конце которой находится всего ОДИН код, часть которого я представил (это максимально прозрачно.
3. дабы поберечь ваши нервы, прикладываю "столь необходимую" часть кода:
Это означает, что поставленная задача не решается, либо решается частично. Существует, как описано мной ранее, задача по выводу на экран значения положения ползунка на дисплее nextion (от 0 до 180 с шагом 1); программа считывает значения (побайтно) и "пытается" перевести их в число, но не выходит - начиная с положения ползунка, равного 128 ардуино выводит на экран -129, -128, -127 и так далее, при том, что должно выводить 128, 129, 130 и так далее.
Именно это я назвал бы "неправильной работой" - задача решается на (127/180*100)%
Давайте по порядку:
Давайте.
1. необходимый код я представил (в отсутствующей части нет необходимости).
Если бы у Вас была квалификация, достаточная для того, чтобы определить в какой части кода проблема, то этого поста бы не было вовсе. Вам так не кажется?
В куске кода используется куча переменных и нет их описаний - Бог его знает, какого они типа. Вы умеете разбираться в таких кодах? Я - нет.
2. даже если вы хотите видеть весь код, то вам НЕ нужно думать, откуда бы его взять, поскольку я прикрепил ссылку на страницу
И я должен лазать по ссылкам? Вы ничего не перепутали? Это Ваша проблема или моя?
3. дабы поберечь ваши нервы
Спасибо
прикладываю "столь необходимую" часть кода:
Уже не надо.
После того, как Вы меня отчитали как мальчишку, ждите другого желающего Вам помогать, у меня есть другие занятия.
Удачи!
Я вас не отчитывал, я лишь указал на то, что вы придираетесь по чём зря, что контрпродуктивно.
По ссылкам лазить, вы, конечно же, не обязаны, но это, объективно, было бы быстрее, чем писать мне, что я должен перейти по той же ссылке, проматать вниз страницы, скопировать оттуда текст, перейти обратно сюда и вставить текст в спец. форму, чтобы только тогдаааа вы согласились изучить проблему; это сильно притормозило процесс.
По поводу моей квалификации - процесс локализации ошибок в коде называется отладкой и для этого нужно иметь уровень "новичок", который я уже давно прошёл, однако, вероятно, замыленный глаз не позволяет (на данный момент) увидеть ошибку, поскольку более глубокую отладку можно сделать только, разве что, изучив ассемблер, для чего нужно обладать не совсем среднего уровня интеллектом. Если вам интересно, локализовывалась проблема так: после каждой команды контроллер выводил на экран те, или иные цифры, которые удовлетворяли (или нет) ожиданиям; строка, предшествующая той, что передала неверный результат и есть ядро проблемы. По поводу несоздания поста - даже уберпрофессионалы иногда тупят, увы.
Вы говорите "куча переменных, нет их описаний и Бог знает, какого они типа"; отвечу так: а что конкретно вы там не увидели? Переменная str объявлена как string, данные, полученные с экрана объявлены как char, единица перебора массивов i не нуждается в объяснениях с тех пор, как стали нумеровать точки на оси X (иксы итые), str.length() можно просто перевести с английского, да и, в общем-то, на этом переменные и заканчиваются.
Не сочтите за грубость, но вы объективно придираетесь, причём это не в первый раз и не только в моём отношении :)
Чуть не забыл, огромное спасибо за помощь!
Женя! Вот плохо ты помогаешь новичкам! Стыдно должно быть! ;) ;) ;) Тебе доверили, можно сказать, труд всей жизни, а ты какой-то "код" требуешь! Нехорошо.
"...сейчас к людЯм надо мягше, а вопросы смотреть ширше" (с).
--------------------------
2ТС: 128, а следующее значение -129, ничего тебе не говорит? Почитай букварь про двоичное представление, дополнительный код и отличие типов signed и unsigned... возможно найдешь свой путь к счастью.
Ну, блин, я же даже написал, что понимаю, что проблема в переполнении переменной, и знаю я что 2 в степени 8 это на самом деле +/-2 в степени 7. Исправить-то это как, если я не объявлял отдельной переменной для этого? считывать 2 байта или преобразовывать как-то хитро? В общем, по этому пути счатья я не нашёл, наверное, плохо искал.
Судя по вашим междусобойским шуткам, для вас это пустяковое дело; терпеть не могу, когда профессионалы начинают смеяться над непрофессионалами в ответ на просьбу о помощи.
Наверное, это моя ошибка, но я не говорил, что я не новичок в си. Я не новичок в матлабе и паскале (но больше в матлабе), оттуда отладке и обучился (обучили). Про проектирование программ я и не спрашиваю даже - у меня по курсу есть предмет "оптимизация систем оснащения и далее, далее" и это такая тьма, что я даже не хочу думать про проектирование наиэффективнейших (по тем, или иным критериям) алгоритмов и управляющих последовательностей, а уж тем более, спрашивать у вас, основываясь на постулатах безвозмездной помощи (не порядочно это, как минимум).
А, вот, от какой конкретно ситуации ушёл ЕвгенийП, я не совсем понял - по моему, он просто обошёл ВСЕ мои вопросы по сути дела.
То есть, вы считаете, что человеку не нужно самообразовываться, а нужно, в случае, если у него что-то не получается, завязывать с этим делом, и, постулируя, что "это не моё" идти занимать чем-то другим?
Апплодисменты в студию, что ли.
Ну серьёзно, вы ввели меня в состояние негодования - вы советуете мне взять и прекратить самообразовываться; вернее, не так - вы говорите, что меня нужно пинками отгонять от программирования куда-нибудь к пираньям Амазонии.
А в чём помощь-то тогда? Проблема-то останется нерешённой. Вы, простите, перевираете смысл помощи.
Не совсем - я такого не говорил. Ардуина отвечает за приём данных с дисплея и (в будущем, действительно, за поворот серв) передачу их на экран компьютера. Обратной связи нет! Собственный МК дисплея отображает новое положение ползунка своими силами и лишь даёт целеуказания; он не нуждается (пока что) в данных, подтверждающих поворот, иными словами - если серва не повернётся, дисплей об этом не скажет.
Поэтому! где находятся ползунки вообще не имеет занчения - они посылают 4 байта данных по юарт и всё. (А вообще, вопрос я не понял - ползунки находятся в интерфейсе дисплея, созданном в Nextion editor)
Ещё раз, прошу разъясните , что бы все было однозначно.. Вот дошёл ползунок до 128..-129..-128 Случилось "переполнение"... Кроме как отрицательных значений в Serial Monitor ваша неправильность, как то еще проявляется?
Я к тому что, вы считываете переменную которая находиться в памяти модуля..потом значение этой переменной вам пересылаться по последовательно у порту, потом вы его выводите в SerialMonitor. То есть то что в Мониторе вы видите отрицательное число, не факт что оригинальная переменная с отрицательным значением.
Нет, больше ни в чём не проявляется.
В принципе, я изначально понимал, что дело именно в выводе на экран, а оригинальная переменная генерируется правильно, но вы навели меня на мою возможную неправоту поэтому поводу; впрочем, как говорит инструкция, по юарту могут быть отправлены любые значяения ползунка, и, при условии правильности прошивки встроенного в экран МК (почти 100%), это так и есть. Всё же, я склоняюсь к неправильности приёма отправляемой информации. Но с интерфейсом UART я познакомился, буквально, на днях, отсюда и тупые вопросы))
Сами переменные, которые определены в модуле, содержащие значения ползунков скольки байтные?
По ЮАРТУ-то, с ваших слов, передаётся 4 байта, но сколько из них служебные а сколько из них относяться к переменной, где расположены, и 4-ре ли?
В общем случае,вам надо собрать те последовательные байты в переменную типа которому они соответвуют(зависит от количества байт).
Делается это не сложно:битвыми операциями сдвига.
Уже поздно, и мыслю я туманненько, но вот вам кусок статьи, по которой я учусь: "В нашем случае, дисплею отправляется команда в виде строки: "print h0.val" после чего следуют три байта 0xFF = char(255). На что дисплей вернёт значение аргумента val элемента h0 уместив ответ в четырёх байтах. При редактировании атрибутов элементов мы указали что слайдер будет возвращать значения в диапазоне от 0 до 255 (minval=0, maxval=255), значит каким бы ни было положение его ползунка, значение аргумента val уместится в первом байте ответа (если бы мы присвоили аргументу maxval значение от 256 до 65535, то..."
То есть, как я понял, мы можем отправить экрану любой запрос и он ответит в точности так же (как товарный поезд - сколько вагонов послали, столько и можно заполнить :) )
Но, видимо, в статье ошибка - ведь число 255 не уместится в байт, при условии, что байт, включающий отрицательные числа, ограничивается 127 значениями. Но как тогда экран пишет? В 2 байта?
А вы не могли бы описать процедуру битового сдвига? Я даже не слышал о таком.
В статье(насколько я могу судить из отрезка) все правильно. Если у вас диапазон 0-255 то одного байта достаточно для безнаковой переменной. Минус вылазит при печати.Просто сохраните байт со значением во временную беззнаковую переменную и потом распечатайте
С телефона нельзя вставлять код:
unsigned byte tmp= str[i-3];
Serial. println(tmp);
Вобщем сделать casting,возможно даже явно.
Сдвиговые операции с одним байтом не понадобятся. Но для примера, скажем у вас есть массив двух байт, который содержит двухбайтовую переменную
tmp[0] - содержит Most significant byte
tmp[1] - содержит Last significant byte 2-ух байтовой переменной.
после приёма по ЮАРТУ, с некоторыми оговорками, так и будет. И надo эти два чиста поместить в одну 2-ух байтовую переменную чтобы с ней работать. Например uint16_t num.
Делается так:
num = tmp[0];
num = num<<8;// 8 битовых сдвигов влево, что соответвуют одному байту
num = num | tmp[1] ;// bitwise OR.
И все.
Я вас не отчитывал, я лишь указал на то, что вы придираетесь по чём зря, что контрпродуктивно.
По ссылкам лазить, вы, конечно же, не обязаны, но это, объективно, было бы быстрее, чем писать мне, что я должен перейти по той же ссылке, проматать вниз страницы, скопировать оттуда текст, перейти обратно сюда и вставить текст в спец. форму, чтобы только тогдаааа вы согласились изучить проблему; это сильно притормозило процесс.
По поводу моей квалификации - процесс локализации ошибок в коде называется отладкой и для этого нужно иметь уровень "новичок", который я уже давно прошёл, однако, вероятно, замыленный глаз не позволяет (на данный момент) увидеть ошибку, поскольку более глубокую отладку можно сделать только, разве что, изучив ассемблер, для чего нужно обладать не совсем среднего уровня интеллектом. Если вам интересно, локализовывалась проблема так: после каждой команды контроллер выводил на экран те, или иные цифры, которые удовлетворяли (или нет) ожиданиям; строка, предшествующая той, что передала неверный результат и есть ядро проблемы. По поводу несоздания поста - даже уберпрофессионалы иногда тупят, увы.
Вы говорите "куча переменных, нет их описаний и Бог знает, какого они типа"; отвечу так: а что конкретно вы там не увидели? Переменная str объявлена как string, данные, полученные с экрана объявлены как char, единица перебора массивов i не нуждается в объяснениях с тех пор, как стали нумеровать точки на оси X (иксы итые), str.length() можно просто перевести с английского, да и, в общем-то, на этом переменные и заканчиваются.
Не сочтите за грубость, но вы объективно придираетесь, причём это не в первый раз и не только в моём отношении :)
Чуть не забыл, огромное спасибо за помощь!
Отчитывание Евгения и тыканье его носом в типа его недостатки, не менее контрпродуктивно. За время написания своего поста было бы более продуктивно залезть в раздел погромирования, прямо на этом форуме и узнать, что 255 является невпихуемой величиной для чаров. Но графомания, она такая графомания.((((
терпеть не могу, когда профессионалы начинают смеяться над непрофессионалами
А что ещё делать, когда ты лезешь учить профессионалов их профессии и при этом с серьёзным видом выдаёшь абсолютные, патентованные, рафинированные глупости типа
Женя! Вот плохо ты помогаешь новичкам! Стыдно должно быть! ;) ;) ;)
И не говорите, стыдно "по самое не могу".
Чуется мне, что Ромуальдушка наш - это переобутый LEOWRS, судя по графомании.
А что ещё делать, когда ты лезешь учить профессионалов их профессии и при этом с серьёзным видом выдаёшь абсолютные, патентованные, рафинированные глупости типа
Вы, конечно, не обижайтесь, но вы видите, что пишете? И понимаете что именно прочитали?
Вы называете определение отладки "абсолютной, патентованной, рафинированной глупостью", что понять мне не суждено - "Отла́дка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки" (взято с http://www.любой_сайт_или_учебник.ru/com)
Про уровень новичка, я, может, и погорячился, но без этого умения ничего нормального написать не получится, поэтому этому учат (или учатся), действительно, почти в самом начале пути, что, опять же, не стыкуется с "абсолютной, патентованной, рафинированной глупостью".
bwn, я с вами полностью согласен, однако я не мог подумать, что нужно смотреть именно в этом направлении. Если бы я до этого, что называется, допёр сам, то не стал бы вас всех беспокоить.
Вы, конечно, не обижайтесь,
И не подумаю. Ты вообще кто, чтобы я на тебя обижался? Ты несёшь такой бред, что тут не обижаться впору, а ...
Отладка, это самое сложное, что есть в практическом программировании. Сложнее там нет ничего. А ты что-то несёшь про уровень новичка.
Прекрати
учить профессионалов их профессиивыставлять себя идиотом ... хотя ... хочешь - выставляй, мне пофиг.Чуется мне, что Ромуальдушка наш - это переобутый LEOWRS, судя по графомании.
А мне, вот, кажется, что я не единственный, кто просил о помощи, и кому всесто этой самой помощи пишут гневную тираду, жалуясь на потраченное на меня время, в то время как могли бы потратить равное количество времени на помощь.
А по поводу гарфомании - я не из тех людей, которые молчат при появлении явных возмущающих факторов типа: "а какого ж хрена вы не выложили код? мы должны сами догадаться? почему я должен лазить по сайтам" и т.д. Никто никому ничего не должен, но можно по-человечески сказать: "чтобы я смог вам помочь, приложите полный код". Вы разницу понимаете? Времени уходит меньше, процесс идёт быстрее, а, самое главное, не разводится демогогия и меня не начинают сравнивать с другими гражданинами.
А ты, случайна, 20 языков не знаешь на уровне выше университетского?
Точно LEOWRS, талантище - умудриться написать в ответ 20 никому не нужных предложений вместо того, чтобы просто сказать - нет, я не он. Так и запишем - он :)
Вы, конечно, не обижайтесь,
Ты вообще кто, чтобы я на тебя обижался? Ты несёшь такой бред, что тут не обижаться впору, а ...
Отладка, это самое сложное, что есть в практическом программировании. Сложнее там нет ничего. А ты что-то несёшь про уровень новичка.
Ны "ты" мы не переходили, если не ошибаюсь; сохраняйте "профессионализм" до конца - вплоть до уровня общения.
И я не пойму - вы издеваетесь? Откройте учебник/интернет/что_хотите и прочтите определение "отладка кода". Я рассуждаю строго в границах определений; вы не слышите что я говорю.
Ей Богу, зайдите в браузер/откройте книгу и скопируйте оттуда определение. Пока что, вы просто меня оскорбляете явным образом.
Неть. Это называется стеб над персонажем, чье ЧСВ не имеет видимых границ.
Точно LEOWRS, талантище - умудриться написать в ответ 20 никому не нужных предложений вместо того, чтобы просто сказать - нет, я не он. Так и запишем - он :)
Да еклм, зачем тогда вы тратите своё и моё время? Никому не нужные - так не читайте и не отвечайте.
Оправдываться мне надоело - считайте меня кем хотите.
Ворота, тащемта, прав: отладка - это самая сложная часть разработки, требующая, порой, до 80% времени от общего времени разработки. Если бы это было не так - не было бы тут и данной темы, потому как ТС - не может в отладку, хотя и новичок. Triggered, о чём и упомянул Ворота. Так что он - дважды прав.
Точно LEOWRS, талантище - умудриться написать в ответ 20 никому не нужных предложений вместо того, чтобы просто сказать - нет, я не он. Так и запишем - он :)
Да еклм, зачем тогда вы тратите своё и моё время? Никому не нужные - так не читайте и не отвечайте.
Оправдываться мне надоело - считайте меня кем хотите.
Так ты слона не продашь ;)
З.Ы. Не забудь и мне упомянуть, что мы на "ты" не переходили. Но, щитаю, после такого секса, что пошёл в теме - мы все вообще обязаны на тебе жениться. Так что на "ты" - уже норм. Пойду сигарету выкурю.
Неть. Это называется стеб над персонажем, чье ЧСВ не имеет видимых границ.
Вы с этого стёба самоутверждаетесь или что? У менгя нет завышенного чувства собственной важности - я попросил о помощи и был бы благодарен любым полезным ответам, но не балагану. Я не говорил, что я тут самый умный.
А, вот, вам тоже время девать некуда? Вы не помогаете.
В каком именно определении написано, что отладка - это уровень новичка?
Еще, раз, прекрати выставлять себя идиотом, иначе все подумают, что ты таковой и есть.
А что же ты говорил? В посте #3 ты объяснял профессионалу с сорокалетним стажем, что ему нужно для поиска ошибки, а что - не нужно. Ты ... это .... вообще-то здоров?
У менгя нет завышенного чувства собственной важности
Сказал чел с ником "Ромуальд VII", попутно побыв кэпом и непонятно зачем расшифровав всем известную аббревиатуру. Ага, так и запишем - ЧСВ нет (нет).
Ребятаааааа, у вас всё хорошо? Может быть, в матлабе всё как-то иначе, чем в языках, которые вы знаете, но там отладка выглядит так:
мы согдаём десятистрочную программу, после чего её сохраняем и ставим на панели номеров строк красный кружочек, означающий остановку выполенния в данном месте. На панели справа смотрим текущие значения всех переменных и такаем "шаг вперёд" до тех пор, пока не увидим отклонений от требуемых значений, после чего останавливаем выполнение программы и исправляем ошибку. ВСЁ!
Вы увидели что-то сложное? Если да - прошу вас, напишите мне об этом; возможно я чего-то недопонял.
О, нас учат, как отлаживать программы, супер :) У тебя всё в порядке с головой? Ты поди в автосервис к дизелисту - и учи его, как перебирать движок, мотивируя это тем, что, когда бы велосипед перебирал - там всё просто. У тебя всё нормально с головой?
З.Ы. Что касается по теме: в документации к Nextion прописан формат пакетов, для каждого типа данных, передаваемого с него. Достаточно просто понять, что пакеты - это поток байт определённого формата, принимать пакет, и разбирать его как положено - и всё будет ок.
З.Ы. Ромуальдушка - минусы тут ничего не значат, хоть обтыкайся ;)
Профессионалы такие профессионалы, конечно. Если у ЕвгенияП стаж 40 лет, стало быть, ему лет 60, а по опыту знакоммства с преподавателями, которым за 60, помощи от них не дождёшься - сначала идёт лекция по терминологии, потом идёт лекция про то, что я ни хрена не знаю и что меня даже в пту обучать нельзя, а лучше сразу застрелиться, и только потоооом, так уж и быыыыыть, мооожет быыыть, ответят мне на вопрос, похожий на заданный мной.
Как жаль, что хорошие инженеры идут в юристы, а хорошие судьи и критики становятся программистами (в чём убедиться вы мне так и не дали).
ВСЕМ СПАСИБО ЗА ПОМОЩЬ!
Нет, ребята, он не прикидывается идиотом, он таковой и есть
Это твои школярские фантазии. А теперь тоже самое, только с начни так: "У нас есть полумиллионострочная программа ..."
И недопоймёшь никогда. Допонималка явно не выросла.
До свиданья.
А ведь самое смешное, что если бы вместо поста №3 ты просто выложил бы код, твоя проблема давно была бы решена. Но тебе приятнее было выставить себя дураком и устроить срач :))))
сначала идёт лекция по терминологии, потом идёт лекция про то, что я ни хрена не знаю и что меня даже в пту обучать нельзя, а лучше сразу застрелиться, и только потоооом, так уж и быыыыыть, мооожет быыыть, ответят мне на вопрос, похожий на заданный мной.
Может быть потому, что вас, дебилов, только так и надо учить? Вы же свои ленивые жопы оторвать от танчиков не способны - вам вынь да положь готовое решение.
А вот не нужно впихивать в контекст какую-то абстракную полумиллионострочную программу. Не возьмусь утверждать, но вряд ли вы писали ОС или серьёзную игру.
Программистом-профессионалом вы явно не являетесь - они не переходят на оскорбления по столь незначительному поводу и умеют сохранять спокойствие; более того - обучены правилам общения. Я же не берусь вас судить - просто перечисляю факты.
Рома, заметь - срач начал ты, своим позёрством. И продолжаешь накалять. Эдак не за горами тот момент, когда тебя прямым текстом пошлют. И, скорее всего, это буду я, тут так заведено.
Сейчас послать, или ты успокоишься?
Простите, но какое право вы имеете меня оскорблять и грести под одну гребёнку с неучами, которые даже не хотят ни в чём разбираться? Я учусь в институте и на военной кафедре, причём ни там, ни там меня не учат ни программированию, ни смежным дисциплинам - у нас, в основном расчёты механических узлов.
Если вы считате, что лентяй и дэбил, то какого хрена я вообще занимаюсь всем этим, а не играю в танчики? Почему я не лежу на диване и не смотрю телевизор? Не гуляю с друзьями? И на это у вас есть ответ, не так ли?
А вот не нужно впихивать в контекст какую-то абстракную полумиллионострочную программу. Не возьмусь утверждать, но вряд ли вы писали ОС или серьёзную игру.
Тебе конкретную привести, где строк - ну точно больше полутора сотен тысяч? Ты же, судя по всему, и тогда не успокоишься.
Изучил другие темы ТС. Расходимся, мужики, случай клинический. Без Пухлявого с Клапой нам тут никак.
Если вы считате, что лентяй и дэбил, то какого хрена я вообще занимаюсь всем этим, а не играю в танчики? Почему я не лежу на диване и не смотрю телевизор? Не гуляю с друзьями? И на это у вас есть ответ, не так ли?
У меня есть на всё ответ, и начался он в сообщении номер 3. Это ты тут пришёл всех учить, как надо общаться, и что надо делать, чтобы помочь великому ромуальду.
Если сейчас же не извинишься перед Евгением - будешь послан.