366 / 119 / 3
Регистрация: 25.01.2012
Сообщений: 4,592
Записей в блоге: 62
1

Внутри проверки условия не производится ещё одна проверка условия

21.02.2019, 23:44. Показов 1024. Ответов 3
Метки нет (Все метки)

Как задумывалось -
при нажатии на джойстик просто должны были остановится движки, но если при этом нажат джойстик по оси Y в опр направлении, то должна была произойти смена направления,
и соответственно
джойстик по оси Y в опр направлении и при этом не нажата кнопка джойстика (Z)
то должна убавлять скорость мотора

. Если-бы вы видели что он вытворяет - он не проверяет в теле проверки условий ещё какие-то условия - он тупо выполняет операторы без проверки второго условия, это в первом случае так, а когда идёт проверка Y, то он ввобще ничего не выполняет, хитрая ардуина короче.

Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
#define axis_X 0    // джойстик: Ось Х подключена к Analog 0
#define axis_Y 1    // джойстик: Ось Y подключена к Analog 1
#define axis_Z 2    // джойстик: Ось Z (кнопка джойстика) подключена к Digital 2
int value_X, value_Y, value_Z = 0;    // Переменные для хранения значений осей
int IN3 = 5; //шилд Input3 подключен к выводу 5 
int IN4 = 4; //шилд
int ENB = 3; //шилд
int motor = 0;// моя переменная которая будет хранить текущую скорость мотора
int motorSave = 0;// моя переменная которая будет хранить стартовую скорость заданную пользователем
int motorDirection = 0; //переменная для хранения направления вращения, 0-вперёд
void setup()
{
 pinMode (ENB, OUTPUT); //шилд
 pinMode (IN3, OUTPUT); //шилд
 pinMode (IN4, OUTPUT); //шилд
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
 
  pinMode(axis_Z, INPUT_PULLUP);//джойстик: подтяжка внутренним резистором
  Serial.begin(9600);
digitalWrite (IN3, LOW);//задаём направление врещения на намотку// смотря как у подключен мотор, если что перекинуть или исправить код
digitalWrite (IN4, HIGH);//задаём направление врещения на намотку
}
 
 
void loop()
{
//      lcd.clear();
  //джойстик
  value_X = analogRead(axis_X);    // Считываем аналоговое значение оси Х
  value_Y = analogRead(axis_Y);    // Считываем аналоговое значение оси Y
  value_X = map(value_X, 0, 1023, 0, 3); // преобразуем значение X в другой диапазон
  value_Y = map(value_Y, 0, 1023, 0, 3); // преобразуем значение Y в другой диапазон    
  value_Z = digitalRead(axis_Z);   // Считываем цифровое значение оси Z (кнопка)
  value_Z = value_Z ^ 1;// Инвертируем значение
//    lcd.setCursor(0,0); 
//    lcd.print(value_X, DEC); 
//    lcd.setCursor(5,0);
//  lcd.print(value_Y, DEC); 
//  Serial.print(" | Z: ");
//    lcd.setCursor(0,1);
//  lcd.print(value_Z, DEC);
  switch (value_Z) {   //обрабатываем нажатие кнопки, если нажата - останавливаем мотор/////////////////////////////////////////////////////
    case 1:
    lcd.setCursor(12,1);
    lcd.print("   ");
    lcd.setCursor(12,1);
    lcd.setCursor(5,1);
    lcd.print("   ");
    lcd.print(value_Z, DEC);
    lcd.setCursor(5,1);
    lcd.print(value_X, DEC);
    lcd.setCursor(0,1);
    lcd.print("   ");
    lcd.setCursor(0,1);
    lcd.print(value_Y, DEC);
// Останавливаем мотор повад на вывод ENB сигнал низкого уровеня. 
//  Состояние выводов "IN" роли не играет.
  analogWrite(ENB,0);
  if (value_Y = 2) 
  {
  switch (motorDirection)
  {
   case 0:
   motorDirection=1;
   digitalWrite (IN3, HIGH);//задаём направление вращения назад// смотря как у подключен мотор, если что перекинуть или исправить код
   digitalWrite (IN4, LOW);
   lcd.setCursor(0,0); 
   lcd.print("                ");
   lcd.setCursor(0,0);
   lcd.print("Backward-");
   break;
   case 1:
   motorDirection=0;
   digitalWrite (IN3, LOW);//задаём направление вращения на намотку// смотря как у подключен мотор, если что перекинуть или исправить код
   digitalWrite (IN4, HIGH);
   lcd.setCursor(0,0); 
   lcd.print("                ");
   lcd.setCursor(0,0);
   lcd.print(" Forward-");
   break;   
  }
  }
        break;
      default:
      // выполняется, если не выбрана ни одна альтернатива
      // default необязателен
      ;
  }
switch (value_Y) { //обрабатываем ось Игрик
    case 0://выполняется, когда var равно 0 - когда джойстик нажат вперёд
      if ( motor < 251) //чтобы не получилось 266 и больше
{
   motor =  motor + 5;//увеличиваем текущую скорость мотора
   analogWrite(ENB,motor);//подаём её на пин
   lcd.setCursor(8,0);
   lcd.print("       ");
   lcd.setCursor(8,0);
   lcd.print(motor);
   }
 
      break;
    case 1:
      //выполняется, когда var равно 1
      break;
    case 2:
    if (value_Z=0)
    {
       if ( motor > 4)//если не уменьшится до -1, то уменьшаем
       {
        motor =  motor - 5;
   analogWrite(ENB,motor);//подаём её на пин
   lcd.setCursor(8,0);
   lcd.print("       ");
   lcd.setCursor(8,0);
   lcd.print(motor);
        }
    }
    else
    {
      
    }
      break;
    default:
      // выполняется, если не выбрана ни одна альтернатива
      // default необязателен
      ;
  }
 
  delay(500);
 //дальше шилд
// На пару выводов "IN" поданы разноименные сигналы, мотор готов к вращаению
//digitalWrite (IN3, LOW);//  digitalWrite (IN3, HIGH);
//digitalWrite (IN4, HIGH);//  digitalWrite (IN4, LOW);
//  // подаем на вывод ENB управляющий ШИМ сигнал 
//  analogWrite(ENB,55);
//  delay(2000);
//  analogWrite(ENB,105);
//  delay(2000);
//  analogWrite(ENB,255);
//  delay(2000);
//  // Останавливаем мотор повад на вывод ENB сигнал низкого уровеня. 
//  // Состояние выводов "IN" роли не играет.
//  analogWrite(ENB,0);
//  delay(5000);
}

В общем это станок, поэтому так вот, станок для намотки катушек индуктивности, мне надо короче.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2019, 23:44
Ответы с готовыми решениями:

Проверка условия внутри цикла
while (wrong &lt; MAX_WRONG &amp;&amp; otvet != SLOVO) { cout &lt;&lt; &quot;\t&quot;&lt;&lt;HANGMAN_PICS; cout &lt;&lt;...

Аналог цикла while и проверки условия if
Задача состоит в том, чтобы вывести последовательность чисел Фибоначчи, пока ее числа меньше...

Условия после проверки Root доступа
Добрый день. При подключении через adb к андройду проверяю в bat файле наличие root доступа...

Написание условия проверки и вывод в файл
Такая проблема, есть текстовый файл c содержимым: LM = Logical Machine ID, Rc = Recoveries,...

3
Модератор
Эксперт по электронике
8734 / 6525 / 886
Регистрация: 14.02.2011
Сообщений: 22,839
21.02.2019, 23:57 2
Цитата Сообщение от Hretgir Посмотреть сообщение
if (value_Y = 2)
это не сравнение а присвоение
сравнение вот так
C++
1
if (value_Y == 2)
1
366 / 119 / 3
Регистрация: 25.01.2012
Сообщений: 4,592
Записей в блоге: 62
22.02.2019, 00:09  [ТС] 3
ардуина типа - "ням-ням, давай ещё модулей, нефиг меня кодом кормить".

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
это не сравнение а присвоение
сравнение вот так
спасибо, я вообще в этом синтаксисе нуб, выручили.
по сравнению с паскалем синтаксис - вырви глаз.
Некоторые ругаются на интерфейсы KisSlicer или Blender, а по мне так это самые классные программы, но Си - вырви глаз.
Цитата Сообщение от ValeryS Посмотреть сообщение
это не сравнение а присвоение
сравнение вот так
спасибо ещё раз - всё работает .
теперь с сменой направления - скорость в нули, пока не забыл.
просто по оси X занято всё - уже всё продумал, если влево - запоминает значение скорости, в право - устанавливает её.
0
Модератор
Эксперт по электронике
8734 / 6525 / 886
Регистрация: 14.02.2011
Сообщений: 22,839
22.02.2019, 08:10 4

Не по теме:

Цитата Сообщение от Hretgir Посмотреть сообщение
по сравнению с паскалем синтаксис - вырви глаз.
ну это, кто к чему привык

Не по теме:

мне вот не нравится := вместо =

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2019, 08:10
Помогаю со студенческими работами здесь

2 условия проверки для поля input
Здравствуйте! Подскажите как написать проверку поля, чтобы человек мог вводит только 10 или только...

Странное поведение проверки условия цикла
Пишу алгоритм сортировки замещением. Дали задание написать алгоритм не только для возрастающего...

Активация кнопки/ссылки после проверки условия
Добрый день. Сайт на joomla, подобных плагинов и модулей не нашел, поэтому пришлось обратится к...

Выполнение условия после проверки нескольких диапазонов
есть несколько n-диапазонов x1-y1,x2-y2,xn-yn.Если наше число не попадает ни в один диапазон то...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru