Go Down

Topic: how to send text over rf ? (Read 840 times) previous topic - next topic

kourpetis

hello arduino friends.

i am trying to make two arduino based devices that sends text one to an other !
until now everything is ok !

i have a 4x4 keypad and a 16x2 lcd connected and they both work fine !

the input method is like a normal sms creation, a few presses over a keypad changes the character on the lcd and if the time between the two presses is more that 1 seccond it moves the cursor to the next step !

how can i send those chars over rf ?
and are there any schematics that i can download to test ?

Code: [Select]
#include <Time.h>
#include <Keypad.h>
#include <ctype.h>
#include <MorseEnDecoder.h>
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
// Define the keymaps.  The blank spot (lower left) is the space character.
char alphaKeys[ROWS][COLS] = {
  {'a','d','g','A'},
  {'j','m','p','B'},
  {'s','v','y','C'},
  {' ','.',',','D'}
};

char numberKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {' ','0','.','D'}
};

boolean alpha = false;   // Start with the numeric keypad.
char* keypadMap = (alpha == true) ? makeKeymap(alphaKeys) : makeKeymap(numberKeys);

byte rowPins[ROWS] = {
  45, 47, 49, 51}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  37, 39, 41, 43}; //connect to the column pinouts of the keypad

//create a new Keypad
Keypad keypad = Keypad(keypadMap, rowPins, colPins, sizeof(rowPins), sizeof(colPins));

unsigned long startTime;
const byte ledPin = 13;
int i = -1;
int j = 0;
int k=0;
long puss=0;
long puss2=1;
int flag=0;
int flag2=1;
int flag3=0;
int functionKey = 0;
String messageComplete[34];
char message1[ ] = "                ";
char message[ ] = "                ";
int morseOutPin = 13;
int morseInPin = 7;
char temp;
morseDecoder morseInput(morseInPin, MORSE_KEYER, MORSE_ACTIVE_LOW);
morseEncoder morseOutput(morseOutPin);


void setup(){
  lcd.begin(16, 2); // Starts the LCD library and sets 2 coloumns of 16 chars each
  Serial.begin(9600); // begins the serial communication over usb with the computer at 9600 bauds
  pinMode(ledPin, OUTPUT); // sets the led on the arduino as an output device
  digitalWrite(ledPin, LOW);                                                // Turns the LED on.
  keypad.addEventListener(keypadEvent);                                      // Add an event listener.
  keypad.setHoldTime(500);
  morseInput.setspeed(64); // sets the input to 64 chars per minute
  morseOutput.setspeed(64); // sets the output to 64 chars per minute
};

void loop(){
  char key = keypad.getKey();
  if (alpha && millis()-startTime>100) {           // Flash the LED if we are using the letter keymap.
    digitalWrite(ledPin,!digitalRead(ledPin));
    startTime = millis();
  }
};
//transmition protocol
void transmit(){

}

// Take care of some special events.
void keypadEvent(KeypadEvent key) {
  static char virtKey = NO_KEY;      // Stores the last virtual key press. (Alpha keys only)
  static char physKey = NO_KEY;      // Stores the last physical key press. (Alpha keys only)
  static char buildStr[12];
  static byte buildCount;
  static byte pressCount;
  switch (keypad.getState())
  {
  case PRESSED:
    if (flag2==0 & isalpha(key)) {              // Pressed the same key again...
      puss=millis();
      if (puss != puss2){
        if ((puss - puss2)>1000){
          flag3=1;
        }
        else {
          flag3=0;
        }
        puss2=millis();
      }

    }
    if (isalpha(key)) {          // This is a letter key so we're using the letter keymap.
      if (physKey != key) {        // New key so start with the first of 3 characters.
        pressCount = 0;
        virtKey = key;
        physKey = key;
        flag2 = 1;
      }
      else {              // Pressed the same key again...
        if (flag3==1){
          virtKey++;               // so select the next character on that key.
          pressCount++;            // Tracks how many times we press the same key.
          flag2 = 0;
          flag = 0;
        }
        else {
          virtKey++;               // so select the next character on that key.
          pressCount++;            // Tracks how many times we press the same key.
          i--;
          flag2 = 0;
          flag=1;
        }
      }
    }

    if (pressCount > 2) {        // Last character reached so cycle back to start.
      pressCount = 0;
      virtKey = key;
    }

    if (isdigit(key) || key == ' ' || key == '.' || key == ',') {
      virtKey = key ;
    }
    if (key == 'A'){
      key = 'A';
      functionKey = 1;
    }
      if (key == 'C'){
      functionKey = 1;
      lcd.begin(16, 2);
      i=0;
      j=0;
      i--;
      i--;
      virtKey = 'C';
    } 
    if (key == 'D'){
      functionKey = 1;
      virtKey= 'D';
      if (i<0 & j==1){
        i=16;
        j=0;
      }
      lcd.setCursor(i,j);
      lcd.print(" ");
      lcd.print(" ");
      i--;
      i--;
    }
    if (i > 14  & j == 0){
      i = -1;
      j = 1;
    } else if (i == 15 & j == 1){
      i = -1;
      j = 0;
    }
    else {
      i++;
    }
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    lcd.setCursor(i,j);  // prosexe apo edo !!!!!!!!!!!!!!!!!!!!!!!
    if (functionKey == 0){
      lcd.print(virtKey);    // Used for testing.
      if (j==1){
       message1[i] = virtKey;
      } else {
       message[i] = virtKey;
      } // mexri edo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//to message 1 einai i kato grammi tis lcd kai to message einai i epano
// pos mporo na ta kano auta binary ?
break;

  case HOLD:
    if (key == 'B')  {      // Toggle between keymaps.
      virtKey='B';
      functionKey = 1;
      if (alpha == true)  {            // We are currently using a keymap with letters
        keypad.begin(*numberKeys);   // and want to change to numbers.
        alpha = false;
        digitalWrite(ledPin, LOW);
      }
      else  {                          // Or, we are currently using a keymap with numbers
        keypad.begin(*alphaKeys);    // and want to change to letters.
        alpha = true;
      }
    }
    break;

  case RELEASED:
    break;

  }  // end switch-case
}  // end keypad events

AWOL

Quote
how can i send those chars over rf ?
VirtualWire and a cheap 3xx or 4xx MHz rx/TX pair.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

kourpetis

i was more like thinking over vlf ! is there any sugestion over vlf ? schematics and code !

AWOL

Quote
i was more like thinking over vlf !
Sorry, it is the mind-reader's day off.

OK, use VirtualWire and a COTS VLF tx/rx pair.

Got a VLF ham licence?
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

kourpetis

no i don't ! i am just experimenting !

hope noone hears about that !

:D !

thanks for your time !

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy