The sketch is used to control the direction the radio frequency controlled mower or car. The message sent can be monitored by SimpleReceiveLCD on May. 11, 2014.
Sketch
//File Name: MakerRemoteMowerDirectionSendOneTimeV10
// Modified by Befun Hung on Jul. 16, 2019
// Blink led on time after sending direction character (one character)
// The direction character may be one of 0-9, * and #
// The direction character is designed as
// 2, forward, both left and right wheel forward
// 4, left, right wheel forward and left wheel backward
// 6, right, left wheel forward and right wheel backward
// 8, backward, both left and right wheel backward
// 1, forward left, right wheel forward and left wheel stop
// 3, forward right, left wheel forward and right wheel stop
// 7, backward left, right wheel backward and left wheel stop
// 9, backward right, left wheel backward and right wheel stop
// 5, stop both left and right wheels
// 0, do nothing
// *, turn on mower motor
// #, turn off mower motor
// The sketch is tested and comfirmed with only one direction character received
//
// Modified by Befun Hung on Oct. 28, 2014
// Blink led after sending message to notice user 5 times
#include <Keypad.h>
#include <VirtualWire.h>
#define maxLength 1 // maxLength 3 changed to 1
const byte ROWS = 4; // four rows
const byte COLS = 3; // three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {5, 4, 3, 2};
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = {8, 7, 6}; // connect to the column pinouts of the keypad
char keyins[maxLength+1] = "";
int i=0, j=0, sendTimes=1; // sendTimes 5 changed to 1
int led=13;
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
Serial.println("Ready!");
pinMode(led, OUTPUT);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.print(key);
keyins[i] = key;
i++;
if (i == maxLength) {
for (j=0;j<sendTimes;j++) {
Serial.println();
send(keyins);
digitalWrite(led, HIGH);
delay(20);
digitalWrite(led, LOW);
delay(20);
}
i = 0;
}
}
}
void send(char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}