Diskuze: Problém se čtením SD u Arduina
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
uprav si funkci ctiSD, aby ti detekovala zasunuti karty
bool ctiSD()
{
int tlacitkoHodnota = digitalRead(22);
if (tlacitkoHodnota == HIGH)
{
digitalWrite(sdo, HIGH);
//uprava start
int timeout = 900;//nastav si jaky chces, ale mel by byt mensi nez 1000 (1sec)
while(!SD.init())
{
if(--timeout==0)
{
LCD.setCursor(0, 3);
LCD.print("Karta neindikovana ");
break;
}
delay(1);
}
if(timeout==0)return false;//kdyz nenajde kartu vrati se zpet
//nebo pokracuje
//uprava end
File soubor = SD.open("pin.txt");
if (soubor)
{
while(soubor.available())
{
text = char(soubor.read());
}
if (text == heslo)
{
digitalWrite(cervena, LOW);
digitalWrite(zelena, HIGH);
odpocitavat = false;
alarm = false;
sejmuto = false;
LCD.setCursor(0, 3);
LCD.print("Karta prijata. ");
return true;//uprava
}
else
{
LCD.setCursor(0, 3);
LCD.print("Karta odmitnuta.");
return false;//uprava
}
}
}
}
volání té funkce vlož do cyklu pro odpočítávání
for (int i = 30;i >= 0;i--)
{
if(ctiSD)break;//uprava - pri kladnem vysledku ukonci odpocet
LCD.setCursor(14, 1);
LCD.print(i);
LCD.print(" ");
delay(1000);
}
Píše mi to tohle: exit status 1
'class SDLib::SDClass' has no member named 'init'
Dále jsem se ještě chtěl zeptat: Proč tady: if(--timeout==0) jsou před tím timout ty pomlčky?
jo promiň má tam být
while(!SD.begin(sd)) //misto SD.init()
a k těm "pomlčkám" - to jsou mínusy a znamenají dekrementaci - odečtení jedné z hodnoty (zde timeout)
doporučuju ti, než budeš pokračovat projít si alespoň základy Céčka
To jsem zkoušel ještě dříve, než jsem si pořídil Arduino, ale vůbec mi to nefunguje a nejde nic spustit.
Teď nastal zase jiný problém, teď mi to místo odpočítávání hodí rovnou alarm.
a je to s kartou nebo bez?
když tak uprav
if(ctiSD()){odpocitavani=1;break;}//uprava - pri kladnem vysledku ukonci odpocet
teď to zase dělá to, že to každou sekundu pípá a LCD zobrazuje každou sekundu: "V poradku"/"Odpocitavani"
#include <LiquidCrystal.h>
#include <SD.h>
int odpocitavani = 0;
float cas = 30;
int heslo = 7755332200;
bool alarm = false;
bool sejmuto = false;
bool odpocitavat = false;
bool cistsc = false;
int tlacitko = 0;
int sdo = 13;
int sd = 53;
int sensor = 49;
int piezo = 4;
int cervena = 2;
int zelena = 3;
int bila = 5;
int modra = 6;
String text;
LiquidCrystal LCD(7, 8, 9, 10, 11, 12);
void setup()
{
Serial.begin(9600);
LCD.begin(20, 4);
LCD.setCursor(0, 0);
SD.begin(sd);
pinMode(sdo, OUTPUT);
pinMode(sensor, INPUT);
pinMode(piezo, OUTPUT);
pinMode(cervena, OUTPUT);
pinMode(zelena, OUTPUT);
pinMode(bila, OUTPUT);
pinMode(modra, OUTPUT);
LCD.print("Vitejte!");
digitalWrite(cervena, HIGH);
}
void loop()
{
LCD.setCursor(0, 1);
LCD.print("V poradku. ");
int sejmul = digitalRead(sensor);
if (sejmul)
{
sejmuto = true;
}
if (!sejmuto)
{
LCD.setCursor(0, 2);
LCD.print(" ");
digitalWrite(bila, LOW);
digitalWrite(modra, LOW);
}
else
{
tone(piezo, 1023);
delay(1000);
noTone(piezo);
odpocitavat = true;
}
if (odpocitavat)
{
LCD.setCursor(0, 1);
LCD.print("Odpocitavani: ");
LCD.setCursor(0, 2);
LCD.print("Vlozte SD s pinem");
for (int i = 30;i >= 0;i--)
{
if(ctiSD){odpocitavani=1;break;}
LCD.setCursor(14, 1);
LCD.print(i);
LCD.print(" ");
delay(1000);
}
if (odpocitavani == 0)
{
odpocitavat = false;
sejmuto = false;
alarm = true;
}
}
if (alarm)
{
do
{
tone(piezo, 900);
digitalWrite(modra, HIGH);
digitalWrite(bila, LOW);
delay(150);
digitalWrite(modra, LOW);
digitalWrite(bila, HIGH);
delay(150);
} while(alarm == true);
}
delay(1000);
}
bool ctiSD()
{
int tlacitkoHodnota = digitalRead(22);
if (tlacitkoHodnota == HIGH)
{
digitalWrite(sdo, HIGH);
//uprava start
int timeout = 999;//nastav si jaky chces, ale mel by byt mensi nez 1000 (1sec)
while(!SD.begin(sd))
{
if(--timeout==0)
{
LCD.setCursor(0, 3);
LCD.print("Karta neindikovana ");
break;
}
delay(1);
}
if(timeout==0)return false;//kdyz nenajde kartu vrati se zpet
//nebo pokracuje
//uprava end
File soubor = SD.open("pin.txt");
if (soubor)
{
while(soubor.available())
{
text = char(soubor.read());
}
if (text == heslo)
{
digitalWrite(cervena, LOW);
digitalWrite(zelena, HIGH);
odpocitavat = false;
alarm = false;
sejmuto = false;
LCD.setCursor(0, 3);
LCD.print("Karta prijata. ");
return true;//uprava
}
else
{
LCD.setCursor(0, 3);
LCD.print("Karta odmitnuta.");
return false;//uprava
}
}
}
}
Zobrazeno 10 zpráv z 10.