Как сделать остановку программы после количества итераций - PullRequest
0 голосов
/ 23 ноября 2018

Итак, у меня здесь есть моя программа, я пытаюсь создать программу, в которой мы вручную вытаскиваем провод и устанавливаем его обратно, каждый раз, когда я вытаскиваю его, это 1 итерация, а помещение обратно в 1 итерацию,Когда он подключен к порту, внешний светодиод гаснет, а при его извлечении внешний светодиод горит.Я должен быть в состоянии сделать это в течение 10 итераций и остановиться, когда доберусь туда.

Проблема в том, что я включаю while (true);оператор In, мой внешний светодиод не работает, но без этого оператора программа работает так, как я хочу, за исключением того, что она не перестает работать после 10 итераций, любая помощь приветствуется!

#include<EEPROM.h>
const int LED = 12;
const int SWITCH = 4;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  pinMode(LED, OUTPUT);           //LED is always outputting information
  pinMode(LED_BUILTIN, OUTPUT);   //Built in LED is always outputting information
  pinMode(SWITCH, INPUT_PULLUP);  //Switch inputs value when in/out of ground
}

void loop() {
  // put your main code here, to run repeatedly:
  int addr = 0;     //Declaring variables
  int count = 0;
  int seconds;

  if (digitalRead(SWITCH) == LOW) {             //If wire starts in ground, record values
    Serial.println("----Recording----");

    while (count <= 10) {                       //While count value is less than or equal to 10
      if (digitalRead(SWITCH) == LOW) {         //When wire is connected to 4
        count = count + 1;                      //Add one to count in each iteration
        digitalWrite(LED, LOW);                 //LED light is off in this position
        delay(50);                              //Checks switch state every 0.05 seconds
      }
      else if (digitalRead(SWITCH) == HIGH) {   //When wire isnt connected to 4
        count = count + 1;                      //Add one to count in each iteration
        digitalWrite(LED, HIGH);                //LED light is on in this position
        delay(50);                              //Checks switch state every 0.05 seconds
      }
          while (true);
    }
  }
}

1 Ответ

0 голосов
/ 23 ноября 2018

Почему не работает?Давайте немного перепишем ваш код:

    while (count <= 10) {
      count = count + 1;
      digitalWrite(LED, digitalRead(SWITCH));
      delay(50);

      while (true); // aaand kill it
    }

Я пропускаю условие гонки, если первое цифровое чтение возвращает HIGH, а затем второе LOW (не будет ждать 50 мс до остановки)

Я бы ожидал что-то вроде подсчета изменений в булавке или около того:

    while (count <= 10) {
      byte = digitalRead(SWITCH);
      if (byte != digitalRead(LED))
      { 
        count = count + 1;
        digitalWrite(LED, byte);
      }
      delay(50);
    }
    while (true); // aaand kill it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...