Как уговорить Ардуино ИДЕ использовать 16 бит. Подозреваю , что int - 32 битный, поэтому на:
Код:
const (int16_t )(DATA_16[]={0xf3ed,0xf40a, ...
ругается : error: narrowing conversion of '62445' from 'int' to 'int16_t' {aka 'short int'} [-Wnarrowing]
Не знаю, за прошедшие 3 недели решена уже эта задачка или нет, но только 62445 вообще-то в 16 разрядов уложится только если без знака. Я бы на вашем месте попробовал его указать как unsigned short int или uint16_t. На моём месте у меня никогда не было такой проблемы ни в Ардуино-ИДЕ, ни в голом Си.
Причём здесь светодиоды. Тут с SD нужно разбираться.
А зачем разбираться с SD, который уже года два или три без проблем работает, будучи в те времена откомпилирован в иде 1.8? И зачем с ним разбираться, если он и сейчас отлично работает в иде 2.3.4 на атмеге2560?
Изначально меги328 и 2560 были в основном составе платформ IDE "по умолчанию"... А вот 16я это уже из "добавок". Возможно библиотека CD где то не учитывает аппаратных особенностей/отличий в кристаллах. 16 ка вариант ардуино на меге 32... Была вроде такая платка (arduino Leonardo на atmega32u4), да распространения не получила... Жаль таки экзотика та 16я Мега... Из dip40 только Меги 8515 и 162 для проверки предположений... Это не та группа, что у 16й Меги...
А может всё гораздо проще - люди, которые правят платформу и библиотеки в иде выше 2.0 архаику типа атмега16 в глаза не видели, а потому выпускают не оттестированный продукт?
Платформа для АВРок одинакова что для 1.8.9, что для 1.8.19, что для 2.х.х... По сему это не основание для проблем... А вот версия платформы вполне возможно может быть "хромой" - можно попробовать удалить текущую и поставить более раннюю...
Здравствуйте. Дяденьки помогите. Делаем проект к выставке, Есть код
Код:
const int zamokPin = 2; // Цифровой пин "замок" const int fotoPin = A0; // Аналоговый пин "фото" const int podgotovkaPin = 3; // Пин "подготовка" const int otkritiePin = 4; // Пин "открытие" const int podachaPin = 5; // Пин "подача" const int alarmPin = 6; // Пин "аларм"
// Переменные для хранения времени unsigned long previousMillis = 0; // Время последнего изменения состояния unsigned long interval = 0; // Интервал для таймеров
// Состояния системы enum SystemState { STATE_IDLE, // Ожидание STATE_CHECK_ZAMOK, // Проверка входа "замок" STATE_CHECK_FOTO, // Проверка входа "фото" STATE_ALARM, // Состояние "аларм" STATE_PODACHA, // Состояние "подача" STATE_PODGOTOVKA, // Состояние "подготовка" STATE_OTKRITIE, // Состояние "открытие"
};
SystemState currentState = STATE_IDLE; // Текущее состояние системы
void loop() { unsigned long currentMillis = millis(); // Текущее время
// Обработка состояний switch (currentState) { case STATE_IDLE: // Начальное состояние, переход к проверке "замок" currentState = STATE_CHECK_ZAMOK; break;
case STATE_CHECK_ZAMOK: if (digitalRead(zamokPin)) { // Если флаг поднят, переходим в состояние "аларм" digitalWrite(alarmPin, HIGH); digitalWrite(podgotovkaPin, HIGH); currentState = STATE_ALARM; } else { // Если флаг опущен, включаем "подача" и ждем 3 секунды digitalWrite(alarmPin, LOW); digitalWrite(podgotovkaPin, LOW); digitalWrite(podachaPin, HIGH); previousMillis = currentMillis; interval = 1000; // 1 секунды currentState = STATE_PODACHA; } break;
case STATE_PODACHA: if (currentMillis - previousMillis >= interval) { // По истечении 1 секунды переходим к проверке "фото" digitalWrite(podachaPin, LOW); currentState = STATE_CHECK_FOTO; } break;
case STATE_CHECK_FOTO: if (analogRead(fotoPin) <= 800) { // 4 В +-= 800 (при 5 В = 1023) // Если флаг поднят, включаем "подготовку" и ждем 10 секунд (digitalWrite(podgotovkaPin, HIGH)); delay(500); (digitalWrite(otkritiePin, HIGH)); delay(500); (digitalWrite(otkritiePin, LOW)); previousMillis = currentMillis; interval = 10000; // 1 секунды currentState = STATE_PODGOTOVKA; } break;
case STATE_PODGOTOVKA: if (currentMillis - previousMillis >= interval) { // По истечении 10 секунд проверяем "замок" if (digitalRead(zamokPin)) { digitalWrite(alarmPin, HIGH); } // Включаем "открытие" и ждем 3 секунды digitalWrite(otkritiePin, HIGH); previousMillis = currentMillis; interval = 1000; // 1 секунды currentState = STATE_OTKRITIE; } break;
case STATE_OTKRITIE: if (currentMillis - previousMillis >= interval) { // По истечении 3 секунд выключаем "открытие" и ждем 2 секунды digitalWrite(otkritiePin, LOW); previousMillis = currentMillis; interval = 2000; // 2 секунды currentState = STATE_CHECK_ZAMOK; // Возврат к проверке "zamok" } break;
case STATE_ALARM: // Ожидание опускания флага на "замок" if (!digitalRead(zamokPin)) { digitalWrite(alarmPin, LOW); currentState = STATE_CHECK_ZAMOK; // Возврат к проверке "замок" } break; } }
Как нам сделать, чтоб eсли на D2 в любой момент подать логическую 1, программа или обнулялась. В общем должно работать так.
1). Если подачи питания, на входе D2 логическая (1- флаг поднят), то на D3 и D6 - HIGH.
2). Если при подачи питания на входе D2 логическая (0 - флаг опущен) то длительностью 1 секунда на D5 - HIGH, далее ждём команду на вход A0.
3). Если если в процессе ожидания на D2 опять появится логическая (1- флаг поднят), а на A0 (5 вольт = 1023, флаг опущен), то на D3 и D6 - HIGH, A0 при этом игнорируется, пока на D2 не появится логическая (0 - флаг опущен).
4). Если на D2 логическая (0 - флаг опущен), а на A0 (4 вольта ±= 800, флаг поднят), то на с разницей в 2 секунды на D3-HIGH длительностью 10 секунд, а на D4-HIGH длительностью 1 секунда.
После отработки 10 секундного таймера D3, на D4-HIGH длительностью 1 секунда.
Ждём 2 секунды. 5). Если на D2 логическая (1- флаг поднят) то на D3 и D6 - HIGH, ждем появления логической (0 - флаг опущен).
6). Если на D2 логическая (0 - флаг опущен) то на D5 - HIGH длительностью 1 секунда.
7). Переходим к пункту 3.
Сейчас у нас не работают пункты, что выделены жирным шрифтом. Помогите пожалуйста.
Снимайтесь с выставки. Есть мнение, что не умеющие реализовать настолько простой алгоритм не должны участвовать в выставках. Выставки это, пожалуй, демонстрация каких-то достижений и умений, здесь же попахивает начальным уровнем школьного кружка.
А обращения в русском языке, к слову, выделяются запятыми, дяденьки. Про другие ошибки и говорить не приходится.
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Или тем, что истинное назначение устройства не соответствует области применения ("устройства двойного назначения"), а спецов по модернизации в нужном направлении нету. Иначе - выкладывайте схему и описание работы устройства....
Или тем, что истинное назначение устройства не соответствует области применения ("устройства двойного назначения"), а спецов по модернизации в нужном направлении нету. Иначе - выкладывайте схему и описание работы устройства....
Да вы правы этот код был изначально для другова устройства, но он на 90% подошел под алгоритм работы сеяки. Как в принципе и многие коды с инета, всё зависит от фантазии и тех мышления в отсутствии каких либо навыков, в нашем случае программирования. В принципе я уже сделан вариант схемы и добавил нужную функцию на двух реле, по этому вопрос как бы снят. Но алгоритм выложу, что не быть плохим челом.
Первым едет копательная машина роющая траншею и расставляющая маячки. На сеялке есть типа магазина где в ряд уложены саженцы, и крутится транспортировочная лента подключенная по умолчанию к D3 . При включении питания под корнем первого саженца электромагнит D5 открывает и закрывает заслонку, саженец падает в специальную люльку. Лента подводит следующий саженец над заслонкой. Если саженец не попал в "люльку загребатель" ( функция которого это - уменьшения расстояния от сеялки до дна траншеи и засыпания землёй корня саженца) и застрял нажав викрик и подав + на D2, то D3 отключает ленту и опускает "люльку загребатель", система блокируется и горит предупредительная лампа. На заслонках управляемые выходами D4 и D5 между электромагнитом и заслонкой стоят запараллеленные микрики подключенные к D2, если саженец застрял, заслонка упрётся в него и микрик нажмётся. Оператору нужно извлечь застрявший саженец.
Если всё хорошо то ждём команду с оптического датчика A0 который определяет маячки над траншеей, как только определил, D3 останавливает на 10 сек ленту и опускает "люльку загребатель" после этого открывается и закрывается посадочная заслонка D4, и в лунку падает саженец и при движении сеялки засыпается землёй за счёт фартука, через 6 сек на всякий повторим сброс по D4, если заело и на D2 + то ждем физическое вмешательство по извлечению саженца, если всё хорошо то поднимаем фартук по D3 включаем ленту, далее D5 подаёт в люльку следующий саженец с магазина. Примерно вот так. Схемка
Снимайтесь с выставки. Есть мнение, что не умеющие реализовать настолько простой алгоритм не должны участвовать в выставках. Выставки это, пожалуй, демонстрация каких-то достижений и умений, здесь же попахивает начальным уровнем школьного кружка.
А обращения в русском языке, к слову, выделяются запятыми, дяденьки. Про другие ошибки и говорить не приходится.
Я хотел бы выразить своё несогласие с некоторыми утверждениями. Многие конструкторы, по различным причинам, не имели должного образования и создавали шедевры инженерии. Циолковский имел всего 3 класса образования, и лишь со временем получал знание из книг. У меня тоже есть шанс!!!
Хотел бы также заметить, что к примеру конструктор Сухой не разрабатывал свои самолёты от начала и до конца. Он закладывал основную идею (концепцию) и принципы работы, а также аэродинамические характеристики в модель. Затем инженеры-проектировщики различных систем работали над созданием масштабного прототипа.
Если я допускаю ошибки в тексте, не учь в написании кода, но при этом умею рисовать в SolidWorks, разбираюсь в электронике и провожу время в лаборатории пропуская пары, то это не означает, что я не могу представлять свои идеи.
Хочу вас порадовать: на выставках 99% идей — это концепции времён СССР, дополненные китайской электроникой, поскольку в стране некому её разрабатывать. В настоящее время образование в этой области не на должном уровне. Сдать сессию, полагаясь только на свои знания, без дополнительной денежной подготовки, довольно сложно. Зачем тогда учить?
Схема не соответствует "хотелкам", поскольку пропущены соответствующие приводы и их датчики. Это как минимум. Или придется согласовывать обмен в мультимикроконтроллерной конструкции - одна голова за одними задачами, другая за другими. Разве что игрушка из того получиться может. Насчет "не учёных умников"... Отсутствие официального (по соответствующим министерствам) образования/дипломов совершенно не означает отсутствия надлежащей и ещё более сложной/тяжёлой САМО ПОДГОТОВКИ. Да в гораздо более широком охвате изучаемых дисциплин. Когда то именовалось вроде "вольный слушатель", при союзе куча курсов и " Народных университетов". Сегодня в достатке ранее крайне труднодоступной литературы - было бы желание изучать. Пы.Сы. Помнится ещё в дореволюционны времена в России была разработка так называемого... Если склероз не изменяет... "рельсового земледелия"... Устанавливались по краям поля два рельса, между ними балка с каретки со сменным инвентарем... Похоже на современный Плоттер только " малость увеличенный"... Чем там дело кончилось уже подзабыл...
Схема не соответствует "хотелкам", поскольку пропущены соответствующие приводы и их датчики. Это как минимум. Или придется согласовывать обмен в мультимикроконтроллерной конструкции - одна голова за одними задачами, другая за другими. Разве что игрушка из того получиться может. Насчет "не учёных умников"... Отсутствие официального (по соответствующим министерствам) образования/дипломов совершенно не означает отсутствия надлежащей и ещё более сложной/тяжёлой САМО ПОДГОТОВКИ. Да в гораздо более широком охвате изучаемых дисциплин. Когда то именовалось вроде "вольный слушатель", при союзе куча курсов и " Народных университетов". Сегодня в достатке ранее крайне труднодоступной литературы - было бы желание изучать. Пы.Сы. Помнится ещё в дореволюционны времена в России была разработка так называемого... Если склероз не изменяет... "рельсового земледелия"... Устанавливались по краям поля два рельса, между ними балка с каретки со сменным инвентарем... Похоже на современный Плоттер только " малость увеличенный"... Чем там дело кончилось уже подзабыл...
Так мы и так делаем модель, а не полномасштабный прототип, детали на 3D принтере напечатаем, соберем, опять разберем и подгоним в 3 де редакторе и т.д.. Да и мы только на 1 курс института поступили. Рано нам ещё в грудь кулаком стучать))) По поводу схемы всё правильно, мы не закладывали в неё моторы, второй микрик и электромагниты, схема рисовалась для корректировки кода.
Забью первый кол - оптические датчики в "чистом поле" при современном уровне пыли плюс солнечная засветка. Долго ли такой вариант будет работоспособен? Схема изначально нереализуема... Второй кол по коду... Где у Вас в
Код:
loop
берется
Код:
currentState
?? Без оного вообще неработоспособно... Даже школяры до такого...
Забью первый кол - оптические датчики в "чистом поле" при современном уровне пыли плюс солнечная засветка. Долго ли такой вариант будет работоспособен? Схема изначально нереализуема... Второй кол по коду... Где у Вас в
Код:
loop
берется
Код:
currentState
?? Без оного вообще неработоспособно... Даже школяры до такого...
Относительно первого кола: в зерновых сеялках, как импортных, так и отечественной сборки, используется оптика для подсчёта семян при посадке. Зерно транспортируется по трубкам с помощью потока воздуха, а в них установлены оптические ИК датчики, которые в запыленной среде передают информацию о количестве пролетевших зерен на компьютер установленный в тракторе. Также присутствуют датчики потока воздуха и другие компоненты.
В процессе разборки сломанных модулей сеялок мы обнаружили, что основной проблемой выхода из строя этих датчиков были стёкла излучателя и приёмника, которые со временем становились матовыми от контакта с семенами, что приводило к ошибкам, так же встречались выходы из строя ИК диодов. А пыль сдувается потоком воздуха, хотя запылённость датчика после матирования увеличивалась. Мы понимаем, что они работаю в закрытом от солнца пространстве. И думали что оно будет работать при мощном ИК диоде и прикрытой конструктивно от солнечных лучей, ну или можно использовать лазер, механику или ультразвук, нужны полевые испытания. В настоящее время мы работаем над созданием модели, которая не предназначена для выставки «АГРОСАЛОН», а является всего лишь частью внутреннего обмена идеями между учебными заведениями.
Что касается второго кола: код не был написан специально для этого устройства, как я уже упоминал ранее. Код компилируется в Arduino и работает в симуляторе Proteus, за исключением выделенного жирным шрифтом фрагмента. Не стоит делать поспешные выводы о нашем уровне знаний, поскольку мы только начали изучать эту тему, как я уже упоминал ранее. Кроме того, в школах этому не учат.
Мой отец посоветовал обратится на форум, рассказывал, что раньше, когда люди обращались за помощью на форумы, они получали хотя бы частичную помощь. Сейчас я понял преобладает другой подход: много споров и оскорблений на несколько страниц, и никакой помощи.
Благодарю всех за помощь! Прошу прощения, если я был некорректен. Всех с прошедшим!
PS. Для первых проб мы проблему решили использовав в схеме парочку реле, ну а теперь нам помогли с кодом.
Кто ищет как бы помудренее накрутить программу тот обязательно находит ... использовать switch / case так как в Вашем варианте ... Это конечно весьма оригинально... Но как то не встречалось... Иже "условный переход по меткам, сгенерированным в подпрограммах"... Как бы "указатель на функцию" еще существует... Относительно оптики на открытом пространстве - практика дело наживное... Могу лишь заметить, что это не одно и то же, что светонепроницаемой камере поток проходящих "заслонок" регистрировать. Да и "светонепроницаемость" относительна - пластик, к примеру, вполне себе может быть для ИК прозрачным. А вот программы надо учиться самостоятельно составлять, тем более, когда уже в эту сферу достаточно глубоко увязли (хоть, похоже, и не по своему желанию). Тогда может и половина вопросов сразу отпадет. Одно дело подсказка другое - переработка программы "игрушки студента" под заказ. Этот вопрос только студентам интересен/полезен будет...
Уважаемые радиокоты! Прошу помощи . Я когда-то давно, примерно года полтора назад делал проектик на ардуино NANO. Все успешно конектилось с ПК и спокойно заливался скетч в среде IDE. Потом отложил это дело в долгий ящик. Сегодня достаю эту платку, а скетч в нее не заливается, ни какой, даже стандартный блинк. Выдает ошибку: "Не удалась загрузка: ошибка при загрузке: exit status 1". Я пробовал перезапускать среду IDE, перезагружать ПК, менять в настройках bootloader на old bootloader - безуспешно. Плата признаки жизни подает, т.к. прошлогодняя записанная в ней прошивка живая, и успешно отрабатывает. Пробовал перезаписывать загрузчик сторонним прогером - все перезаписывается успешно. Пробовал заливать прошивку в плату по ISP - тоже все заливается и работает. А вот в среде IDE не заливается прошивка В конце концов попробовал на другой плате ардуино NANO - та исправно работает и прошивка заливается на нее как положено в среде IDE. Не могу понять, где косяк Неужели плата за год неиспользования - испортилась частично? Микросхема связи USB-com - затертая, но скорее всего стандартно CH340. Непонятно только, за чем ее затерли... ---------- В логе в конце: can't set com-state for "\\.\COM8"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения