• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Arduino: проблема с milis()

  • Автор темы Автор темы AmGadm
  • Дата начала Дата начала

AmGadm

Новые
Регистрация
22 Апр 2010
Сообщения
320
Реакции
6
Баллы
0
Arduino: проблема с milis()

Здравствуйте уважаемые форумчане, захотел собрать управляемый страбоскоп
Код:
int ledPin = 11;
unsigned long time;
bool flag;
int flash=10;

void setup() {
  flag =false;
  ledPin = LOW;
Serial.begin(9600); // Инициализируем общение c компьютером на скорости 9600
pinMode(ledPin, OUTPUT);
}
 
void loop() {

long sensorValue1 = analogRead(A0);// Считываем значение с аналогового порта
sensorValue1 = map(sensorValue1,0,1023,5990,119990);//Приводим значение к показателям от 5990 до 119990
int sensorValue2 = analogRead(A1);// Считываем значение с аналогового порта
long sensorValue = sensorValue1 + sensorValue2;
sensorValue=constrain(sensorValue,5990,119990);// Обрезаем лишки
Serial.println(sensorValue);// Печатаем значение в мониторе порта

  if(digitalRead(ledPin) == LOW){
    if(flag == false){
      time=micros();
      flag=true;
    }
    else{
      if(micros()-time > sensorValue){
      digitalWrite(ledPin, HIGH);
      flag = false;  
      }
    }
  }
  else if (digitalRead(ledPin) == HIGH){
    if(flag == false){
      time=micros();
      flag=true;
    }
    else{
      if(micros()-time > 10){
      digitalWrite(ledPin, LOW);
      flag=false;  
      }
    }
  }
}

И опять завис с milis и не могу понять почему светодиод вообще не реагирует
Код:
  if(digitalRead(ledPin) == LOW){
    if(flag == false){
      time=micros();
      flag=true;
    }
    else{
      if(micros()-time > sensorValue){
      digitalWrite(ledPin, HIGH);
      flag = false;  
      }
    }
  }
  else if (digitalRead(ledPin) == HIGH){
    if(flag == false){
      time=micros();
      flag=true;
    }
    else{
      if(micros()-time > 10){
      digitalWrite(ledPin, LOW);
      flag=false;  
      }
    }
Все просто если светодиод не горит
Код:
if(digitalRead(ledPin) == LOW)
то проверяется защелка
Код:
if(flag == false)
если значение защёлки ложно то присваиваем переменой time текущее время с начала работы
Код:
time=micros();
и закрываем защёлку присваивая ей значение правда
Код:
flag=true;
Снова проверяем горит ли светодиод, если он по прежнему не горит проверяем защёлку. Так как она приняла значение правда то выполняем исключение. И сравниваем разницу между значением time и текущим значением milis() c заданной переменной
Код:
if(micros()-time > sensorValue)
если условие соблюдается то зажигаем светодиод
Код:
digitalWrite(ledPin, HIGH);
и защёлка принимает значение лож для последующей работы с ней.
Так же построено если светодиод горит.
На delay() всё работает.
даже вот так
Код:
  if(digitalRead(ledPin) == LOW){
    if(flag == false){
      time=micros();
      flag=true;
    }
    else{
      if(micros()-time > sensorValue){
      digitalWrite(ledPin, HIGH);
      flag = false;  
      }
    }
  }
  else{
  delayMicroseconds(10);                        
  digitalWrite(ledPin, LOW);
но вешать процессор нельзя.
 
Назад
Сверху