LINUX.ORG.RU

Arduino, совершенно не понимаю, что происходит.

 ,


1

1

Извините, ежели ошибся разделом, перенесите куда следует, если что.

Купил сыну конструктор, там клон Arduino Uno на Atmrga328. Попробовали несколько простеньких скетчей и тут я решил размять пальцы и усложнить задачу... Совершенно не понимаю, что происходит?

Цикл? Или не цикл? Создаю цикл в void loop:

void loop() {
  for(int A = 0;A<255;A++){
    Serial.println(A);
  }
}
При порверке и сборке ругается на то, что А не объявлена. Хорошо, объявляю в начале программы: «int A = 0»

И что вы думаете? Ардуина выдаёт мне 0, постоянно. Я не понял, «А» в цикле и «А» в команде «Serial.println(A)» внутри цикла - это разные переменные, что ли? Бред же. Даже в примерах циклы так пишут, но у меня почему-то это не работает.

Хорошо, идём обходным путём:

int A = 0;
void loop() {
  for(int B = 0;B<255;B++){
    Serial.println(A);
    A = A +1;
  }
  A = 0;
}
Сначала я написал без строки «A = 0», всё заработало, число пошло расти, но мне нужен диапазон до 255, поэтому добавил «A = 0» перед циклом... А снова стало постоянно равным нулю. Как это? Ведь оно ПЕРЕД циклом?!? Аотом от бессилия переставил после цикла, как в приведённом варианте, А всё также перманентно равно нулю. Ватдафак?

И тут я решил проверить как работают вообще вложенные циклы:

int A = 0;
int B = 0;
int C = 0;
void loop() {
  for(int A1 = 0;A1<255;A1++){
    for(int B1 = 0;B1<255;B1++){
      for(int C1 = 0;C1<255;C1++){
        Serial.println(A);
        Serial.println(B);
        Serial.println(C);
        C = C +1;
      }
      B = B + 1;
    }  
    A = A +1;
  }
}
По моему скудоумному понятию, в консоли должно выдавать по три значения друг за другом, при этом сначала С должно дорасти до 255, потом B и только потом А... Я нихрена не понимаю последовательности, все три значения растут ОДНОВРЕМННО.

КАК ЭТО ВОЗМОЖНО? Что вообще происходит? Что за бред? Обясните мне, дураку, я чего-то не понимаю, или с железкой что-то не так?

Поправка:

Так, проверил на своём компе, на котором ковырял всякие железки и 3Дпринтер на ардуине. Переключил на уно в настройках, больше ничего не делал. Цикл действительно работает как надо.

Что тогда может быть не так на втором компе, на котором всё плохо работало? Ардуину на него поставил только вчера, настроил на уну и всё. Обе системы идентичны по дистрибутиву(Манджара) и версиям пакетов. gcc-multilib на обеих. Что ещё не так?

Deleted

Последнее исправление: Chelobaka (всего исправлений: 1)

Ответ на: комментарий от I-Love-Microsoft

Э... как-то не задумывался. Стырил из скетчей в которых оно работало. Сообщение выводит, что тут может быть не так? Было бы неправильно, меня или предупредили бы, или оно выдавало бы что-то одно, но факт, что числа-то я получаю.

Deleted
()
Ответ на: комментарий от I-Love-Microsoft

У Serial print и println перегружены для разных типов данных, включая числа.

KivApple ★★★★★
()

Вы мне главное скажите, в порядке выполнения циклов, области видимости переменных есть ошибка? Принтлн работает.

Deleted
()

И почему в первом примере команда внутри цикла не видит переменный объявленной в цикле?

Deleted
()
Ответ на: комментарий от Deleted

Если у новичка что-то не работает «вот так», перепиши иначе. Некоторые вещи нужно воспринимать примерно «что ж, раз оно работает именно так, я приму это к сведению и буду использовать как оно работает, если меня устраивает, или перепишу иначе, если не устраивает». Как-то так.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Дык это, в примерах и скетчах для ардуины все так и делают, как в моём примере! Я же перед тем как придти сюда проверил как у умных людей. А что, для ардуины это нормально, не видеть переменной цикла в самом цикле?

Deleted
()

У меня ардуин никогда не было, но я бы попробовал написать так:

int A = 0;
void loop() {
  Serial.println(A);
  A = (A + 1) % 256;
}

pftBest ★★★★
()
Ответ на: комментарий от BceM_IIpuBeT

Да, я сетап просто опустил тут, чтобы не отвлекал.

Deleted
()

Проверил щас на arduino ide 1.6.9 на офтопике и клоне arduino nano на 328 камне....

Работает объявление итератора в цикле... и вложенные циклы тоже как положено работают

Разбирайтесь со своим компилятором

jo_b1ack ★★★★★
()
Последнее исправление: jo_b1ack (всего исправлений: 1)

IDE 1.8.3, на нано все работает.

void setup() {
    Serial.begin(115200);
}

void loop() {
    for(int A = 0;A<255;A++)
        Serial.println(A);
    delay(5000);
}

KillTheCat ★★★★★
()
Ответ на: комментарий от jo_b1ack

Спасибо, хоть один живой тестер :) Тоесть, не надо дополнительно ничего обявлять, да? Команда в цикле должна сама всё увидеть, да? А вложенные циклы можешь посмотреть?

И что может быть не так с компилятором?

Deleted
()

Так, проверил на своём компе,на котором ковырял всякие железки и 3Дпринтер на ардуине. Переключил на уно в настройках, больше ничего не делал. Цикл действительно работает как надо.

Что тогда может быть не так на втором компе, на котором всё плохо работало? Ардуину на него поставил только вчера, настроил на уну и всё. Обе системы идентичны по дистрибутиву(Манджара) и версиям пакетов. gcc-multilib на обеих. Что ещё не так?

Deleted
()
Ответ на: комментарий от Deleted

Да итератор объявлен в цикле и все работает.вложеные циклы тоже работают в том порядке как и должны.

Смотри какие ключи используются,может какие оптимизации используются и компилер как то криво разворачивает цикл

jo_b1ack ★★★★★
()

ТС, ко всему что уже написали в треде, я честно не помню что делает println и не знаю куда ты выводишь числа, но скорее всего на какой-то маленький экранчик, только не забывай, что без задержки loop выполняется очень быстро и у тебя на выводе будет каша (точнее твои глаза не будут успевать, а может экранчик не будет успевать).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от anonymous

А как и где это увидеть? Я ведь ничего специально не накручивал, всё просто работает на одном компе и не работает на другом.

Deleted
()
Ответ на: комментарий от Deleted

Возможно по расширению файла.

Или флаги компилятора (я так понял там gcc). У тебя же IDE - ищи где указываются.

anonymous
()
Ответ на: комментарий от anonymous

Я в упор не вижу где это в ардуиновской идешке настраивается, извините за тупость.

Deleted
()

Нельзя с абдурины начинать осваивать железяки. Купи макетку на STM32F103, да дешевый st-link на алиэкспрессе. Поставь arm-none-eabi-gcc, да начинай осваивать. Только никаких калокубов, от них мозги раскисают.

anonymous
()
Ответ на: комментарий от Deleted

Нет тут никаких спорных моментов.

Не научишься так ничему, т.к. абдурина самое главное скрывает от тебя — структуру железа.

Но если наплевать на знания, а нужно лишь один раз сделать свистоперделку с мигающим светодиодом, то можно и абдурину взять.

anonymous
()
Ответ на: комментарий от jo_b1ack

Он освоение автомобиля начал с металургии и изготовления молотков, потому что производители всё прячут. Невозможно ничему научиться тупо сев в автомобиль. Надо начинать с добывания огня и поисков осколков метиоритов.

Deleted
()
Ответ на: комментарий от anonymous

Не научишься так ничему, т.к. абдурина самое главное скрывает от тебя — структуру железа.

Кроссплатформенность - это всегда хорошо.

KillTheCat ★★★★★
()

Так, народ, помогите, пожалуйста понять, что произошло вообще? Ещё большая мистика. Копался я в том компе, с которого кривизна вся началась и по ошибкам в логах обнаружил вставленную в лаптоп сандисковскую микроСД карту памяти. Карта работает, но пишет ошибки в dmesg.

Вытащил карточку, перезагрузил комп, ошибки пропали. И главное! Ардуина заработала и с ним.

Вставил обратно карточку, перезагрузил снова, пошли ошибки в дмесге, Ардуина опять дурит.

Вытащил карту, перезагрузил, ошибок нет, вставил - ошибок нет, запустил Ардуину - пашет. И карточка вставлена и ардуина не дурит при компиляции.

Самое невообразимое это то, что когда работает криво - скетчи-то загружаются! И работает логика, только с последовательностью выполнения у неё плохо.

Допустим, что при загрузке линукса обнаруживается эта злосчастная карточка памяти, загружается модуль, настройки всего съезжают как-то и подглючивает, допустим. Но как это может влиять на логику компиляции?

Deleted
()
Ответ на: комментарий от jo_b1ack

Нет, конечно. Но любая поделка — это не абдурино. Как минимум STM8. Но абдурина — это днище, это как бубунту себе поставить и линуксоидом себя возомнить!!!

anonymous
()
Ответ на: комментарий от KillTheCat

Кроссплатформенность - это всегда хорошо.

Бред-то какой! Любая кроссплатформенность — это жир и тормоза. То же и с абдуриной. Ну как у нормального человека мигалка светодиодом может больше пары сотен байт занять? А у абдурины это килобайты! Да еще и псевдоцепепе туда запихали, мудачье сраное!!!

Если ТСу нравятся девборды на 8-битном говне, то пусть себе через avr-gcc код пишет, да радуется этому шлаку... Ведь у 328p периферия вообще никакая: ни тебе DMA, ни таймеров в нужном количестве, да вообще полный треш!

anonymous
()
Ответ на: комментарий от Deleted

Вангую, что у тебя вместо линукса бубунта, а карточку она с какого-то перепоя как модем отождествила. И запустила модем-манагер, который бьет тебе буфер обмена с абдуриной.

Если хочешь без проблем работать, снеси свою бубунту и поставь уже линукс! Без всяких модемманагеров, сыстымде и прочего шлака!

anonymous
()
Ответ на: комментарий от Deleted

Когда приходилось писать под ардуину, помнится тоже нарывался на какую-то полную дичь в компиляторе, бредятина из разряда твоей кулстори. Поскольку задача была конкретной, а проблема слишком кретинской, чтобы ее решать, я просто все обтек. Убей не помню, но вроде как он мне не давал форварды писать со словом статик.

(В итоге более-менее въехав в тему понял, что ардуино это оверпрайснутое говно для копипасты примеров и гы-гы, и что проще взять стм+паяльник, но все отменилось и до серьезных девайсов дело не дошло.)

anonymous
()
Ответ на: комментарий от Deleted

вытащил вставил опять не опять

Я не схемотехник, но слыщал такое бывает если ноги в воздухе болтаются. Правда ардуина она вся такая для конечного пользователя и на ней это все учтено, конечно же.

anonymous
()
Ответ на: комментарий от anonymous

Скорее всего, но несмотря на категоричность не лорчевать его хотя бы отчасти тут невозможно.

anonymous
()
Ответ на: комментарий от anonymous

Настоящий линуксоид не зациклен на выборе так называемого истинного дистра. У него будет и на убунте работать и на другом, потому что он умеет не только установливать ось по хэндбуку и потом гонять лысого на нее с криками и восторгом.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Чувак, включи элементарную грамотность: чтобы сделать из генты конфетку, достаточно пары-тройки вечеров. Чтобы конфетку сделать из бубунты, надо снести бубунту и поставить генту. Потому что тупо удалить systemd из бубунты ты не сможешь никак! А дистр с systemd == мастдайка.

anonymous
()
Ответ на: комментарий от anonymous

проще взять стм+паяльник

++

Освоить ЛУТ, а там можно и о более серьезных способах производства думать. Несложную платку за пару дней можно сделать: нарисовать в кикаде, отлутить несколько штук, протравить, отбраковать, насверлить/залудить, напаять переходных и деталюшек, провести заключительный электротест. При наличии богатого багажа сниппетов прошивка тоже максимум за пару дней пишется; ну, сложная пишется за месяц — но на абдурине подобное вообще невозможно!

anonymous
()
Ответ на: комментарий от anonymous

но на абдурине подобное вообще невозможно!

Действительно, на ней-то уже будет рабочий прототип ещё до того, как ты успеешь кикад запустить.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Фантазер ты, однако.

Видел я, как на форумах абдуринщики обливаются слезами и просят им «скетч» написать, т.к. используемые ими натыренные в разных углах интернета «скетчи» не стыкуются: у одной пары таймер один и тот же, у другой еще что.

И не надо забывать об убогости периферии атмеловских мелкоконтроллеров! Будь ты даже абдуринщиком семи пядей во лбу, невозможного сделать не сможешь! И будешь, как идиот, I2C или 1wire ногодрыгом фигачить, когда у психически здоровых людей все это аппаратно работает!

anonymous
()
Ответ на: комментарий от redgremlin

Возможно это было давно, возможно с тех пор ардуине полегчало, возможно ты самый умный итт, а сабж это результат нащего коллективного психоза. Хотя наиболее вероятно, что твоя уна не видела ничего кроме цц цв и пары стандартных шилдов на поиграться.

anonymous
()
Ответ на: комментарий от anonymous

Не пугай людей производством, под стм также продаются борды в разных вариантах. То что ты рассказываешь без серийности это маразм.

anonymous
()
Ответ на: комментарий от Deleted

Он освоение автомобиля начал с металургии

Так в автошколах изучение начинают с устройства автомобиля, не? Он прав, хотя бы общее представление об устройстве железа знать нужно. Ардуино этого не даёт.

Ардуино дает легкий вход, чтоб энтузиазм на первых порах не потерять. Ну и после дает быстрые прототипы, но к тому времени железо надо хоть немного знать.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от anonymous

Естественно, я для разработки борды использую. Но в прибор же не будешь впихивать говно с палками, там печатка нужна!

Если не планируется больше 3-4 штучек сделать или же нужен прототип для испытаний, я ЛУТом занимаюсь. Прототип нужен всегда, так что, ни одно устройство без стадии ЛУТа не выходит (разве что очень редко что-то нужно четырехслойное, тут уже ЛУТ никак и нужно сразу платы заказывать).

Вот те раз, вот те два. Да и вообще.

anonymous
()
Ответ на: комментарий от anonymous

возможно ты самый умный итт

Мне, почему то, в эту версию вполне верится.

а сабж это результат нащего коллективного психоза

И это подозрительно похоже на правду.

твоя уна не видела ничего кроме цц цв и пары стандартных шилдов на поиграться

Для ардуины у меня заведён отдельный файлик в LO Calc, чтоб не запутаться, что у меня есть, а чего нет. На 9и листах. Хотя уну, конечно, я использую только для прототипирования на макетке, в готовые изделия идут либо нано либо про мини.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

в готовые изделия идут либо нано либо про мини

Что значит «в готовые изделия»? Ты делаешь «изделия» на абдурине?

Тогда

Мне, почему то, в эту версию вполне верится.

зря тебе верится. Твой диагноз — имбецил!

anonymous
()
Ответ на: комментарий от anonymous

Слушай, умник, мне ардуина нужна для сына. Как продвинутый конструктор. У тебя дети есть? Ты им легу покупаешь? Или учишь их химии и проим наукам, чтобы лить монолитные дома и машинки из открытых тобой лично полимеров?

Deleted
()

Так. Проблема всё-таки в карточке памяти. Мне лень копаться, просто оставил для себя заметку - не оставлять карту памяти воткнутой в компьютер.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.