123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
-
- #include <SPI.h>
- #include <MFRC522.h>
-
- #define SS_PIN 10
- #define RST_PIN 9
- #define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
- MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
-
- #include <LiquidCrystal_I2C.h>
- //LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
-
- const int RFIDled = 6;
- const int RFIDSound = 5;
- const int RFIDbin = 3;
- const int signalIN = A0;
- const int TextKnob = A1;
- const int textSound = A2;
- long randNumber;
-
-
-
- void setup()
- {
- Serial.begin(9600); // Initiate a serial communication
- SPI.begin(); // Initiate SPI bus
- lcd.begin(16, 2); // initialize the lcd
- mfrc522.PCD_Init(); // Initiate MFRC522
-
- Serial.println();
-
- pinMode(RFIDled, OUTPUT);
- pinMode(RFIDSound, OUTPUT);
- pinMode(RFIDbin, OUTPUT);
- pinMode(signalIN, INPUT);
- pinMode(TextKnob, INPUT);
- pinMode(textSound, OUTPUT);
- }
-
- void readCard() {
- // Look for new cards
- if ( ! mfrc522.PICC_IsNewCardPresent())
- {
- return;
- }
- // Select one of the cards
- if ( ! mfrc522.PICC_ReadCardSerial())
- {
- return;
- }
-
- //Show UID on serial monitor
- Serial.print("UID tag :");
- String content = ""; // for tag + sound
- String binary = ""; // for binary + LED
-
- for (int i = 0; i < mfrc522.uid.size; i++)
- {
- Serial.print(mfrc522.uid.uidByte[i], DEC);
- content.concat(String(mfrc522.uid.uidByte[i], DEC));
-
- if (content.charAt(i) == '0') {
- tone(RFIDSound, 40, 2250);
- delay(100);
- }
- else if (content.charAt(i) == '1') {
- tone(RFIDSound, 15, 2250);
- delay(100);
- }
- else if (content.charAt(i) == '2') {
- tone(RFIDSound, 25, 1500);
- delay(100);
- }
- else if (content.charAt(i) == '3') {
- tone(RFIDSound, 17, 150);
- delay(100);
- }
- else if (content.charAt(i) == '4') {
- tone(RFIDSound, 30, 1000);
- delay(100);
- }
- else if (content.charAt(i) == '5') {
- tone(RFIDSound, 27, 1590);
- delay(100);
- }
- else if (content.charAt(i) == '6') {
- tone(RFIDSound, 28, 1500);
- delay(100);
- }
- else if (content.charAt(i) == '7') {
- tone(RFIDSound, 10, 1500);
- delay(100);
- }
- else if (content.charAt(i) == '8') {
- tone(RFIDSound, 13, 1050);
- delay(100);
- }
- else if (content.charAt(i) == '9') {
- tone(RFIDSound, 7, 1000);
- delay(100);
- }
- }
-
- for (int b = 0; b < mfrc522.uid.size; b++)
- {
- Serial.println(mfrc522.uid.uidByte[b], BIN);
- char r = mfrc522.uid.uidByte[b];
-
- for (int j = 8; j >= 0; j--) {
- if CHECK_BIT(r, j) {
- digitalWrite(RFIDled, HIGH);
- digitalWrite(RFIDbin, HIGH);
- delay(100);
- } else {
- digitalWrite(RFIDled, LOW);
- digitalWrite(RFIDbin, LOW);
- delay(100);
- }
- delay(100);
- }
- }
- Serial.println();
- delay(100);
- }
-
- //Q-code questions
- const char *Qs[] = {
- "",
- "",
- "QRB?:How far are you from my station?",
- "QRL?:Are you busy?",
- "QRZ?:Who is calling me?",
- "QRH?:Does my frequency vary?",
- "QRI?:How is the tone of my transmission?",
- "QRK?:What is the readability of my signals?",
- "QRM?:Do you have interference?",
- "QRN?:Are you troubled by static noise?",
- "QRQ?:Shall I send faster?",
- "QRT?:Shall I cease or suspend operation?",
- "QRU?:Have you anything for me?",
- "QRV?:Are you ready?",
- "QRX?:Shall I standby?",
- "QSA?:What is the strength of my signals?",
- "QSB?:Are my signals fading?",
- "QSD?:Is my keying defective?",
- "QSL?:Can you acknowledge receipt?"
- };
-
- //Q-code answers/statements
- const char *As[] = {
- "QRH:Your frequency varies.",
- "QRL:I am busy. Please do not interfere.",
- "QRM:I have interference.",
- "QRM:I am troubled by static noise.",
- "QRO:Please increase transmit power.",
- "QRQ:Please send faster.",
- "QRS:Please send more slowly",
- "QRT:I am suspending operation.",
- "QRU:I have nothing for you.",
- "QRV:I am ready.",
- "QRX:Please standby.",
- "QSB:Your signals are fading.",
- "QSD:Your keying is defective.",
- "QSK:I can hear you between my signals (while transmitting); break in on my transmission.",
- "QSL:I am acknowledging receipt.",
- "QSM:Repeat the last telegram which you sent me",
- "QSY:Please change transmission frequency.",
- "QSZ:Send each word or group twice."
- };
-
- void loop()
- {
- readCard();
- int textnumber;
- int text = analogRead(TextKnob);
- textnumber = map(text, 1, 1023, 0, 18);
-
- if (textnumber > 1) { //when the knob is turned from the 'position 0'
- Serial.println(Qs[textnumber]);
- String question = Qs[textnumber];
- lcd.setCursor(0, 0); //Set the lcd cursor to the upper left corner
- lcd.print(Qs[textnumber]); //Display the specific Q-question on the fisrt row of LCD
-
- for (int positionCounter = 0; positionCounter < question.length(); positionCounter++) {
- lcd.scrollDisplayLeft(); //Q-question scrolls to the left
- delay(230);
- }
- char* specQs = Qs[textnumber];
-
- // loop over each character of question
- for (int a = 0; a < strlen(specQs); a++ ) {
- char c = specQs[a];
- //Serial.print(c);
- //Serial.print(" ");
- Serial.print(specQs[a], BIN);
- //Serial.println();
-
- // sonify the bits...
- for (int i = 7; i >= 0; i--) {
- if CHECK_BIT(c, i) {
- tone(textSound, 440, 100);
- } else {
- tone(textSound, 220, 100);
- }
- delay(100);
- }
- }
- }
-
-
- // give an answer
- randNumber = random(0, 17);
- int readSignal = digitalRead(signalIN);
- String randomQ = As[randNumber];
-
- if (readSignal) { //If the module receives a signal via A2 o4 input channel...
- Serial.println(As[randNumber]);
- lcd.setCursor(0, 1); //Set the lcd cursor to the lower left corner
- lcd.print(randomQ); //Displayes a random Q-answer from the answers array
-
- for (int counter = 0; counter < randomQ.length(); counter++) {
- lcd.scrollDisplayLeft(); //Q-answer dissapears in the left side of the LCD
- delay(230);
- }
- }
- delay(500);
- }
|