какие-то чудеса...
- Войдите на сайт для отправки комментариев
Пт, 04/11/2016 - 14:51
Не выполняется проверка на условие
30000 больше 20000
конечно!
акуеть!
const unsigned int skorost1=60; // включится если скорость вращения больше 60 об. в минуту.
const unsigned int skorost2=120;
const unsigned int skorost3=240;
const unsigned int skorost4=480;
volatile boolean start;
unsigned int drob,celoe;
unsigned int oboroti;
volatile long unsigned int razn =0;
volatile long unsigned int vrema =0;
unsigned long time;
unsigned long timeout;
void setup()
{
Serial.begin(9600);
DDRB=B00100000;
DDRC=B00001111;
PORTC=255;
attachInterrupt(0,sens,FALLING);
}
void loop()
{
if (razn >= 20000)
{ start=1;
}
else start=0 ;
Serial.print("start: ");
Serial.println (start);
if (start)
{
timeout=micros();
// if ((timeout-vrema) > 10000000) razn=100000000;
//delay(1000); // wait for a second
Serial.print("micrs: ");
time=micros();
Serial.println (time);
Serial.print("vrema: ");
Serial.println(vrema);
Serial.print("Razniza: ");
Serial.println(razn);
// выводим частоту
Serial.print("F: ");
oboroti=1000000000/(razn); // частота
celoe=1000000/(razn); // вычисляем целое значение частоты
Serial.print(celoe); // Отображаем целое значение частоты
Serial.print(".");
drob=(oboroti/1000); // вычисление долей,сначала выделяем тысячи
drob=drob*1000; // вычисление долей, теперь
drob=oboroti-drob;
if (drob <100) Serial.print("0");
if (drob<10) Serial.print("0");
Serial.println(drob);
Serial.print("RPM: ");
oboroti=60000000/razn; // преобразуем время в (обороты в минуту)
Serial.println(oboroti);
Serial.println("___________________");
// установка условия включения нагрузок
if (oboroti<skorost1) PORTC=B11111111;
if (oboroti>=skorost1 && oboroti<=skorost2) PORTC=B11111110;
if (oboroti>=skorost2 && oboroti<=skorost3) PORTC=B11111101;
if (oboroti>=skorost3 && oboroti<=skorost4) PORTC=B11111011;
if (oboroti>=skorost4 ) PORTC=B11110111;
}
}
// обработка прерывания с датчика скрости
void sens()
{
// noInterrupts();
razn=(micros()-vrema); //расчет
vrema =(micros());
start=1 ;
// interrupts();
}

Ой напутал немного 9996 получается по проверке условия больше 20000
Не выполняется проверка на условие
30000 больше 20000
конечно!
акуеть!
а что эти строки тоже в цикле программы ?
я там попутал 9996 больше 20000
получается у него
чудеса происходили из-за 91 строки
когда прерывание происходило после 31 строки но до 38