Последовательный монитор не работает с пьезозуммером

serial led nodemcu piezo proximity

Поэтому я больше не вижу расстояния до датчика приближения, как только набираю код пьезозуммера. Я пробовал много вещей, но это не работает. Может кто-нибудь помочь мне это исправить?

int trigPin = D7;
int echoPin = D8;
int BLUE = D3; //D3 в синем цвете
int GREEN = D4;
int RED = D5;
int piezoPin = D10;

void setup() {// код кода gaat maar 1 keer
  Serial.begin (115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED, OUTPUT);

}

void loop() { //кодовое слово
  long duration, distance;
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH); // триггер отправляет сигнал
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // проверяет, сколько времени потребуется сигналу, чтобы пройти туда и обратно
  distance = (duration/2) / 29.1; 
  // поскольку сигнал отправляется, его необходимо разделить на два
  // скорость звука в воздухе составляет примерно 29 микросекунд на см, поэтому разделите 29.

    Serial.print(distance);
    Serial.println(" cm");

//расстояние отображается в см на последовательном мониторе

  delay(500);

   if ((distance > 100) && (distance <= 150)){ //это происходит, если расстояние от датчика находится в диапазоне от более 100 см до равного или меньше 150 см.
    analogWrite(BLUE, 0);
    analogWrite(GREEN, 255);
    analogWrite(RED, 0);

    tone(piezoPin, 1000, 1000); //тон длится 1 секунду
    delay(2000); // 2 секунды нет звука
    tone(piezoPin, 1000, 1000);
    delay(2000);

   }

   else if ((distance > 50) && (distance <= 100)){ //это происходит, если расстояние от датчика находится в диапазоне от более 50 см до равного или меньше 100 см.
    Serial.println("Ga weg!");

    analogWrite(BLUE, 0);
    analogWrite(GREEN, 102);
    analogWrite(RED, 252);

    tone(piezoPin, 1000, 700); // звуковой сигнал длится 0,7 секунды
    delay(1000); // 1 секунда без звука
    tone(piezoPin, 1000, 700);
    delay(1000);

  }

  else if ((distance >= 0) && (distance <= 50)){ //это происходит, если расстояние от датчика находится между большим или равным 0 см и равным или меньшим 50 см. .

    analogWrite(BLUE, 0);
    analogWrite(GREEN, 0);
    analogWrite(RED, 255);

    tone(piezoPin, 1000, 200); // звуковой сигнал длится 0,2 секунды
    delay(100); // 0,1 секунды нет звука
    tone(piezoPin, 1000, 200);
    delay(100);

  }

   else {
    analogWrite(BLUE, 0);
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);

 }

}

, 👍0

Обсуждение

Я использую NodeMCU, @Teddy Smit

но на NodeMCU нет контакта с надписью D10, @Juraj

Можете ли вы объяснить, что вы пробовали?, @MichaelT

Я удалил часть кода и проверил, не было ли что-то сломано в коде моего друга, и повторно загрузил Arduino., @Teddy Smit


1 ответ


2

Пин D10 NodeMcu — это io 1, который является контактом RX последовательного интерфейса esp8266. Последовательный порт находится на NodeMCU, подключенном к USB. Вывод на плате имеет маркировку RX.

D8 — это контакт 15 конфигурации загрузки. На плате должен быть предусмотрен раскрывающийся список. Выпадающее меню может нарушить входной сигнал на этом выводе. Используйте D6 (io 12) в качестве echoPin.

,

Я поменял штифт, и он вроде как работает, но не очень хорошо, потому что не дает нужного расстояния: он перемещается от 160 см до 0 см, ничего не перемещая..., @Teddy Smit

но это другая проблема, @Juraj

D8 — это IO 15. На его плате есть схема понижения напряжения. Я не знаю, может ли это помешать измерению., @Juraj

Извините, но я не знаю, что означает io. Я впервые программирую с помощью этой программы., @Teddy Smit

попробуйте D6 (io 12) вместо D8, @Juraj

@TeddySmit, прими ответ, чтобы отметить вопрос решенным, @Juraj