chci se zeptat. Mám tento problém (asi s polem), jak mně to je hlášeno od kolegů - uvažuji, jestli není problém právě zde.
Mám nadeklarováno pole o 216 prvků
Kód: Vybrat vše
unsigned int pocet [216] = {}; //
Podle mě je někde problém zde v následujícím kódu při nulování. Vlastně to pole pocet slouží jen k tomu, kolikrát uživatel přiložil kartu a prováděl odběr... může až 8x za 600 minut = 10 hodin... až bude p = 600 minut, tak dojde k nulování viz níže: Jenže zde nuluji pouze prvky pole které měly alespoň jeden vstup... ostatní byly nula, tak proč je zase nulovat zpět... ovšem možná toto je právě ta chyba měl bych nulovat vše? Ovšem i při nulování, když vypíšu do Serialu všechny prvnky pole pocet, tak jsou všechny nula... Takže problém nevidím... Přeskočím kod a pokračuji dále.
Kód: Vybrat vše
if (p == 600){
lcd.setCursor (0, 1);
lcd.print(" ");
p = 0;
for (int i = 0; i != length_card; i++) {
if (pocet [i] == 1 || pocet [i] == 2 || pocet [i] == 3 || pocet [i] == 4 || pocet [i] == 5 || pocet [i] == 6 || pocet [i] == 7 || pocet [i] == 8){
pocet [i] = 0;
z [i] = 40;
}
if (pocet [i] == 8) {
card [i] = card [i] - 10;
Serial.print ("card [i] po nulovani: ");
Serial.println (card [i]);
}
Serial.print ("pocet [i] po nulovani: ");
Serial.println (pocet [i]);
Serial.print ("Vraceni z [i] zpet na 40: ");
Serial.println (z [i]);
}
Serial.print ("p po nulovani");
Serial.println (p);
}
Kód: Vybrat vše
if (z[a] == 1){
pocet [a] = 8;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print ("Prekrocen denni");
lcd.setCursor (0, 1);
lcd.print ("limit.");
delay (1500);
break;
}
else
pocet [a]++;
Kód: Vybrat vše
if (pocet [a] == 1)
{
b = 40;
}
if (pocet [a] == 2 && z [a] > 35)
{
b = 35;
}
if (pocet [a] == 3 && z [a] > 30)
{
b = 30;
}
if (pocet [a] == 4 && z [a] > 25)
{
b = 25;
}
if (pocet [a] == 5 && z [a] > 20)
{
b = 20;
}
if (pocet [a] == 6 && z [a] > 15)
{
b = 15;
}
if (pocet [a] == 7 && z [a] > 10)
{
b = 10;
}
if (pocet [a] == 8 && z [a] > 5)
{
b = 5;
}
if (pocet [a] == 8)
{
card [a] = card [a] + 10;
Serial.print ("Card [a]");
Serial.println (card [a]);
}
viz cykl níže:
Kód: Vybrat vše
for (int i = b; i > 0; i = i - 1) {
// Unlock the door and lock it after 5 seconds
digitalWrite(RELAY_IN1, LOW);
digitalWrite(RELAY_IN2, LOW);
digitalWrite(RELAY_IN3, LOW);
digitalWrite(RELAY_IN4, LOW);
digitalWrite (LED_BLUE, HIGH);
/* Serial.println ("Aaaaaaaaaaaa");
Serial.println (a);
Serial.println ("IIIIIIIIII");
Serial.println (i); */
if (i == 1)
z [a] = 1;
Serial.println (i);
g++;
/*cteni = digitalRead (vyp);
Serial.println (cteni);
Serial.println (vyp);
if (cteni == LOW)
{
lcd.setCursor (0,0);
lcd.print (" ");
lcd.setCursor(3, 0);
lcd.print("!Ukonceno!");
Serial.println ("Ukonceno zmacnutim tlacitka");
digitalWrite (LED_YELLOW, HIGH);
delay(300);
digitalWrite (LED_RED, HIGH);
delay(300);
digitalWrite (LED_BLUE, HIGH);
delay(300);
digitalWrite (LED_YELLOW, LOW);
delay(300);
digitalWrite (LED_RED, LOW);
delay(300);
digitalWrite (LED_BLUE, LOW);
delay(300);
// z [a] = i;
break;
}
Jenže... Někdy dojde prostě k tomu, že má povolený přístup a ihned se to uzavře... tzn okamžitě.. Schváleno, uzavřeno... jako by v cyklu pod b byla přiřazena nula... A já nevím proč.. testuji to v domácím prostředí..
Podle mě problém nastává až při uběhnutí prvních 10 hodin a nulování prvků karet (vlastně nuluji všem přístupy na 0 a přiřazuji všem znova čas 40 s)
Děkuji moc
Edit: s tím časem, že se jim přístup schválí ale pak hned zamítne mi hlásí dle mě většina lidí kteří během 10 hodin právě nevyužili přístup ani jednou.. Uvažuji jestli však pomůže tam dát ještě při nulováni početu do podmínky pocet == 0... Ale jestli to pomůže, když mi to vypisuje že je vše nula..