Как уговорить Ардуино ИДЕ использовать 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"
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения