Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Кто может помочь с кодом? Нужно чтоб по нажатию кнопки выставлялось заданное положение по датчикам от ровера

Опубликовано

А можно поинтересоваться сначала, прежде чем ответить на вопрос?

Это "напишите мне скетч для готового блока" ?
Или "дайте совет, вот тут у меня проблема в коде, не знаю где ошибка"?

Опубликовано
  В 19.07.2016 в 10:19, AROKH сказал:

А можно поинтересоваться сначала, прежде чем ответить на вопрос?

 

Это "напишите мне скетч для готового блока" ?

Или "дайте совет, вот тут у меня проблема в коде, не знаю где ошибка"?

ну и это и то ) ардуино недавно начал изучать . вот код на два положения, пока с одним датчиком , я в правильном направлении?)

Новый текстовый документ.txtПолучение информации...

Опубликовано

Нуууу... как тебе сказать...
Попробую по порядку, то что явно вижу.
Нумерацию строк лучше включи, проще будет указывать. Файл-настройки-нумерация

1. Строки 46-48... У тебя одним проводом управление... двумя клопами? Строка 46 "дать +5в на канал 8", строка 48 "дать массу на канал 8"
Там дальше что-то интеллектуальное, распознающее +5 и 0 ? Не понял этого момента...  пока не буду ничего говорить.

2. В целом... Нет, так, вероятно, не будет работать. Одним циклом в лупе управиться не удастся. Нужно в лупе проверять показания с пинов кнопок и передавать нужные параметры в функцию. И уже в функции творить цикл установки.
Дело в том, что ты сам заблудишься скоро в скетче, ибо "линейный" алгоритм.
А надо писать отдельные функции для каждой мелкой операции.

3. Переменная visota - это будущий счетчик, как я понял? Ее наличие непонятно пока(((

4. 32-34, 53-55... эммм... а зачем переприсваивание, а потом следующим условием проверка того, что только что присвоил? Нипанятна.... То же самое, запутаешься в линейном алгоритме((( то есть ты указал visota = 1, но потом следующая строка if visota==1.... Это условие бессмысленно в данном месте.

5.
if (visota == 2)

  {
    analog = analogRead(0); //
    Serial.println(analog);
  }
 
  if (analog <= 450 && visota == 2)
    digitalWrite(9, HIGH); // UP

  if (analog >= 460 && visota == 2)
    digitalWrite(9, LOW);

зачем каждый раз перепроверять visota? Внеси в тело условия, вот так. Две проверки станут не нужны

if (visota == 2)

  {
    analog = analogRead(0); //
    Serial.println(analog);
 
 
  if (analog <= 450)
    digitalWrite(9, HIGH); // UP

  if (analog >= 460)
    digitalWrite(9, LOW);

}

6. Сейчас алгоритм работает "пока держишь кнопку, идет установка". Если ты хотел сделать по одиночному нажатию, то нужны функции.
Короче, функции вообще архинеобходимы. Изучай, без них никак

Опубликовано

П. 1  - я ошибаюсь, виноват )))
Смотрел в блокноте, не заметил else

На объективность не претендую, я не профразработчик, тема самому достаточно новая.

Я имел ввиду - скетч не универсален. Не хватает много условий.
В данный момент работает как "одностороннее поддержание уровня", верно?
То есть: включен режим 1. При этом любое показание >=100 вызовет срабатывание.
Что будет
- если положение авто в данный момент по датчику 80 ?
- если авто не может достичь заданного предела 100, а прошло уже много времени ?
- если это будет 4 датчика и 8 клапанов? Отлаживать все положения вручную?

Ну и нужны будут допуски. идеальных поверхностей мало.

Линейно сложно решить. Да, теоретически, наверное, возможно, но сложно.
Однако продолжай, весьма интересно.

Может еще кое-кто подключится в тему, он тоже пишет свою версию)))

Опубликовано

тенденция:
в лупе отслеживать нажатие кнопок
и передавать нужные данные в функцию, которая сравнивает аналогрид с данными и делает операции

Ибо я щас представил себе во что вырастет проверка всех условий по всем датчикам

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...