@iilinegor

Присвоение значений выводам в arduino

Проблема заключается в том, что 2 части кода по отдельности работают корректно, а вместе значения 10 и 13 пина берутся с последнего присвоения.

#include <Bounce.h>
Bounce right_Pin = Bounce( 11,5 ); 
Bounce left_Pin = Bounce( 12,5 ); 

int right;
int left;

void setup() {
  pinMode(10, OUTPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600); 
}

void loop() {
  right_Pin.update ( );
  left_Pin.update ( );

  right = right_Pin.read();
  left = left_Pin.read();

  digitalWrite(10, HIGH);
  digitalWrite(13, LOW);

  if (right == HIGH ) {
    Serial.print("RIGHT!\n" );
  }

  if (left == HIGH) {
    Serial.print("LEFT!\n" );
  }

  digitalWrite(13, HIGH);
  digitalWrite(10, LOW);
  delay(30);

  if (left == HIGH && right == HIGH)
  {
    Serial.print("DOUBLE!\n" );
  }
delay(100);
}
  • Вопрос задан
  • 3270 просмотров
Решения вопроса 1
@iilinegor Автор вопроса
Нашёл решение: сделать через аналоговые выходы

#include <Bounce.h>
Bounce right_Pin = Bounce( 11,5 ); 
Bounce left_Pin = Bounce( 12,5 ); 

int right;
int left;

void setup() {
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600); 
}

void loop() {

  right_Pin.update ( );
  left_Pin.update ( );

  right = right_Pin.read();
  left = left_Pin.read();

  delay(100);

  if (analogRead(A0) > 900 || analogRead(A1) > 900) {
    Serial.print("RIGHT!\n" );
    digitalWrite(10, HIGH);
    tone(11, 300, 200);
  }

  delay(100);
  digitalWrite(10, LOW);

  if (analogRead(A0) > 600 && analogRead(A0) < 700 &&
    analogRead(A1) > 600 && analogRead(A1) < 700) {
    Serial.print("DOUBLE!\n" );
    digitalWrite(9, HIGH);
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
А left и right обнуляются каждый раз?
Ответ написан
gorbln
@gorbln
Инженер-разработчик
Ваш вопрос непонятен чуть более чем полностью.
Какие 2 части? Что значит работают корректно?
Что бы хотелось получить и что не получается?

Если что-то работает не так как задумывалось, можно в качестве превентивной меры поправить вот это:
if (left == HIGH && right == HIGH)
на вот это:
if ((left == HIGH) && (right == HIGH))
А то что-то я не припомню, какой приоритет операций в ардуине.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы