diff --git a/INPUT_OUTPUT/Txx.uo/INPUT_OUTPUT.gif b/INPUT_OUTPUT/Txx.uo/INPUT_OUTPUT.gif deleted file mode 100644 index 4ff7fe3..0000000 Binary files a/INPUT_OUTPUT/Txx.uo/INPUT_OUTPUT.gif and /dev/null differ diff --git a/INPUT_OUTPUT/Txx.uo/LiquidCrystal_I2C.zip b/INPUT_OUTPUT/Txx.uo/LiquidCrystal_I2C.zip new file mode 100644 index 0000000..32cdae2 Binary files /dev/null and b/INPUT_OUTPUT/Txx.uo/LiquidCrystal_I2C.zip differ diff --git a/INPUT_OUTPUT/Txx.uo/MFRC522.zip b/INPUT_OUTPUT/Txx.uo/MFRC522.zip new file mode 100644 index 0000000..86e9e02 Binary files /dev/null and b/INPUT_OUTPUT/Txx.uo/MFRC522.zip differ diff --git a/INPUT_OUTPUT/Txx.uo/Txx.uo.ino b/INPUT_OUTPUT/Txx.uo/Txx.uo.ino new file mode 100644 index 0000000..011dd69 --- /dev/null +++ b/INPUT_OUTPUT/Txx.uo/Txx.uo.ino @@ -0,0 +1,228 @@ + +#include +#include + +#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 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); +}