Кодирование 2 28BYJ-48 5V D C (двигатель) с LJ12A3-4-Z / AX (датчик) - PullRequest
0 голосов
/ 06 марта 2020

Я закодировал все, и все работает правильно. Я пытаюсь сделать утверждение верно / неверно, если двигатели вращаются по часовой стрелке или против часовой стрелки, в зависимости от того, что читает датчик, я получаю эту ошибку, когда пытаюсь сделать (n) оператор if / else.
Другими словами, я пытаюсь сделать так, чтобы boolean = 0 в соответствии с тем, что чувствует датчик (если он что-то чувствует = 1, если он не = 0). Конец кода - важная часть, но мне пришлось опубликовать весь код, чтобы вы знали, что такое int.

int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13; 
int _step = 0;
int Pin5 = 9;
int Pin6 = 8;
int Pin7 = 7;
int Pin8 = 6; 
int _stip= 5;
int sensor = 3;
boolean dir = HIGH;//LOW=clockwise, HIGH=counter clockise 
void setup()
{
  pinMode(Pin1, OUTPUT);
  pinMode(Pin2, OUTPUT);
  pinMode(Pin3, OUTPUT);
  pinMode(Pin4, OUTPUT);
  pinMode(Pin5, OUTPUT);
  pinMode(Pin6, OUTPUT);
  pinMode(Pin7, OUTPUT);
  pinMode(Pin8, OUTPUT);
  pinMode(sensor, INPUT);
}

  void loop ()
  {
    switch (_step){
      case 0:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin4, LOW);
      digitalWrite(Pin3, LOW);
      digitalWrite(Pin4, HIGH);
      break;
      case 1:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
      digitalWrite(Pin4, HIGH);
      break;
      case 2:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
      digitalWrite(Pin4, LOW);
      break;
      case 3:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
      digitalWrite(Pin4, LOW);
      break;
      case 4:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
      digitalWrite(Pin4, LOW);
      break;
      case 5:
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
      digitalWrite(Pin4, LOW);
      break;
      case 6:
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
      digitalWrite(Pin4, LOW);
      break; 
      default:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin4, LOW);
      digitalWrite(Pin3, LOW);
      digitalWrite(Pin4, LOW);
      break;
    }
      if(dir){
        _step++; 
        }else{
          _step--;
        }
          if(_step>7){
            _step=0;
          }
            if(_step<0){
              _step=7;
              }
              delay(1);
               switch (_step){
      case 0:
      digitalWrite(Pin5, LOW);
      digitalWrite(Pin6, LOW);
      digitalWrite(Pin7, LOW);
      digitalWrite(Pin8, HIGH);
      break;
      case 1:
      digitalWrite(Pin5, LOW);
      digitalWrite(Pin6, LOW);
      digitalWrite(Pin7, HIGH);
      digitalWrite(Pin8, HIGH);
      break;
      case 2:
      digitalWrite(Pin5, LOW);
      digitalWrite(Pin6, LOW);
      digitalWrite(Pin7, HIGH);
      digitalWrite(Pin8, LOW);
      break;
      case 3:
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
      digitalWrite(Pin4, LOW);
      break;
      case 4:
      digitalWrite(Pin5, LOW);
      digitalWrite(Pin6, HIGH);
      digitalWrite(Pin7, LOW);
      digitalWrite(Pin8, LOW);
      break;
      case 5:
      digitalWrite(Pin5, HIGH);
      digitalWrite(Pin6, HIGH);
      digitalWrite(Pin7, LOW);
      digitalWrite(Pin8, LOW);
      break;
      case 6:
      digitalWrite(Pin5, HIGH);
      digitalWrite(Pin6, LOW);
      digitalWrite(Pin7, LOW);
      digitalWrite(Pin8, LOW);
      break; 
      default:
      digitalWrite(Pin5, LOW);
      digitalWrite(Pin6, LOW);
      digitalWrite(Pin7, LOW);
      digitalWrite(Pin8, LOW);
      break;
    }
      if(dir){
        _stip++; 
        }else{
          _stip--;
        }
          if(_stip>7){
            _stip=0;
          }
            if(_step<0){
              _stip=7;
              }
              delay(1);

  if (digitalRead(sensor) == HIGH){
    digitalWrite(dir,HIGH);
  }
  else{
  digitalWrite(dir,LOW);

  }
  }          

1 Ответ

1 голос
/ 06 марта 2020

Поэтому я решил начать интерактивный ответ, потому что комментирование просто не сокращает его здесь.
На первом шаге я просто исправлю все в вашем коде, что вызывает у меня сомнения.
Затем я приглашаю вас чтобы прокомментировать и объяснить, какие из моих изменений вам не ясны или есть какие-либо, которые вы активно отклоняете.

Избиратели, я знаю, что это еще не фактический ответ, я следую чему-то вроде описанного здесь компромисса:
Как мне задавать вопросы на домашнее задание и отвечать на них?
Т.е. до тех пор, пока ОП показывает усилия и общение, я готов их вести.
Если это не сработает, я удалю в любом случае, этот ответ разочарован.
Итак, если возможно, пожалуйста, уделите мне немного времени, пока я пытаюсь наладить здесь сотрудничество.

Ниже приведена отредактированная версия вашего кода, пожалуйста, дайте мне знать, какая из мои изменения вы не можете принять. Обратите внимание, что внесенные мною изменения фактически не учитывают ваш код, основываясь только на рефлексах, отточенных на опыте.
В случае, если я не случайно исправил вашу проблему (разве это не смешно?), Пожалуйста, опишите подробно эта проблема Тогда мы можем попытаться это исправить.

int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13; 
int current_step = 0; /* no prefix "_" */
int Pin5 = 9;
int Pin6 = 8;
int Pin7 = 7;
int Pin8 = 6; 
/* int _stip= 5; I just do not belive in this... */
int sensor = 3;
int dir = 1; //0=clockwise, 1=counter clockwise 
/* maybe boolean is type in your environment, maybe not; 
    and I do not trust HIGH/LOW to be boolean */
void setup()
{
    pinMode(Pin1, OUTPUT);
    pinMode(Pin2, OUTPUT);
    pinMode(Pin3, OUTPUT);
    pinMode(Pin4, OUTPUT);
    pinMode(Pin5, OUTPUT);
    pinMode(Pin6, OUTPUT);
    pinMode(Pin7, OUTPUT);
    pinMode(Pin8, OUTPUT);
    pinMode(sensor, INPUT);
}

void loop ()
{
    switch (current_step)
    {
    case 0:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, LOW); /* 2, not 4 */
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, HIGH);
        break;
    case 1:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, LOW);
        digitalWrite(Pin3, HIGH);
        digitalWrite(Pin4, HIGH);
        break;
    case 2:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, LOW);
        digitalWrite(Pin3, HIGH);
        digitalWrite(Pin4, LOW);
        break;
    case 3:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, HIGH);
        digitalWrite(Pin3, HIGH);
        digitalWrite(Pin4, LOW);
        break;
    case 4:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, HIGH);
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, LOW);
        break;
    case 5:
        digitalWrite(Pin1, HIGH);
        digitalWrite(Pin2, HIGH);
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, LOW);
        break;
    case 6:
        digitalWrite(Pin1, HIGH);
        digitalWrite(Pin2, LOW);
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, LOW);
        break; 
    case 7: /* 7 is one of the allowed values, do not count from 0 to "oops" */
        digitalWrite(Pin1, HIGH);
        digitalWrite(Pin2, LOW);
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, HIGH); /* HLLH was missing to close the loop */
        break; 
    default:
        digitalWrite(Pin1, LOW);
        digitalWrite(Pin2, LOW); /* 2, not 4 */
        digitalWrite(Pin3, LOW);
        digitalWrite(Pin4, LOW);
        break;
    }
    if(dir)
    {
        current_step++; 
    } else
    {
        current_step--;
    }
    if(current_step>7)
    {
        current_step=0;
    }
    if(current_step<0)
    {
        current_step=7;
    }
    delay(1); /* I don't think this delay is really necessary... */
    switch (current_step)
    {
    case 0:
        digitalWrite(Pin5, LOW);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, HIGH);
        break;
    case 1:
        digitalWrite(Pin5, LOW);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, HIGH);
        digitalWrite(Pin8, HIGH);
        break;
    case 2:
        digitalWrite(Pin5, LOW);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, HIGH);
        digitalWrite(Pin8, LOW);
        break;
    case 3:
        digitalWrite(Pin5, LOW);  /* 1,2,3,4 ? Seriously? */
        digitalWrite(Pin6, HIGH);
        digitalWrite(Pin7, HIGH);
        digitalWrite(Pin8, LOW);
        break;
    case 4:
        digitalWrite(Pin5, LOW);
        digitalWrite(Pin6, HIGH);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, LOW);
        break;
    case 5:
        digitalWrite(Pin5, HIGH);
        digitalWrite(Pin6, HIGH);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, LOW);
        break;
    case 6:
        digitalWrite(Pin5, HIGH);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, LOW);
        break; 
    case 7: /* poor 7, forgotten again */
        digitalWrite(Pin5, HIGH);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, HIGH); /* closing the loop with HLLH */
        break; 
    default:
        digitalWrite(Pin5, LOW);
        digitalWrite(Pin6, LOW);
        digitalWrite(Pin7, LOW);
        digitalWrite(Pin8, LOW);
        break;
    }
    delay(1);

    if (digitalRead(sensor) == HIGH)
    {
        dir=1; /* dir is a variable, not a port */
    } else
    {
        dir=0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...