Прошу помощи с циклами (тапками не бейте, я новичек)

olegovich80
Offline
Зарегистрирован: 07.01.2017

Доброго времени суток всем форумчанам - ардуиноводам.

Суть вопроса следующая:

Есть ардуинка, есть оптический датчик, есть реле и 5 кнопок.

Всё добро сидит на цифровых входах - выходах.

4 кнопки отвечают за запуск циклов подпрограмм, 5-я за остановку.

1. При нажатии кнопки 1 - должен запуститься следующий цикл: сработал датчик - выдержка 15 мс - сработало реле на 150 мс. цикл должен длиться 1800 срабатываний датчика или 15 минут.

2. При нажатии кнопки 2 - должен запуститься следующий цикл: сработал датчик - выдержка 15 мс - сработало реле на 200 мс. цикл должен длиться 1800 срабатываний датчика или 15 минут.

3. При нажатии кнопки 3 - должен запуститься следующий цикл: сработал датчик - выдержка 15 мс - сработало реле на 250 мс. цикл должен длиться 1800 срабатываний датчика или 15 минут.

4. При нажатии кнопки 4 - должен запуститься следующий цикл: сработал датчик - выдержка 15 мс - сработало реле на 300 мс. цикл должен длиться 1800 срабатываний датчика или 15 минут.

5. При нажатии кнопки 5 - должен остановиться любой выполняемый цикл.

Состояние контроллера отслеживаю по монитору порта.

В дальнейшем хочу добавить LCD дисплей 16х2 по I2C, что бы он показывал выполняемый цикл и время до его окончания.

Все это будет построенно на китайской про-мини или меге (они, просто, есть в наличии)

Вот, что я наваял.

[code]
 
int sense = 2;
 
int magnet = 8;
 
int speed1 = 3;
 
int speed2 = 4;
 
int speed3 = 5;
 
int speed4 = 6;
 
int stop1 = 7;
 
 
void setup() {
 
  pinMode(magnet, OUTPUT);
 
  pinMode(sense, INPUT);
 
  pinMode(speed1, INPUT);
 
  pinMode(speed2, INPUT);
 
  pinMode(speed3, INPUT);
 
  pinMode(speed4, INPUT);
 
  x = 0;
 
  Serial.begin(57600);
 
}
 
void loop() {
 
 
 
  if (digitalRead(speed1) == HIGH)
 
  {
 
    while (x < 1800) {
      if (digitalRead(sense) == HIGH) {
        delay(15);
        digitalWrite(magnet, HIGH);
        delay(150);
        digitalWrite(magnet, LOW);
        Serial.println(sense);
        Serial.println(magnet);
        Serial.println(speed1);
 
      }
 
      else {
 
 
 
      }
      x++;
    }
  }
 
 
 
  else if (digitalRead(speed2) == HIGH)
 
 
  {
 
    while (x < 1800) {
      if (digitalRead(sense) == HIGH) {
        delay(15);
        digitalWrite(magnet, HIGH);
        delay(200);
        digitalWrite(magnet, LOW);
        Serial.println(sense);
        Serial.println(magnet);
        Serial.println(speed2);
 
      }
 
      else {
 
 
 
      }
      x++;
    }
  }
 
 
 
  else if (digitalRead(speed3) == HIGH)
 
 
  {
 
    while (x < 1800) {
      if (digitalRead(sense) == HIGH) {
        delay(15);
        digitalWrite(magnet, HIGH);
        delay(250);
        digitalWrite(magnet, LOW);
        Serial.println(sense);
        Serial.println(magnet);
        Serial.println(speed3);
 
      }
 
      else {
 
 
 
      }
      x++;
    }
  }
 
 
 
  else if (digitalRead(speed4) == HIGH)
 
 
  {
 
    while (x = < 1800) {
      if (digitalRead(sense) == HIGH) {
        delay(15);
        digitalWrite(magnet, HIGH);
        delay(300);
        digitalWrite(magnet, LOW);
        Serial.println(sense);
        Serial.println(magnet);
        Serial.println(speed4);
 
      }
 
      else {
 
 
 
      }
      x++;
    }
  }
 
 
}
 
else {}
 
}
[/code]
 
Сие чудо ругается на переменную "Х", да и других ошибок , я думаю, много.
Прошу, помогите пожалуйста написать правильную программу, если можно с пояснениями и дисплеем.
 
Заранее спасибо за помощь. 
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

olegovich80 пишет:

Сие чудо ругается на переменную "Х", 

 
Естественно, потому что её объявить надо в самом вверху, рядом с другими переменными. И не "Х", а "х". Регистр букв имеет значение.
Booooooot
Offline
Зарегистрирован: 08.01.2017

Как минимум ты не огласил переменную Х. int x = 0; что то типу этого...

olegovich80
Offline
Зарегистрирован: 07.01.2017

Получилось.

Спасибо. 

Сегодня попробую.