Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 29.03.2022
Сообщений: 18
1

Считать время нахождение джойстика в каждом положении в секундах (Arduino Uno, Proteus)

05.11.2022, 22:16. Показов 350. Ответов 2

Author24 — интернет-сервис помощи студентам
Само задание звучит так: "При отклонении джойстика вниз зажигать красный светодиод, при отклонении вверх – зеленый, а при отклонении влево/вправо – мигать верхним/нижним желтым. На экране вывести свое имя, фамилию и считать время нахождения джойстика в каждом положении в секундах."

Первую часть задания я выполнил: джойстик реализован через два потенциометра, один на вертикальную ось, другой на горизонтальную. Во втором задании нужно отдельно отслеживать время отклонения по горизонтальной оси и отдельно по вертикальной. То есть на экран выводится сразу два счетчика-таймера. Получается, надо посчитать и вывести время пребывания в состоянии отклонения влево, затем, если джойстик отклонен вправо, то обнулить и считать уже время пребывания в этом состоянии; то же для вертикальной оси. Джойстик в нейтральном положении можно не рассматривать, считать время пребывания в этом состоянии не нужно. Задача не столько связана с микроконтроллерами, сколько с алгоритмами, и сложность именно в "программистской" части этой задачи: я просто не знаю, как реализовать это все.

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

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

Прилагаю код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27,16,2);
//вниз - красный
//вправо - мигать нижним желтым
//вверх - зеленый
//влево - мигать верхним желтым
 
void setup(){
  lcd.init();
  lcd.backlight();
  pinMode(A0, INPUT); //порт А0 у-оси на прием информации
  pinMode(A1, INPUT); //порт А1 х-оси на прием информации
  pinMode(13, OUTPUT); //порты 13, 11 на вывод LED
  pinMode(12, OUTPUT); //порт 12 ШИМ вывод LED
  pinMode(11, OUTPUT);
}
void loop (){
  lcd.setCursor(0,0); //установка курсора на первый символ первой строки
  lcd.print("Familia Name"); //вывод в первой строке своего имени
  
  int x_an = analogRead(A1); //считываем аналоговый сигнал х-оси
  int y_an = analogRead(A0); //считываем аналоговый сигнал х-оси
 
  int x_map = map(x_an, 0, 1023, -255, 255); //для удобства масштабируем аналоговый сигнал х-оси в диапазон -255, 255
  int y_map = map(y_an, 0, 1023, -255, 255); //для удобства масштабируем аналоговый сигнал у-оси в диапазон -255, 255
 
  if(x_map != 0){ //если масштабированный сигнал х-оси отклонен
    if(x_map < 0){ //отклонен влево
      analogWrite(11, 255); //зажигание яркого света
      delay(500); //задержка для эффекта мигания
      digitalWrite(11, LOW); //выключение диода для эффекта мигания
    }
    else{ //отклонен вправа
      analogWrite(11, 127); //зажигание тусклого света
      delay(500); //задержка для эффекта мигания
      digitalWrite(11, LOW); //выключение диода для эффекта мигания
    }
  }
  else{ //если масштабированный сигнал х-оси НЕ отклонен
    digitalWrite(11, LOW); //выключить диод
  }
////////////////////////////////////////////работа с вертикальной осью
  if(y_map < 0){ //если масштабированный сигнал х-оси отклонен вниз
    digitalWrite(12, HIGH); //зажечь красный диод
  }
  else{ //иначе потушить
    digitalWrite(12, LOW);
  }
  if(y_map > 0){ //если масштабированный сигнал х-оси отклонен вверх
    digitalWrite(13, HIGH); //зажечь зеленый диод
  }
  else{ //иначе потушить
    digitalWrite(13, LOW);
  }
 
  lcd.setCursor(0,1); //установка курсора на первый символ второй строки
  lcd.print("Y "); //название оси
  lcd.setCursor(3,1); //вывод количества секунд в данном положении с 4 символа второй строки
 
  lcd.setCursor(5,1); //установка курсора на шестой символ второй строки
  lcd.print("X "); //название оси
  lcd.setCursor(8,1); //вывод количества секунд в данном положении с 9 символа второй строки
}
А также скриншот схемы:
Миниатюры
Считать время нахождение джойстика в каждом положении в секундах (Arduino Uno, Proteus)  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2022, 22:16
Ответы с готовыми решениями:

Proteus 8.1 Arduino UNO R3+PCF8574+LM016L
Есть реальная Arduino UNO R3. Создал в Proteus 8.1 модель, да бы потренироваться перед покупкой...

Время мигания светодиода в Arduino UNO
Здравствуйте я приобрёл себе Arduino UNO и при загрузки в его sketch на мигание 13 светодиода он...

Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах.
Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах. Можете помочь...

Ошибка при загрузке кода в Arduino Uno (Китай) - Arduino
В Диспетчере устройств Arduino определяется, как USB-SERIAL CH340 (COM5). При попытке залить...

2
0 / 0 / 1
Регистрация: 29.03.2022
Сообщений: 18
12.11.2022, 09:44  [ТС] 2
Решил, закройте вопрос
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
12.11.2022, 09:48 3
Цитата Сообщение от cypher111 Посмотреть сообщение
закройте вопрос
правила п 2.3
Сообщения и темы, а также другой контент, размещаемый на форуме, по просьбам пользователей не удаляется и не закрывается.
и еще

Цитата Сообщение от cypher111 Посмотреть сообщение
Решил
п 4.10
Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.
0
12.11.2022, 09:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2022, 09:48
Помогаю со студенческими работами здесь

Arduino UNO. Как работать c RFID-сканнером и Arduino на одном Serial-порту?
Рас уж тут речь зашла об ардуине и многопоточности COM порта, думаю могу обратиться именно сюда за...

Arduino uno + arduino ethernet + delphi для чайников
Доброго времени суток. У меня такая задача нужно реализовать программу на Delphi которая...

Arduino UNO + HC-06. RX
Подключаю модуль HC-06, питание HC-06 от отдельного источника 4.8В. ножки RX и TX модуля, в TX и RX...

Arduino uno
Нужна схема структурная Arduino Uno,перелопатил кучу сайтов,только принципиальные,может кто находил?

Arduino Uno + Sim900 + C#
Здравствуйте. Хочу отправлять и получать данные через серийный порт плате с SIM900, стандартный...

подключение arduino uno
Всем привет! Недавно пришла (а точнее пришли) плата Ардуино Уно. Думал ща врублю ролики на ютубе по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru