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

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

  1. Shuhandann

    Shuhandann Нуб

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

    b707 Гуру

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

    Shuhandann Нуб

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

    DIYMan Гуру

    Объявить переменную, например, так:
    Код (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 Гуру

    Как вам нужно - так и задавайте, вы же лучше знаете свою задачу ;)
     
  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 Гуру

    Вам дали ВСЕ рекомендации, и даже пример. Делайте.
     
  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 Гуру

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

    fogary Гик

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