Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 30.12.2018, 11:03   #1 (permalink)
AmGadm
Member
 
Аватар для AmGadm
 
Регистрация: 22.04.2010
Сообщений: 320
Записей в дневнике: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 363
По умолчанию 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);
но вешать процессор нельзя.
AmGadm вне форума   Ответить с цитированием

Старый 30.12.2018, 11:03
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Просмотрите содержимое этих ссылок, может быть что то найдете

Законченный проект на Arduino
RGB Neopixel и Arduino
Arduino

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:04.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.