Advertisement
alveoten

Untitled

May 18th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1.  
  2. /*
  3.  *
  4. Intanto ti do alcuni consigli stilistici:
  5. - i nomi delle variabili generalmente si usano minuscoli
  6. - meglio un nome di variabile lungo che abbia un senso alla lettura che un acronimo
  7. - if else if sulla solita variabile รจ deprecabile, e meno leggibile del costrutto switch
  8. - le variabili dichiarale globali solo se ha senso usarle globalmente
  9. - gli indici quando puoi falli partire da 0 come per CO
  10. - non usare loop per fare i cicli, ma per ripetere
  11. */
  12.  
  13.  
  14. #include <SoftwareSerial.h>
  15. #include <EEPROM.h>
  16.  
  17. SoftwareSerial rfid(7, 8);
  18.  
  19. int Indirizzo = 0;
  20. byte Valore;
  21. int Quante = 0;
  22. const int Serratura =  13;
  23. int CO = 0;
  24. int CA = 0;
  25. long Buona[10];
  26.  
  27. long bytesToLong(byte * letto){
  28.   long value = 0;
  29.   value += ((long)letto[0] << 24);
  30.   value += ((long)letto[1] << 16);
  31.   value += ((long)letto[2] << 8);
  32.   value += (long)letto[3];    
  33.   return value;
  34. }
  35.  
  36. void setup() {
  37.   Serial.begin(9600);
  38.   rfid.begin(9600);
  39.   pinMode(Serratura, OUTPUT);
  40.   Recupera();
  41. }
  42.  
  43. void loop() {
  44.   int i = 0;
  45.   byte buffer[4];
  46.   bool letto_qualcosa = false;
  47.   while(rfid.available()>0) { //verifico la presenza di dati in arrivo
  48.     buffer[i++] =  rfid.read();    
  49.     letto_qualcosa = true;
  50.   }
  51.  
  52.   if(letto_qualcosa){
  53.     long numero_tessera = bytesToLong(buffer);
  54.  
  55.     switch(numero_tessera){
  56.       case 9559221L:
  57.             Serial.println("Tessera Bianca");
  58.             Abilita();
  59.       break;
  60.       case 11988333L:
  61.             Serial.println("Tessera Giallo 1");
  62.             Abilita();
  63.       break;
  64.       case 11912406L:
  65.             Serial.println("Tessera Giallo 2");
  66.             Abilita();
  67.       break;
  68.       case 17365799L:
  69.             Serial.println("Tessera Nespresso");
  70.             Abilita();
  71.       break;
  72.       default:
  73.         Serial.println("Tessera SCONOSCIUTA");
  74.     }
  75.   }
  76.  
  77.   delay(1000);
  78.    
  79. }
  80.  
  81. void Abilita() {   // Viene invocato quando ho una lettura valida
  82.     digitalWrite(Serratura, HIGH);
  83.     delay(600);
  84.     digitalWrite(Serratura, LOW);
  85. }  
  86.  
  87. void Recupera() {  // Legge dalla EEPROM le tessere valide e le mette nell'array
  88.   int Quante = EEPROM.read(0); // nร‚ยฐ di codici tessera presenti nella eeprom
  89.   Serial.println(Quante);
  90.  
  91.   for(int i = 0; i< Quante; i++){
  92.     byte lettura[4];
  93.     for(int j=0; j<4; j++){
  94.       //lettura dei numeri di tessera
  95.       //offsset= 1 (indirizzo di partenza)
  96.       //        + i*4  (inzio di ogni tessera)
  97.       //        + j (byte da 0 a 3 compreso)
  98.       lettura[j] = EEPROM.read( 1+(i*4)+j );
  99.     }
  100.     Buona[i] = bytesToLong(lettura);
  101.     Serial.println(Buona[i]);
  102.   }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement