hi,
I have botched together all kinds of code in the hope of making a RFID reader that turns on either of two Relays.
There is a LCD display, which displays the time and and shows the option to choose one of two buttons after the valid RFID card has been scanned .
This turns on one or the other relay for a set amount of time.
everything worked fine (kinda) until I added the "while"command to wait for the button input..
now after scanning the correct card --coded into the program-- the arduino skips back to the "normalmessage" without waiting for the button input. (and doing what is programmed after)
if I want the the if command to work I have to press the button before I scan the RFID card.
If anyone has any tips, it would be much appreciated..
thanks,
Tony
it starts going wrong here;
content.toUpperCase();
if (content.substring(1) == "04 70 D1 BA BA 5D 81" ||
content.substring(1) =="04 B5 43 E2 BA 5D 80" ||
content.substring(1) =="04 1C 67 BA BA 5D 81" )
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("TEXT");
delay(1500);
lcd.clear();
lcd.setCursor(0,2);
lcd.print("MORE TEXT');
while(digitalRead(buttonPin4)==LOW&& digitalRead(buttonPin5)==LOW){ }
if (buttonState4 == HIGH) {
digitalWrite(relais6, HIGH);
digitalWrite(relais7, LOW);
lcd.clear();
lcd.setCursor(5,1);
lcd.print("TEXT");
delay(5400000UL);//wait for 90 minutes
digitalWrite(relais6,LOW);}
//else {digitalWrite(relais6,LOW);
//printNormalModeMessage();}
if (buttonState5 == HIGH) {
digitalWrite(relais7, HIGH);
digitalWrite(relais6, LOW);
lcd.clear();
lcd.setCursor(5,1);
lcd.print("TEXT");
delay(5400000UL);//wait for 90 minutes
digitalWrite(relais7,LOW);}
else {digitalWrite(relais7,LOW[/color]);}
printNormalModeMessage();
}
the entire code:
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#define DS3231_I2C_ADDRESS 0x68
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
//button
const int buttonPin4 = 4;//wassen
const int buttonPin5 = 5;//drogen
const int relais6 = 6; //relais pin d6
const int relais7 = 7; //relais pin d7
int buttonState4 = 0;
int buttonState5 = 0;
//clock
byte decToBcd(byte val)
{ return( (val/10*16) + (val%10) );} // Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{ return( (val/16*10) + (val%16) );}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,
byte *year)
{ Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void printNormalModeMessage() {
lcd.clear();
lcd.setCursor ( 2, 0 ); // Prints the initial message
lcd.print("TEXT");
lcd.setCursor(3, 1);
lcd.print("Scan Card");
displayTime();
}
void displayTime()
{ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour,&dayOfWeek, &dayOfMonth, &month, &year);
if(hour<10){
lcd.setCursor(1,3);
lcd.print("0");
lcd.setCursor(2,3);
lcd.print(hour);}
else{
lcd.setCursor(1,3);
lcd.print(hour);}
lcd.setCursor(3,3);
lcd.print(":");
if (minute<10){
lcd.setCursor(4,3);
lcd.print("0");
lcd.setCursor(5,3);
lcd.print(minute);}
else{
lcd.setCursor(4,3);
lcd.print(minute);}//end of time display
//start date display
if(dayOfMonth<10){ //date
lcd.setCursor(9,3);
lcd.print("0");
lcd.setCursor(10,3);
lcd.print(dayOfMonth);}
else{lcd.setCursor(9,3);
lcd.print(dayOfMonth);}
lcd.setCursor(11,3);
lcd.print("/");
if (month<10){ //month
lcd.setCursor(12,3);
lcd.print("0");
lcd.print(month);}
else{
lcd.setCursor(12,3);
lcd.print(month);}
lcd.setCursor(14,3);
lcd.print("/");
lcd.setCursor(15,3);
lcd.print("20");
lcd.setCursor(17,3);
lcd.print(year);
}
void setup()
{
Wire.begin();
Serial.begin(9600);
lcd.backlight();
lcd.init();
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
printNormalModeMessage();
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
setDS3231time(30,0,0,3,1,5,19);
pinMode(relais6, OUTPUT); //button pin4
pinMode(relais7, OUTPUT); //button pin5
pinMode(buttonPin4, INPUT);//relay pin6
pinMode(buttonPin5, INPUT); //relay pin7
}
void loop() {
buttonState4 = digitalRead(buttonPin4);
buttonState5 = digitalRead(buttonPin5);
if ( ! mfrc522.PICC_IsNewCardPresent()) // Look for new cards
{ return; }
if ( ! mfrc522.PICC_ReadCardSerial()) // Select one of the cards
{ return; }
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
//lcd.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
//lcd.print(mfrc522.uid.uidByte[i], HEX);
//delay(1000);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
if (content.substring(1) == "04 70 D1 BA BA 5D 81" ||
content.substring(1) =="04 B5 43 E2 BA 5D 80" ||
content.substring(1) =="04 1C 67 BA BA 5D 81" )
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("TEXT");
delay(1500);
lcd.clear();
lcd.setCursor(0,2);
lcd.print("MORE TEXT');
while(digitalRead(buttonPin4)==LOW&& digitalRead(buttonPin5)==LOW){ }
if (buttonState4 == HIGH) {
digitalWrite(relais6, HIGH);
digitalWrite(relais7, LOW);
lcd.clear();
lcd.setCursor(5,1);
lcd.print("TEXT");
delay(5400000UL);//wait for 90 minutes
digitalWrite(relais6,LOW);}
else {digitalWrite(relais6,LOW);
printNormalModeMessage();}
if (buttonState5 == HIGH) {
digitalWrite(relais7, HIGH);
digitalWrite(relais6, LOW);
lcd.clear();
lcd.setCursor(5,1);
lcd.print("TEXT");
delay(5400000UL);//wait for 90 minutes
digitalWrite(relais7,LOW);}
else {digitalWrite(relais7,LOW);}
printNormalModeMessage();
}
else
{lcd.clear();
lcd.setCursor(2,1);
lcd.print("invalid card");
delay(1500);
printNormalModeMessage();
}
}