Skip to content

Instantly share code, notes, and snippets.

@dz0ny
Created November 19, 2010 17:58
Show Gist options
  • Save dz0ny/706868 to your computer and use it in GitHub Desktop.
Save dz0ny/706868 to your computer and use it in GitHub Desktop.
Demo način štetja oseb
char ukaz;
volatile unsigned long zadnja_komunikacija = 0;
volatile unsigned long zadnji_cas = 0;
char vse = 'a';
char resetiraj = 'c';
char baterija = 'b';
int trenutno = 0;
int prvi;
int drugi;
int dovoli = 1;
const int zakasnitev = 600;
const int demo = 1; //spremeni v 0 če dejansko testiraš
void setup()
{
Serial.begin(57600);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(13, OUTPUT);
preveriPovezavo();
}
void loop()
{
serijskiMonitor();
if(!demo){
irMonitor();
}
}
void irMonitor(){
prvi = digitalRead(4);
drugi = digitalRead(5);
//smer koraka -> (noter)
if(prvi && !drugi && dovoli && millis() > zadnji_cas+1400 ){
zadnji_cas = millis();
noInterrupts();
digitalWrite(13, HIGH);
while (dovoli && millis() < zadnji_cas+zakasnitev) {
drugi = digitalRead(5);
if(drugi){
trenutno++;
dovoli = 0;
}
}
digitalWrite(13, LOW);
interrupts();
dovoli = 1;
}
//smer koraka <-
if(!prvi && drugi && dovoli && millis() > zadnji_cas+1400){
zadnji_cas = millis();
noInterrupts();
digitalWrite(13, HIGH);
while (dovoli && millis() < zadnji_cas+zakasnitev) {
prvi = digitalRead(4);
if(prvi){
trenutno--;
dovoli = 0;
}
}
digitalWrite(13, LOW);
interrupts();
dovoli = 1;
}
}
void preveriPovezavo() {
while (Serial.available() <= 0) {
zadnja_komunikacija = millis();
Serial.print("OK!1.1"); // send an initial string
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
}
}
void serijskiMonitor() {
// je bilo v 5 minutah kaj dogodkov
if((millis()-zadnja_komunikacija) < 60000*5)
{
digitalWrite(13, HIGH);
if (Serial.available() > 0) {
char ukaz = Serial.read();
zadnja_komunikacija = millis();
if(ukaz == vse) //trenutno stanje
{
Serial.print("s:");
if(!demo){
Serial.print(trenutno);
}
else{
Serial.print(random(0, 180));
}
}
else if(ukaz == resetiraj) //resetiraj stevec
{
zadnja_komunikacija = 60000*6;
Serial.print("s:0");
trenutno = 0;
}
else if(ukaz == baterija) //stanje baterije
{
Serial.print("b:2");
}
else{
Serial.print("n:1");
}
}
}
else{
digitalWrite(13, LOW);
preveriPovezavo();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment