Вообщем тема такая есть фоторезистор на него светит лазер, как сделать так что бы при прерывании лазера к значению прибавлялась единичка(ну типа подсчет прерываний)?
Фоторезистор не сожгете? Лазер в постоянном режиме тоже проработает недолго. 1. обнуляем переменную n 2. читаем состояние пина A0 3. если показания больше 512, переходим к п. 2. иначе прибавляем счетчик на 1. 4. пауза 0,1 сек. 5. переходим к п. 2. Вообще фоторезистор срабатывает на любой яркий свет, не только от лазера.
Делаем простой счётчик. Заводим переменную int val = 0; Снимаем показания с фоторезистора. Если не светит - ничего не происходит. Светит val = val + 1;
Ну вы конечно молодцы ) я ж говорю любителю помогите, я конечно в коде примерно разбираюсь но все же, вот пример посмотрите годно ли int sensePin =0; int ledPin =9; void setup(){ Serial.begin(9600); } void loop(){ int val = 0; Serial.print(analogRead(sensePin)); Serial.print(" "); Serial.println(val); delay(500); if (sensePin > 700) { val += 1; } }
почти так, только у вас счетчик обнуляется каждые полсекунды val=0 надо вынести из loop. Код (Text): #define PHOTOSENSOR A0 // пин датчика света int sensivity = 512; // уровень чувствительности int count = 0; // счетчик void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(PHOTOSENSOR); // читаем фоторезистор Serial.println(sensorValue); // показываем значение if (sensorValue > sensivity) // сравниваем. Если больше, то... { count = count + 1; // увеличиваем счетчик Serial.print("Count: "); // показываем счетчик Serial.println(sensorValue); } delay(10); }
Код (Text): #define sense_PIN A0 int sense =0; int val = 0; void setup() { Serial.begin(9600); } void loop() { sense = analogRead(sense_Pin); Serial.print(sense); Serial.print(" "); Serial.println(val); delay(500); if (sense > 700) { val += 1; } }
а мы вот так: Код (Text): void loop() { do {Serial.println(++count);} while (analogRead(PHOTOSENSOR) > sensivity); delay(10); } Кто короче?
Ну я как бы примерно принцип понял но можно ли сделать так когда лазер прерывается + 1 а если по твоему коду то оно выдает столько значений , то есть например поднес я руку между лазером и резистором +1 убрал все так и осталось опять поднес, опять +1(в сумме 2) надеюсь все понятно написал
т.е. чтобы счетчик не увеличивался, если продолжаем держать руку? Тогда надо сравнивать не только разницу в яркости, но и учитывать, что рука уже была посчитана полсекунды назад. Примерно так (вживую не проверено): Код (Text): #define PHOTOSENSOR A0 // пин датчика света int sensivity = 512; // уровень чувствительности int count = 0; // счетчик boolean flag = false; // метка о том, что препятствие уже посчитали void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(PHOTOSENSOR); // читаем фоторезистор Serial.println(sensorValue); // показываем значение if ((sensorValue > sensivity) && (flag == false)) // сравниваем. Если больше И препятствие еще не зафиксировано { count++; // увеличиваем счетчик Serial.print("Count: "); // показываем счетчик Serial.println(sensorValue); flag = true; // ставим метку, что препятствие посчитано - пока она есть, счетчтик не увеличивать } if ((sensorValue < sensivity) && (flag == true)) // опять сравниваем. Если меньше И препятствие уже было зафиксировано { flag = false; // сбрасываем метку, т.е. следующее препятствие будет снова посчитано } delay(10); }
#define PHOTOSENSOR A0 // пин датчика света int sensivity = 700; // уровень чувствительности int count = -1; // счетчик boolean flag = false; // метка о том, что препятствие уже посчитали void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(PHOTOSENSOR); // читаем фоторезистор Serial.println(sensorValue); // показываем значение if ((sensorValue < sensivity) && (flag == false)) // сравниваем. Если больше И препятствие еще не зафиксировано { count++; // увеличиваем счетчик flag = true; // ставим метку, что препятствие посчитано - пока она есть, счетчтик не увеличивать } if ((sensorValue > sensivity) && (flag == true)) // опять сравниваем. Если меньше И препятствие уже было зафиксировано { flag = false; // сбрасываем метку, т.е. следующее препятствие будет снова посчитано } Serial.print("Count: "); // показываем счетчик Serial.println(count); delay(100); } Вот он идеальный счетчик проверенный на практике немного изменил код
со знаками сравнения моя промашка, признаю. В вашем коде счетчик показывается 10 раз в секунду, даже если он не менялся. У меня было не так. И зачем счетчик начинать от -1? Это же не будет соответствовать реальному количеству (всегда меньше на 1).
ну поменял на -1 я для того что бы при включении счетчика я сам мог выйти из помещения, эта же приблуда на дверь ставится), а 10 раз в секунду поставил т.к этого достаточно для меня а так конечно лучше 100 раз в секунду(10 что бы не забивать лог), и да я дуда еще светодиоды влепил для подсчета без компьютера