Датчик использовать для понимания “входа” и “выхода человека”. Т.е. замеры через 0,3 секунды если человек появляется в поле зрения и приближается к датчику, то это +1. Если же он появляется у некоторой “минимальной” границы поля зрения, а потом уходит за “макимальную” то это -1.
Так получится сразу и подсчет сколько в данный момент людей внутри
#define PIN_ECHO 2
#include<LiquidCrystal.h>
// Есть идея добавить звук, чтобы, когда заходил человек, был звуковой сигнал //
int kolichestvo=0;
int rasstoyanie,cm;
LiquidCrystal lcd(12, 11, 5, 4, 9, 10);
bool diapozon;
int count=5; // Учитель задаёт макс. кол-во студентов
void setup()
{
Serial.begin (9600);
lcd.begin(16, 2);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
}
void loop()
{
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
rasstoyanie = pulseIn(PIN_ECHO, HIGH);
cm = (rasstoyanie / 2) / 29.1;
if (cm <=320)
{ diapozon = true; }
else
{ diapozon = false; }
if (diapozon == true)
{ lcd.setCursor(0,0);
lcd.print(kolichestvo);
kolichestvo++;
analogWrite(6, 255);
}
else
{ analogWrite(6, 0);}
delay(1500);
if (kolichestvo == count)
{ lcd.setCursor(0,0);
lcd.clear();
lcd.print("Max studentov!");
delay(2500);
kolichestvo = 0;
}
lcd.clear();
}
И что? Это учебный материал для нас, чтобы мы учились? Спасибо!
Попробовал запустить, чтобы изучить. Чёта компилятор обругался, не подскажете, что не так?
Ругань
...\kaka2.ino: In function 'void setup()':
kaka2:13:11: error: 'PIN_TRIG' was not declared in this scope
pinMode(PIN_TRIG, OUTPUT);
^~~~~~~~
...\kaka2\kaka2.ino:13:11: note: suggested alternative: 'PIN_A3'
pinMode(PIN_TRIG, OUTPUT);
^~~~~~~~
PIN_A3
D:\GoogleD\Soft\Kaka\kaka2\kaka2.ino: In function 'void loop()':
kaka2:19:16: error: 'PIN_TRIG' was not declared in this scope
digitalWrite(PIN_TRIG, LOW);
^~~~~~~~
...\kaka2\kaka2.ino:19:16: note: suggested alternative: 'PIN_A3'
digitalWrite(PIN_TRIG, LOW);
^~~~~~~~
PIN_A3
'PIN_TRIG' was not declared in this scope
Блин, а у меня по другому ругается. ((
Это же надо - какой талантливый код!!! ))
Ругань 2
C:\Users\1\AppData\Local\Temp\arduino_modified_sketch_366851\sketch_dec22a.ino: In function 'void setup()':
sketch_dec22a:13:9: error: 'PIN_TRIG' was not declared in this scope
pinMode(PIN_TRIG, OUTPUT);
^~~~~~~~
C:\Users\1\AppData\Local\Temp\arduino_modified_sketch_366851\sketch_dec22a.ino:13:9: note: suggested alternative: 'PIN_PD7'
pinMode(PIN_TRIG, OUTPUT);
^~~~~~~~
PIN_PD7
C:\Users\1\AppData\Local\Temp\arduino_modified_sketch_366851\sketch_dec22a.ino: In function 'void loop()':
sketch_dec22a:19:14: error: 'PIN_TRIG' was not declared in this scope
digitalWrite(PIN_TRIG, LOW);
^~~~~~~~
C:\Users\1\AppData\Local\Temp\arduino_modified_sketch_366851\sketch_dec22a.ino:19:14: note: suggested alternative: 'PIN_PD7'
digitalWrite(PIN_TRIG, LOW);
^~~~~~~~
PIN_PD7
exit status 1
'PIN_TRIG' was not declared in this scope
Придумал, как реализовать это с 2 датчиками:
Срабатывает 1 датчик на вход .
Происходит задержка 5 секунд.
Второй датчик не успевает сработать.
Срабатывает датчик 2 на выход
Происходит задержка 5 секунд.
Первый датчик не успевает сработать.
#define PIN_TRIGvhod 3
#define PIN_ECHOvhod 2
#define PIN_TRIGvihod 13
#define PIN_ECHOvihod 8
#include<LiquidCrystal.h>
// Есть идея добавить звук, чтобы, когда заходил человек, был звуковой сигнал //
int kolichestvo=0;
int rasstoyanie,cm;
int minrange = 50;
int maxrange = 250;
LiquidCrystal lcd(12, 11, 5, 4, 9, 10);
bool diapozon;
int count=5; // Учитель задаёт макс. кол-во студентов
void setup()
{
Serial.begin (9600);
lcd.begin(16, 2);
pinMode(PIN_TRIGvhod, OUTPUT);
pinMode(PIN_ECHOvihod, INPUT);
pinMode(PIN_TRIGvihod, OUTPUT);
pinMode(PIN_ECHOvhod, INPUT);
}
void loop()
{
digitalWrite(PIN_TRIGvhod, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIGvhod, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIGvhod, LOW);
rasstoyanie = pulseIn(PIN_ECHOvhod, HIGH);
cm = (rasstoyanie / 2) / 29.1;
if (cm < maxrange & cm > minrange)
{ diapozon = true; }
else
{ diapozon = false; }
if (diapozon == true)
{ lcd.setCursor(0,0);
kolichestvo++;
lcd.print(kolichestvo);
analogWrite(6, 255);
}
else
{ analogWrite(6, 0);}
delay(4000);
if (kolichestvo == count)
{ lcd.setCursor(0,0);
lcd.clear();
lcd.print("Max studentov!");
delay(2500);
kolichestvo = 0;
}
if (cm>0)
{digitalWrite(PIN_TRIGvihod, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIGvihod, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIGvihod, LOW);
rasstoyanie = pulseIn(PIN_ECHOvihod, HIGH);
cm = (rasstoyanie / 2) / 29.1;
if (cm < maxrange & cm > minrange)
{ lcd.setCursor(0,0);
kolichestvo--;
lcd.print(kolichestvo);
delay ( 5000) ; }
}
}