скетч для шагового двигателя

Тема в разделе "Arduino & Shields", создана пользователем Shuhandann, 14 ноя 2018.

  1. Shuhandann

    Shuhandann Нуб

    Сейчас делаю проект в котором управляю шаговым двигателем через фоторезистор.Подскажите как сделать сделать что бы шаговый двигатель сделал действие один раз до изменения условия в функции loop?
     
  2. b707

    b707 Гуру

    создать переменную, в которой запоминать. что действие уже сделано.
     
    DIYMan нравится это.
  3. Shuhandann

    Shuhandann Нуб

    а как это сделать?
     
  4. DIYMan

    DIYMan Guest

    Объявить переменную, например, так:
    Код (C++):
    bool flag = false;

    void loop()
    {
        if(!flag)
        {
          // действие ещё не выполнялось
          flag = true;
         // тут выполняем действие
        }

       if(условие)
      {
        // надо сбросить флаг
        flag = false;
      }
    }
     
  5. Shuhandann

    Shuhandann Нуб

    а как мне задать и для первого действия определеноое условие?
     
  6. Shuhandann

    Shuhandann Нуб

    Код (C++):
    #include <Stepper.h>
    const int stepsPerRevolution = 512;

    Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 );
    int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор
    unsigned int sensorValue = 0;



    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    myStepper.setSpeed(20);
    }

    void loop() {
      // put your main code here, to run repeatedly:
        sensorValue = analogRead(PhotosensorPin);
        int stoporok = sensorValue ;
     
     
      if (sensorValue>500)myStepper.step(stepsPerRevolution);
     

      if(sensorValue<500)myStepper.step(-stepsPerRevolution);






      Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024)
      Serial.println("");
      delay(500);
    }
    вот мой скетч
     
  7. DIYMan

    DIYMan Guest

    Как вам нужно - так и задавайте, вы же лучше знаете свою задачу ;)
     
  8. Shuhandann

    Shuhandann Нуб

    Код (C++):
    #include <Stepper.h>
    const int stepsPerRevolution = 512;
    Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 );
    int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор
    unsigned int sensorValue = 0;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    myStepper.setSpeed(20);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      sensorValue = analogRead(PhotosensorPin);  
      if (sensorValue>500)myStepper.step(stepsPerRevolution);
      if(sensorValue<500)myStepper.step(-stepsPerRevolution);
      Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024)
      Serial.println("");
      delay(500);
    }
    Помогите переделать этот скетч
    ( мне нужно что бы первое условие выполнилось один раз и могло выполнится один раз только поле того когда выполнится второе условие)
     
  9. попробуй уже начать думать.
     
    DIYMan нравится это.
  10. DIYMan

    DIYMan Guest

    Вам дали ВСЕ рекомендации, и даже пример. Делайте.
     
  11. Shuhandann

    Shuhandann Нуб

    Код (C++):
    #include <Stepper.h>
    bool flag = false;
    const int stepsPerRevolution = 512;
    Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 );
    int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор
    unsigned int sensorValue = 0;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    myStepper.setSpeed(20);
    }
    void loop() {

      // put your main code here, to run repeatedly:
      sensorValue = analogRead(PhotosensorPin);
      Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024)
       if(!flag){
       if(sensorValue>500)
       {myStepper.step(stepsPerRevolution);
       flag = true;
       }
     
      if(sensorValue<500)
      {myStepper.step(-stepsPerRevolution);
       flag = false;}
      }
      delay(500);
    }
    Поможете найти ошибку?
     
  12. DetSimen

    DetSimen Guest

    Нет, патамуш, она, видимо, секретная.
     
  13. fogary

    fogary Гик

    Если выполнится условие if(sensorValue>500), то станет flag = true и в следующих вызовах loop() проверки выполняться не будут - т. к. проверки стоят внутри if(!flag), а ее резeльтат - false.