21-03-2018, 14:06
Witam mam niby mały problem, ale nie widzę przyczyny, informacje (użytkownika + czas) zapisuje mi na kartę sd, jednak są one wyświetlane w kolumnie, a chciałbym aby były w rzędzie. Zamieszczam kod i proszę o pomoc.
Kod programu:
#include <SPI.h>
#include <SD.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <virtuabotixRTC.h>
virtuabotixRTC myRTC(6, 7, 8);
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int czujnik = A3; //pin analogowy A3 połączony z sygnałem z czujnika
float VOLT;
float TEMP;
const byte UID[] = {0x17, 0x5A, 0x10, 0xCC,
0x47, 0x55, 0x3A, 0xCC};
MFRC522 rfid(10, 9);
MFRC522::MIFARE_Key key;
File plik;
void setup()
{
{
Serial.begin(9600);
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Wczytywanie karty SD...");
if (!SD.begin(4)) {
Serial.println("Brak lub uszkodzenie karty SD");
return;
}
Serial.println("Karta SD zainicjalizowana.");
SPI.begin();
rfid.PCD_Init();
pinMode(2, OUTPUT); //niebieska LED
pinMode(3, OUTPUT); //zielona LED
pinMode(5, OUTPUT); //czerwona LED
// Set the current date, and time in the following format:
// seconds, minutes, hours, day of the week, day of the month, month, year
//myRTC.setDS1302Time(40, 50, 9, 2, 20, 3, 2018);
}
void loop() {
myRTC.updateTime();
int odczyt = analogRead(czujnik); //odczytanie wartości z czujnika
VOLT = (odczyt * 5.0) / 1024.0; //przeliczenie odczytanej wartości na napięcie w woltach (dla podłączenia pod 5 V)
TEMP = VOLT * 100; //konwersja z napięcia na temperaturę, rozdzielczość czujnika wynosi 10 mV na stopień
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(myRTC.dayofmonth);
lcd.print("/");
lcd.print(myRTC.month);
lcd.print("/");
lcd.print(myRTC.year);
lcd.print(" ");
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.setCursor(0,1);
lcd.print("T:");
//lcd.print((int)round(TEMP));
lcd.print(TEMP,2);
lcd.print((char)223);
lcd.print("C");
lcd.print(" ");
lcd.print("Zbliz");
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(2, HIGH);
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
{
if (rfid.uid.uidByte[0] == UID[0] &&
rfid.uid.uidByte[1] == UID[1] &&
rfid.uid.uidByte[2] == UID[2] &&
rfid.uid.uidByte[3] == UID[3])
{ String imie = "Adrian";
Serial.println("Poprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Dostep ");
lcd.print(imie);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(3, HIGH);
plik = SD.open("wejscia.txt", FILE_WRITE);
plik.println("Użytkownik: ");
plik.print(imie);
plik.println(" ");
plik.print(myRTC.dayofmonth);
plik.println("/");
plik.print(myRTC.month);
plik.println("/");
plik.print(myRTC.year);
plik.println(" ");
plik.print(myRTC.hours);
plik.println(":");
plik.print(myRTC.minutes);
plik.println(" ");
plik.close();
delay(3000);
}
else if
(rfid.uid.uidByte[0] == UID[4] &&
rfid.uid.uidByte[1] == UID[5] &&
rfid.uid.uidByte[2] == UID[6] &&
rfid.uid.uidByte[3] == UID[7])
{ String imie = "Zbychu";
Serial.println("Poprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Dostep ");
lcd.print(imie);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(3, HIGH);
plik = SD.open("wejscia.txt", FILE_WRITE);
plik.println("Użytkownik: ");
plik.print(imie );
plik.println(" ");
plik.print(myRTC.dayofmonth);
plik.println("/");
plik.print(myRTC.month );
plik.println("/");
plik.print(myRTC.year);
plik.println(" ");
plik.print(myRTC.hours);
plik.println(":");
plik.print(myRTC.minutes);
plik.println(" ");
plik.close();
delay(3000);
} else
{
Serial.println("Niepoprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Odmowa dostepu");
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
delay(3000);
}}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
delay(300);
}
Kod programu:
#include <SPI.h>
#include <SD.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <virtuabotixRTC.h>
virtuabotixRTC myRTC(6, 7, 8);
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int czujnik = A3; //pin analogowy A3 połączony z sygnałem z czujnika
float VOLT;
float TEMP;
const byte UID[] = {0x17, 0x5A, 0x10, 0xCC,
0x47, 0x55, 0x3A, 0xCC};
MFRC522 rfid(10, 9);
MFRC522::MIFARE_Key key;
File plik;
void setup()
{
{
Serial.begin(9600);
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Wczytywanie karty SD...");
if (!SD.begin(4)) {
Serial.println("Brak lub uszkodzenie karty SD");
return;
}
Serial.println("Karta SD zainicjalizowana.");
SPI.begin();
rfid.PCD_Init();
pinMode(2, OUTPUT); //niebieska LED
pinMode(3, OUTPUT); //zielona LED
pinMode(5, OUTPUT); //czerwona LED
// Set the current date, and time in the following format:
// seconds, minutes, hours, day of the week, day of the month, month, year
//myRTC.setDS1302Time(40, 50, 9, 2, 20, 3, 2018);
}
void loop() {
myRTC.updateTime();
int odczyt = analogRead(czujnik); //odczytanie wartości z czujnika
VOLT = (odczyt * 5.0) / 1024.0; //przeliczenie odczytanej wartości na napięcie w woltach (dla podłączenia pod 5 V)
TEMP = VOLT * 100; //konwersja z napięcia na temperaturę, rozdzielczość czujnika wynosi 10 mV na stopień
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(myRTC.dayofmonth);
lcd.print("/");
lcd.print(myRTC.month);
lcd.print("/");
lcd.print(myRTC.year);
lcd.print(" ");
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.setCursor(0,1);
lcd.print("T:");
//lcd.print((int)round(TEMP));
lcd.print(TEMP,2);
lcd.print((char)223);
lcd.print("C");
lcd.print(" ");
lcd.print("Zbliz");
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(2, HIGH);
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
{
if (rfid.uid.uidByte[0] == UID[0] &&
rfid.uid.uidByte[1] == UID[1] &&
rfid.uid.uidByte[2] == UID[2] &&
rfid.uid.uidByte[3] == UID[3])
{ String imie = "Adrian";
Serial.println("Poprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Dostep ");
lcd.print(imie);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(3, HIGH);
plik = SD.open("wejscia.txt", FILE_WRITE);
plik.println("Użytkownik: ");
plik.print(imie);
plik.println(" ");
plik.print(myRTC.dayofmonth);
plik.println("/");
plik.print(myRTC.month);
plik.println("/");
plik.print(myRTC.year);
plik.println(" ");
plik.print(myRTC.hours);
plik.println(":");
plik.print(myRTC.minutes);
plik.println(" ");
plik.close();
delay(3000);
}
else if
(rfid.uid.uidByte[0] == UID[4] &&
rfid.uid.uidByte[1] == UID[5] &&
rfid.uid.uidByte[2] == UID[6] &&
rfid.uid.uidByte[3] == UID[7])
{ String imie = "Zbychu";
Serial.println("Poprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Dostep ");
lcd.print(imie);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(3, HIGH);
plik = SD.open("wejscia.txt", FILE_WRITE);
plik.println("Użytkownik: ");
plik.print(imie );
plik.println(" ");
plik.print(myRTC.dayofmonth);
plik.println("/");
plik.print(myRTC.month );
plik.println("/");
plik.print(myRTC.year);
plik.println(" ");
plik.print(myRTC.hours);
plik.println(":");
plik.print(myRTC.minutes);
plik.println(" ");
plik.close();
delay(3000);
} else
{
Serial.println("Niepoprawny");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Stan :");
lcd.setCursor(0,1);
lcd.print("Odmowa dostepu");
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
delay(3000);
}}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
delay(300);
}