onsdag 30. januar 2013

I dag har vi jobbet mer med programmet og kommet fra til en løsning på et problem vi hadde med den forrige koden. vi endte opp med denne koden



#include <SoftwareSerial.h>
#define rxPin 6
#define txPin 7
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
String tegn1="";
String kode1="5000893AF310";
String kode2="5100FEA91F19";
unsigned long lastTime = 0;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(9,OUTPUT);
}
void loop()
{
  if (mySerial.available() > 0)
  {
    tegn1 = tegn1+(char)mySerial.read();
    if(tegn1.length() >= 14)
    {
      tegn1=tegn1.substring(1,13);            
      if((millis()-lastTime) > 1000)
      {
      Serial.print("Kort Funnet: ");                                  
        if(kode1==tegn1)
        {
          Serial.print("Gregor");
          Serial.print(";");
          Serial.print("Kontorpersonell");
          Serial.print(";");
          Serial.println(tegn1);
          Serial.println("Aapner dor");
          digitalWrite(9,HIGH);
          delay(4000);
          digitalWrite(9,LOW);
          Serial.println("Lukker dor");      
        }                                                  
        else if(kode2==tegn1)
        {
          Serial.print("Joshua");
          Serial.print(";");
          Serial.print("Administrasjon");
          Serial.print(";");
          Serial.println(tegn1);
          Serial.println("Aapner dor");
          digitalWrite(9,HIGH);
          delay(4000);
          digitalWrite(9,LOW);
          Serial.println("Lukker dor");    
        }
        else {
          Serial.println ("DENIED");
          delay(2000);
          tegn1="";
        }
        lastTime = millis();          
      }
      tegn1="";
      mySerial.flush();                                
    }                                      
  }
}

Denne koden sammenligner koden fra kortet med lagrede koder og gir kortinnhaveren aksess hvis kodene stemmer. Det er lagt inn en timer som forhindrer "flooding".

3 kommentarer:

  1. hei.
    Kan dere beskrive hva problemet var og vise hvor i programmet løsningen ligger?

    mvh jan

    SvarSlett
    Svar
    1. Problemet var at arduinoen leste gjennom flere ganger, så vi fikk en flod av print. Vi løste dette ved å legge inn en timer som passer på at det ikke testes mer enn 1 gang i sekundet.
      if((millis()-lastTime) > 1000)
      {
      lastTime = millis();
      }

      Slett
  2. Flott at dere, i samarbeide med andre, klarte å løse problemet.

    mvh jan

    SvarSlett