Arduino находит не понятную ошибку
- Войдите на сайт для отправки комментариев
Ср, 04/05/2016 - 19:42
Уважаемые гуру, объясните пожалуйста дремучему, почему программа, речь идёт о скетче, непринимает 9 ?
Нужно написать:
{ 12, 0986, 6, 0, "0.75mm", " 760rpm" }, но выдаётся сообщение
error: invalid digit "9" in octal constant
Если из 0986 удалить 9 то ошибки нет. И что мне нужно сделать, чтобы ввести эти цифры ? Пробовал и в версии 1.0.2 и в последней 1.6.8
0986 приняло за восьмеричное, потому как первый 0, а в восьмеричном 9 быть не может. Пишите в HEX, сразу будет трудно потом привыкните ;)
В восьмеричной системе счисления (octal) нет цифры 9, только от 0 до 7.
А где это задаётся, восьмеричная система ? Я ничего такого не задавал. В других местах девятка проходит без замечаний. Вот например
{ 36, 2956, 18, 0,
А где это задаётся, восьмеричная система ? Я ничего такого не задавал. В других местах девятка проходит без замечаний. Вот например
{ 36, 2956, 18, 0,
потому как первый 0
Я везде расчёты делаю в десятичной системе и так получается, что нужно в дробной части четыре знака после запятой учитывать. Если я отброшу первый 0 то, это будет недопустимая погрешность. Как можно обойти или исправить это ?
Подождите, Вы хотите задать 12, 0986 т.е. двенадцать целых и дохрена десятитысячных?! Я правильно Вас непонял? так тогда не , а . должна быть. Больше текста проги в студию!
Так и пробела быть не должно, и если это установка некоего массиву, то и смешивать числа со строками .. не поверю что компилятор позволит. :)
Ну вот, такую таблицу нужно вставить
{
{ 25, 2954, 12, 8571, "0.35mm", " 999rpm" },
{ 22, 6847, 11, 2500, "0.40mm", " 999rpm" },
{ 18, 1478, 9, 0, "0.50mm", " 999rpm" },
{ 15, 1226, 7, 5000, "0.60mm", " 950rpm" },
{ 12, 9628, 6, 4286, "0.70mm", " 810rpm" },
{ 12, 0986, 6, 0, "0.75mm", " 760rpm" },
{ 11, 3424, 5, 6250, "0.80mm", " 710rpm" },
{ 10, 0829, 4, 5000, "0.90mm", " 560rpm" },
{ 9, 0739, 3, 6000, "1.00mm", " 460rpm" },
{ 7, 2591, 3, 0, "1.25mm", " 380rpm" },
{ 6, 0492, 2, 5714, "1.50mm", " 320rpm" },
{ 5, 1850, 2, 2500, "1.75mm", " 280rpm" },
{ 4, 5370, 1, 8000, "2.00mm", " 220rpm" },
{ 3, 6296, 1, 5000, "2.50mm", " 190rpm" },
{ 3, 0247, 1, 1250, "3.00mm", " 140rpm" },
};
К-куда "вставить"? :)
Очевидно в программу!!! )))) а её - в ардуину!!!
Ну что, можно как- то ввести это в скетч ? Всё остальное уже работает, за исключением вот этих, нескольких строчек, будь они не ладны, эти девятки...
Еще немного текст. Что перед этой таблицей и какого оно типа?
Вы бухгалтер или просто устали?
Вам УЖЕ Логик написал: десятичные дробные числа по ПРАВИЛАМ языка "С" пишутся с разделительной ТОЧКОЙ, а не ЗАПЯТОЙ и без, вашу ..ать, пробелов в числе.
не {10, 0829}, а {10.0829}. Так понятно???? Десятичная ТОЧКА, ТОЧКА, Т_О_Ч_К_А! Етить Вас в корень!
Нет. В таком виде - нельзя. И то что у вас "остальное все работает" - очень сомнительно. Скетч - в студию! Колитесь уже, вместе посмеемся.
http://arduino.ru/Reference/IntegerConstants
Там .. вещественные дроби, согласно "четыре знака после запятой"..
Этот скетч работает у меня на станке, прошу не подвергать сомнению. И весь скетч, тоже не покажу. Не моё ибо. А разрешения, на распространение, у меня нет.
Значит не "этот"... с такой попыткой "впихнуть невпихуемое" .. никакого скетча не может быть .. или не у вас. Может попросить впихнуть того, кто писал скетч? Не?
Не...
Вот, для других параметров, этот же фрагмент, вопросов нет
{
{ 19, 2857, 12, 8571, "0.35mm", " 999rpm" },
{ 16, 8750, 11, 2500, "0.40mm", " 999rpm" },
{ 13, 5000, 9, 0, "0.50mm", " 999rpm" },
{ 11, 2500, 7, 5000, "0.60mm", " 950rpm" },
{ 9, 6429, 6, 4286, "0.70mm", " 810rpm" },
{ 9, 0, 6, 0, "0.75mm", " 760rpm" },
{ 8, 4375, 5, 6250, "0.80mm", " 710rpm" },
{ 6, 7500, 4, 5000, "1.00mm", " 560rpm" },
{ 5, 4000, 3, 6000, "1.25mm", " 460rpm" },
{ 4, 5000, 3, 0, "1.50mm", " 380rpm" },
{ 3, 8571, 2, 5714, "1.75mm", " 320rpm" },
{ 3, 3750, 2, 2500, "2.00mm", " 280rpm" },
{ 2, 7000, 1, 8000, "2.50mm", " 220rpm" },
{ 2, 2500, 1, 5000, "3.00mm", " 190rpm" },
{ 1, 6875, 1, 1250, "4.00mm", " 140rpm" },
};
Ну .. стало быть вы задаете массив структур, и такое возможно. В таком разе из первого варианта уберите ВСЕ лидирующие нули. То есть не нулевое число не стоит начинать с нуля также как тут есть чиселки из одной цифирьки.
Ну как можно обойтись без нуля, если 4460 : 368,6382 = 12,0986 ?
...ля! это ..здец! Если это дроби - то через точку, если это элемент структуры целого типа - то начальный 0 означает 8-ричную систему счисления.
Если скетч так написан, что в структуре хранится отдельно целая и дробная части, то все равно придется писать без первого "0".
Либо придется переписывать скетч.
Если Вы не выё...тесь, а правда хотите помощи, то сохраняя Ваш мега секретный скетч, покажите описание ТИПА того массива, который Вы пытаетесь задать этой таблицей.
Если Вы вообще нихера не понимаете в программировании, то ищите слова typedef или struct в окресности такой таблицы в оригинальном, работающем скетче. Вот от этого места до конца таблицы нам кусочек и покажите.
Ну наверное так 986. Там же у вас явно дроби в десятитысячных. Иначе что означает 6 во втором примере? Мой ХШ утверждает 0.0006, нет? :)
Архат, я тоже так думаю, но лучше убедиться.
Я не выё...юсь, а спрашиваю, как обойти эту ошибку, ибо сам в программировании НУЛЬ. Я в железяках хорошо разбираюсь, а к вам обратился, в надежде что спецы помогут...
Так вы попробуйте убрать лидирующие нули .. и всё получится. :)
Ребята, если я уберу лидирующий нуль, резец будет резать то, что мне нужно ? Всё таки 12,0986 и 12,986 далеко не одно и то же.
на этот вопрос ответит практика. или демонстрация куска скетча.
То есть сам факт, что после реплики "а скетч не покажу" Вас сразу не послали на йюх, уже удивляет, и должен стимулировать Вас к посту и молитве. ИМХО.
Ну тут да .. у меня седня настроение хорошее и ХШ вроде фурычит .. или скетч смотреть или молиться, что резец не полетит.. или таки обратится на месте к автору.
Что- то не похоже на нужное... Летит прямо, вместо неспешного движения. Ладно, сегодня уже поздно, завтра днём отпишусь.
wdrakula, если ко мне придёт человек, с просьбой нерезать ему винт, а я пошлю его к конструктору, чтобы чертёж от него принёс, я на кого буду похож ? Вот и Вы точно такой же.
Ну, не удержался, включил станок. Как и ожидал, шаг больше, чем должен быть. Есть мысли ?
Я - ничего не прошу. Мне, как не трудно догадаться, абсолютно похеру и станок и скетч.
Меня зацепило безапелляционное невежество. Вам ответили про "9" - константа, начинающаяся с "0" - восьмеричное целое. Из этого очевидный вывод, что Вы неправильно понимаете то, как инициализируется нужный массив. Так как то, что Вы написали - гребаная чушь и работать не может!
Но - нет основания Вам не верить, что нечто, что Вы планируете изменить, в настоящее время - работает. Но, повторюсь, очевидно то, что Вы ни хера не понимаете в том, что и как надо поменять и что оно все означает.
Программисты, коим я, например я, и другие тоже, являемся - могут разобраться, что планировал автор скетча, но только увидев кусок текста.
Но тут Вы начинаете выё..ться, что текст - секретный. Что вызывает желание - исключительно поглумиться, но уже христианские мысли о помощи полностью исчезают.
---
Имеем: что-то и как-то работает, приведенные пример изменений - работать не может ПО-ОПРЕДЕЛЕНИЮ, без диспутов. Истину найти нельзя. И тут еще Вы с претензиями? Смешно!
Есть мысли ?
Нет, если округлить, на детали получаются весьма заметные огрехи. Если я делаю гайку и винт, проблем не будет но, если я сделаю винт, а гайку возьмут в другом месте, могут возникнуть проблемы с совместимостью.
to wdrakula, ума не хватает, чтобы понять, если система счислений восьмеричная то, не только ноль в начале но, и 8, и 9, вне закона. Однако они там благополучно присутствуют. И вообще, если Вам всё по фигу, не тратьте своё драгоценное время на эту чушь, займитесь чем- нибудь полезным. Я не программист но, утверждаю, этот скетч работал. Просто на станке поменяли трапецию на ШВП, с другим шагом и шаговый движок, на серво. Всё это и заставило заняться пересчётом таблицы. Я могу только одно сказать про Вас, Вы всё знаете но, ничего не умеете. Все Ваши реплики об этом красноречиво свидетельствуют.
ещё раз по пунктам. 12, 0986 - это одно число с десятетысячными или 2 целых?
Хотя...
И вообще, если Вам всё по фигу, не тратьте своё драгоценное время на эту чушь, займитесь чем- нибудь полезным.... Я могу только одно сказать про Вас, Вы всё знаете но, ничего не умеете. Все Ваши реплики об этом красноречиво свидетельствуют.
после этого пожалуй пошел нах...
Понимаете в чем дело .. вот вы привели пример с винтом и гайкой .. только некоректный. Верный пример будет такой:
К вам приходит человек и просит вас изготовить винт. Вы его спрашиваете "какой"? А он говорит ну вот под "ту" гайку .. вы его просите показать гайку, а он говорит - она секретная и показать вам он её не может. Но, вот есть другая, похожая но не такая .. она от старого винта, а он сломался и гайку заменили и теперь нужен винт. Сделаете?
Нет ребята, человек приходит и говорит, нужен винт, трапеция, 12 мм и шаг 3 мм. Я у него не спрашиваю куда и что за гайка. Почему вы, спрашиваете про скетч ? Вас просят объяснить, почему ошибка ? Если вы специалисты, вы сами создайте ситуацию, где будет проявляться эта ошибка. Я не понимаю в ваших делах ничего, поэтому и не могу с вами дискутировать на равных. На вас уповаю.
Так в том то и дело, что Вы не говорите ни шаг ни трапецию, а твердите "я в этом нифига не понимаю!" .. как раз трапеция там или треугольник .. написано в скетче .. который у вас секретен. Вот и попробуйте изготовить винт БЕЗ этого описания .. да под "ту" гайку, которую вам тоже НЕ показывают, а показывают "похожую".
Да ещё и смотрите на неё а у неё резьба с одного конца левая, а с другого правая. И первое, что вам придет в голову: "так не бывает" .. что вам и пишут. :)
Катастрофа! Вы настолько непонятно излагаете суть проблемы... Если Вы желаете уйти от вещественных чисел (с долбью) и хранить дробнуй часть отдельно от целой как целое число, складывать их надо не конкатенаций как строку символов, а как ЦелаяЧасть+(ДробнаяЧасть/1000). Однако, в этом случае хранить отдельно нет смысла, ибо всё равно вещественная математика потребуется. Но что-то мне подсказывает, что Вашему станку числа передаются в строковом виде... Тогда и храните их как строки, заключив в кавычки - хоть сто лидирующих нулей.
Ну приведите пожалуйста пример такой строки. Я же вам показал таблицу, по которой работал станок. Он и сейчас работает но, т. к. у винта шаг изменился и вместо шаговых установлен серво, все подачи и резьбы не соответствуют. Подачи я пересчитал, они уже работают, а с резьбами вольности не допустимы. И в моих расчётах несколько шагов не принимаются из-за того что там 9 в восьмеричной системе. Где это назначается, восмеричная система ? Можете указать пример такой записи ?
Вам же отписали стотысячраз : лидирующий ноль воспринимается компилятором как декларирование восьмеричного счисления.
726 это десятичное число составляющее семьсотдвадцатьшесть в десятичном счислении
0726 это восьмеричное число составляющее четырестасемьдесят в десятичном счислении
причем в восьмеричной нотации, то есть начинающейся с нуля не может быть восьмерок и девяток.
Где то в глубинах прграммы массив показанный Вами парсится в числа и там сшиваются целые и дробные части, обозначенные в массиве через запятую ( и пробел). По большому счету создавшаяся ситуация - баг - ошибка программиста при проектировании способа ввода данных в программу.
прочитайте внимательно информацию по ссылке из 15 поста. Там есть особое проедостережение по поводу применения лидирующего нуля :
Внимание! Включение "0" перед константой по ошибке может привести к очень сложно-диагностируемой ошибке, из-за того, что компилятор будет считать константу в восьмеричной системе.
кстати . В показанном массиве есть еще много мест с лидирующим нулеми недопустимыми цифрами. Компиллятор должен ругаться и на них.
Нет, если округлить, на детали получаются весьма заметные огрехи.
человек приходит и говорит, нужен винт, трапеция, 12 мм и шаг 3 мм
не удержался: 12,0_ _ _
четыре знака после запятой и говорите что округлить нельзя. я пойму Вас если Ваш станок выдает точность до десятитысячных миллиметра. Знаю есть такие станки, но чтоб направляющие не уводило у них термостабилизация температуры стоит и стоят они килокилокилобаксы. У вас такой?
Про допуски Вы что-нибудь слышали? 12мм класс точности, пусть даже С2 и то не 12 ! У Вас станок болтается больше.
не хотите ноль убирать пишите в восьмиричной :-)
Ну дык, прошу же, покажите, как? Напишите пожалуйста, число 12,0986 в восьмеричном виде. И если не трудно, заодно тогда, 10,0829; 9,0739; 6,0492 Буду весьма признателен. И ещё, допускается смешивать в одной таблице, десятичные и восьмеричные числа ? Хотя, я сомневаюсь что, что это в восьмеричной системе. Как тогда там могут быть 8 и 9 ? Может, что- то другое ?
http://numsys.ru/ - онлайн калькулятор. Только, если хотите втыкнуть 8-ичное число, лидирующий ноль будет обязательным.
Как пример 986 -> 1732 (в 8-й), записывать в вашу таблику надо только так: 01732
Выдало14.06236731376612665347652633172037102265671430770501 Как его округлить до 4 знаков, после запятой ? И ещё, если все другие числав моей таблице, интерпретируются как десятичные то, как же тогда будет работать с восмеричной ? Целая часть, от моего числа 12, явно будет выдавать не то, что мне нужно... Блин, мозги уже кипят... Вместо шага 0,75 мм будет скорее всего что- то в районе 0,65 мм.
Тип счисления вещь сугубо для Вашего удобства. Внутри скомпилированного кода все в представляется в двоичном виде.
Какое странное место, Ватсон ! Программисты пасут коров...
Но как, Холмс ?!! Как Вы пришли к такому заключению ??
Их ответы, абсолютно точные и абсолютно бесполезные.
Ребята, я пересчитывал все коэффициенты, даже не подозревал о восьмеричной системе и вдруг, бац ! Пределагаю пари, на 15 копеек, что исправив на восьмеричное, станок накапает маслом, на все наши умозаключения и нарежет резьбу с шагом, который я расчитаю в десятичной системе. Просто, в данном диапазоне, если я округлю, чтобы избавиться от этого нуля, я не получу точный шаг 0,75 мм. Вот и всё.
Где- то в другом месте ошибка но, где ?
Где- то в другом месте ошибка но, где ?
Ошибка была сделана много раньше. Человек далекий от программирования взялся писать "секретную" программу для ЧПУ. Он для себя "изобрел" свой собственный (и, как показала практика, кривоватый) способ задания исходных данных и их последующего использования в программе. Его частные случаи - у него "прокатили", а Ваши у Вас - увы. Чтобы скеч остался секретным, а программисты продолжали пасти коров, предлагаю Вам взять ходовой винт по-ухватистей, подойти к автору исходного ПО на расстояние, составляющее 2/3 от длины взятого винта, и задать вполне конкретный вопрос: "Ты... ты...
Ты, штука, это чё?!" В сложившейся ситуации принципиально других способ решить проблему я не вижу.
Прочитал всё на одном дыхании - прямо роман :) Автору топика: не тупи и покажи определение структуры. Если ничего в этом не понимаешь - позови того, кто понимает хоть чуть-чуть и покажет определение структуры. К тому же тебя вполне адекватно об этом просили.
Скетч твой кривой и весь из себя "секретный" - никому нахер не нужен, такого говна в каждом подъезде по тёмным уголкам насрано. Если хочешь помощи - проси уважительно. Хотя в текущей ситуации, думаю - тебе придётся ещё и на колени встать :)
З.Ы. ТС, по ходу - очередной мнящий всех вокруг себя убогими, а свою миссию - великой и никому, кроме него, не понятной. Что, в переводе на русский, означает - Неуловимый Джо.