Здравствуйте уважаемые форумчане, захотел собрать управляемый страбоскоп
Код:
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)
то проверяется защелка
если значение защёлки ложно то присваиваем переменой time текущее время с начала работы
и закрываем защёлку присваивая ей значение правда
Снова проверяем горит ли светодиод, если он по прежнему не горит проверяем защёлку. Так как она приняла значение правда то выполняем исключение. И сравниваем разницу между значением 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);
но вешать процессор нельзя.