Проблема с использованием последовательного цикла

arduino-uno programming ultrasonics

Поэтому я создал этот проект, чтобы светодиод мигал с постоянной скоростью всякий раз, когда программа работает. Первый светодиод (зеленый) будет мигать все быстрее и быстрее по мере приближения объекта к датчику. Второй светодиод (синий(в коде обозначается как белый)) должен постоянно мигать. Светодиод (синий) мигает только тогда, когда мой ультразвуковой датчик имеет что - то в пределах досягаемости. Я хотел бы сделать так, чтобы он мигал независимо от обстоятельств. Это, вероятно, что - то очевидное, что я упускаю-извините мою нуб-несс ПРИМЕЧАНИЕ: если изображение схемы не является правильным (контакты не являются правильными), знайте, что оно правильно в реальной жизни, это то, что я получаю за то, что делаю быстрый макет и публикую его в 1:00 УТРА

#include "DHT.h";


#define DHTTYPE DHT22   // DHT Type is DHT 22 (AM2302)
#define DHTPIN 7       // DHT-22 Output Pin connection
#define trigPin 5
#define echoPin 6
#define beepPin 12
#define scalingfactor 10
#define blueLed 11

#define ledPin2 10

float hum;    // Сохраняет значение влажности в процентах
float temp;
float soundsp;
float soundum;
 DHT dht(DHTPIN, DHTTYPE);  // Инициализировать датчик DHT для обычного Arduino 16 МГц

int centi = 0;

const long erval = 500;

unsigned long previous = 0;
unsigned long lastduration = 0;
unsigned long duration = 0; //время, необходимое звуку для возврата
unsigned long maxtime = 2000;
unsigned long i = 1;  //переменная для определения фактического расстояния
unsigned long time2 = 0;
unsigned long time1 = 0;



void setup() {
  Serial.begin (9600);
  dht.begin();  //запуск датчиков влажности и температуры
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(beepPin, OUTPUT);
  pinMode(blueLed, OUTPUT);
}


void calculate(){
      // Вычислить скорость звука в М/С в соответствии с температурой
    soundsp = 331.4 + (0.606 * temp) + (0.0124 * hum);
    
    // Конвертировать в cm/us
    soundum = soundsp / 10000;
}

void logdistance() {
  digitalWrite(trigPin, HIGH); // отправить звуковой сигнал
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);  // stop sound signal
  duration = pulseIn(echoPin, HIGH);  // listen for sound signal
  centi = (duration* soundum)/2;   // определить задержку звукового сигнала в одном направлении
  maxtime = scalingfactor * centi;  // изменить max time в соответствии с расстоянием до предыдущего объекта
}


void beep() {
  digitalWrite(beepPin, HIGH);   // включите вывод звукового сигнала (или вывод светодиода).
  delay(60);  
  logdistance();   // снова запускаем функцию log distance, чтобы получить точные данные
  if (time2 - time1 < 30) {  
    delay((60 - (time2 - time1)));
  }
  digitalWrite(beepPin, LOW);  // выключить звуковой сигнал (или светодиод)
  i = 1;
    while (1) {
    if (i % 60 == 0) { 
      logdistance();  // запустите мою функцию log distance
    } 
    delay(1);
    ++i;  // добавьте единицу к i, чтобы сообщить, что мы записали расстояние
    if (i >= maxtime) { 
      break;
      } 
    }
}


void BlinkBlue (int interval){
   static long prevMill = 0;
   if (((long)millis() - prevMill) >= interval){ 
    prevMill = millis(); 
    digitalWrite(blueLed, !digitalRead(blueLed));
   }
}

void temps(){
  hum = dht.readHumidity();  // Получить значение влажности
  temp= dht.readTemperature();  // Получить значение температуры
}



void loop() {
  BlinkBlue(500); 
  beep();

  temps();
  calculate();




  //print results
  Serial.print (duration);
  Serial.print("c. ");
  Serial.print(centi);
  Serial.print(" ");
  Serial.print(temp);
  Serial.println(" ");
}

circuit

, 👍1

Обсуждение

Начните с примера " BlinkWithoutDelay` и перейдите оттуда., @Majenko

вы хотите сказать, что мне нужно сохранить журнал моих светодиодных миганий? Светодиод мигает и гаснет при обнаружении объекта. не помешает ли это процессу измерения расстояния?, @willbill

извините еще раз - определенно новичок в этом деле: я, вероятно, не беру в руки то, что вы кладете, @willbill

В IDE посмотрите на меню File -> Examples. Там где-то есть один под названием "BlinkWithoutDelay". Это научит вас, как сделать ваше светодиодное мигание "неблокирующим" образом, чтобы они не мешали друг другу., @Majenko

итак, я внес несколько изменений в проект. Я обновил саму проблему., @willbill

Посмотрите на “BlinkWithoutDelay” и примените эту логику к обоим светодиодам., @Edgar Bonet