///
/// @mainpage LCD_Joystick
///
/// @details Joystick controlled cursor
/// @n
/// @n @a Developed with [embedXcode+](http://embedXcode.weebly.com)
///
/// @author Rei Vilo
/// @author http://embeddedcomputing.weebly.com
/// @date 11/12/2013 10:19
/// @version 101
///
/// @copyright (c) Rei Vilo, 2013
/// @copyright CC = BY SA NC
///
/// @see ReadMe.txt for references
///
///
/// @file LCD_Joystick.ino
/// @brief Main sketch
///
/// @details Joystick controlled cursor
/// @n @a Developed with [embedXcode+](http://embedXcode.weebly.com)
///
/// @author Rei Vilo
/// @author http://embeddedcomputing.weebly.com
/// @date 11/12/2013 10:19
/// @version 101
///
/// @copyright (c) Rei Vilo, 2013
/// @copyright CC = BY SA NC
///
/// @see ReadMe.txt for references
/// @n
///
// Core library for code-sense
#if defined(ENERGIA) // LaunchPad MSP430, Stellaris and Tiva, Experimeter Board FR5739 specific
#include "Energia.h"
#else // error
#error Platform not defined
#endif
// Prototypes
// Include application, user and local libraries
#include <SPI.h>
#include <AIR430BoostFCC.h>
#include <LCD_screen.h>
#include <LCD_screen_font.h>
#include <LCD_utilities.h>
#include <Screen_HX8353E.h>
#include <Terminal12e.h>
#include <Terminal6e.h>
#include <Terminal8e.h>
Screen_HX8353E myScreen;
// Define variables and constants
#define joystickX 2
#define joystickY 26
uint16_t x, y, x00, y00;
uint16_t colour;
uint32_t z;
// Data to write to radio TX FIFO (60 bytes MAX.)
unsigned char txData[6] = { 0x30, 'A', 'i', 'r', '!', '\0' };
// Data to read from radio RX FIFO (60 bytes MAX.)
unsigned char rxData[6] = { '\0', '\0', '\0', '\0', '\0', '\0' };
// -----------------------------------------------------------------------------
// Debug print functions
void printTxData()
{
Serial.print("TX (DATA): ");
Serial.println((char*)txData);
}
void printRxData()
{
/**
* The following illustrates various information that can be obtained when
* receiving a message. This includes: the received data and associated
* status information (RSSI, LQI, and CRC_OK bit).
*/
Serial.print("RX (DATA, RSSI, LQI, CRCBIT): ");
Serial.print("(");
Serial.print((char*)rxData);
Serial.print(", ");
Serial.print(Radio.getRssi());
Serial.print(", ");
Serial.print(Radio.getLqi());
Serial.print(", ");
Serial.print(Radio.getCrcBit());
Serial.println(")");
}
// -----------------------------------------------------------------------------
// Main example
// Add setup code
void setup()
{
// By default MSP432 has analogRead() set to 10 bits.
// This Sketch assumes 12 bits. Uncomment to line below to set analogRead()
// to 12 bit resolution for MSP432.
//analogReadResolution(12);
myScreen.begin();
x00 = 0;
y00 = 0;
// The radio library uses the SPI library internally, this call initializes
// SPI/CSn and GDO0 lines. Also setup initial address, channel, and TX power.
Radio.begin(0x01, CHANNEL_1, POWER_MAX);
// Setup serial for debug printing.
Serial.begin(9600);
/**
* Setup LED for example demonstration purposes.
*
* Note: Set radio first to ensure that GDO2 line isn't being driven by the
* MCU as it is an output from the radio.
*/
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, LOW); // set the LED on
}
// Add loop code
void loop()
{
Serial.print("Display");
x = map(analogRead(joystickX), 0, 4096, 0, 128);
y = map(analogRead(joystickY), 0, 4096, 128, 0);
if (x < 1) x = 1;
if (x > 126) x = 126;
if (y < 1) y = 1;
if (y > 126) y = 126;
if ((x00 != x) || (y00 != y)) {
z = (uint32_t)((x-64)*(x-64)+(y-64)*(y-64)) >> 8;
if (z > 4) colour = redColour;
else if (z > 1) colour = yellowColour;
else colour = greenColour;
myScreen.dRectangle(x00-1, y00-1, 3, 3, blackColour);
myScreen.dRectangle(x-1, y-1, 3, 3, colour);
x00 = x;
y00 = y;
}
myScreen.gText(0, myScreen.screenSizeY()-myScreen.fontSizeY(),
"x=" + i32toa((int16_t)x-64, 10, 1, 6) +" y=" + i32toa(64-(int16_t)y, 10, 1, 6),
colour);
//Transmission of Data
Serial.print("Transmit");
// Load the txData into the radio TX FIFO and transmit it to the broadcast
// address.
unsigned char trData[6] = { 0x30, x, ',', y, '!', '\0' };
Radio.transmit(ADDRESS_BROADCAST, trData, 6);
printTxData(); // TX debug information
// Increment tx data sequence number ('0'-'9' ASCII) for next transmission.
if (txData[0] >= '0' && txData[0] < '9')
{
trData[0]++;
}
else
{
trData[0] = '0';
}
/**
* The radio transmitter and receiver cannot be operated at the same time.
* Wait until transmit completes before turning on the receiver. Please note
* that the radio is considered busy when it is transmitting.
*
* WARNING: If busy is not checked between two successive radio operations
* receiverOn/transmit, the radio may not perform the specified task. The
* radio must be complete with the transmission before it can begin the next
*/
while (Radio.busy());
// Turn on the receiver and listen for incoming data. Timeout after 1 seconds.
// The receiverOn() method returns the number of bytes copied to rxData.
if (Radio.receiverOn(rxData, sizeof(rxData), 1000) > 0)
{
/**
* Data has been received and has been copied to the rxData buffer provided
* to the receiverOn() method. At this point, rxData is available. See
* printRxData() for more information.
*/
digitalWrite(RED_LED, HIGH);
printRxData(); // RX debug information
}
digitalWrite(RED_LED, LOW);
k++;
myScreen.clearBuffer();
myScreen.setFont(0);
myScreen.text(k, 10, (char*)rxData);
for (uint8_t i=10; i<LCD_HORIZONTAL_MAX-10; i++) {
myScreen.setXY(i,20,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50+i,30,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50,30+i,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50+i,50,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(70,30+i,1);
}
myScreen.setFont(1);
myScreen.text(10, 60, "ABC");
myScreen.flush();
delay(200);
}
/**
* WirelessTest - test transceiver sketch using AIR430Boost FCC driver.
* Copyright (C) 2012-2013 Anaren Microwave, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* This example demonstrates usage of the AIR430BoostETSI library which uses
* the 430Boost-CC110L AIR Module BoosterPack created by Anaren Microwave, Inc.
* and available through the TI eStore, for the European Union.
*
* ----------------------------------------------------------------------------
*
* Note: This file is part of AIR430Boost.
*
* ----------------------------------------------------------------------------
*
* Description
* ===========
*
* Each radio will send a message consisting of: 1 byte counter, 5 byte static
* text. The counter will count from 0 to 9 and will rollover. Each radio will
* wait in receive mode for approximately one second. Upon receiving data, or
* timeout of one second, the radio receive function will return. If valid data
* was received, the radio's receiverOn() method will return the number of bytes
* that were received. In this example, the data can be monitored on the serial
* port (please refer to printTxData() and printRxData() functions).
*
* ----------------------------------------------------------------------------
*
* This example assumes that two BoosterPacks will be used to showcase the
* wireless radio communication functionality. This same code should be
* programmed to both LaunchPad development kits.
*
* This BoosterPack relies on the SPI hardware peripheral and two additional
* GPIO lines for SPI chip-select and GDO0 for packet handling. They use pins 18
* and 19 respectively.
*
* In the default configuration, this BoosterPack is not compatible with an
* external crystal oscillator. This can be changed, if necessary, and would
* require reconfiguration of the BoosterPack hardware and changes to the
* AIR430BoostFCC library. Refer to the BoosterPack User's Manual if necessary.
*
* For complete information, please refer to the BoosterPack User's Manual available at:
* https://www.anaren.com/air/cc110l-air-module-boosterpack-embedded-antenna-module-anaren
*
* To purchase the 430Boost-CC110L AIR module BoosterPack kit, please visit the TI eStore at:
* https://estore.ti.com/430BOOST-CC110L-CC110L-RF-Module-BoosterPack-P2734.aspx
*/
// The AIR430BoostFCC library uses the SPI library internally. Energia does not
// copy the library to the output folder unless it is referenced here.
// The order of includes is also important due to this fact.
#include <SPI.h>
#include <AIR430BoostFCC.h>
// -----------------------------------------------------------------------------
/**
* Global data
*/
// Data to write to radio TX FIFO (60 bytes MAX.)
unsigned char txData[6] = { 0x30, 'A', 'i', 'r', '!', '\0' };
// Data to read from radio RX FIFO (60 bytes MAX.)
unsigned char rxData[6] = { '\0', '\0', '\0', '\0', '\0', '\0' };
// -----------------------------------------------------------------------------
// Debug print functions
void printTxData()
{
Serial.print("TX (DATA): ");
Serial.println((char*)txData);
}
void printRxData()
{
/**
* The following illustrates various information that can be obtained when
* receiving a message. This includes: the received data and associated
* status information (RSSI, LQI, and CRC_OK bit).
*/
Serial.print("RX (DATA, RSSI, LQI, CRCBIT): ");
Serial.print("(");
Serial.print((char*)rxData);
Serial.print(", ");
Serial.print(Radio.getRssi());
Serial.print(", ");
Serial.print(Radio.getLqi());
Serial.print(", ");
Serial.print(Radio.getCrcBit());
Serial.println(")");
}
// -----------------------------------------------------------------------------
// Main example
void setup()
{
// The radio library uses the SPI library internally, this call initializes
// SPI/CSn and GDO0 lines. Also setup initial address, channel, and TX power.
Radio.begin(0x01, CHANNEL_1, POWER_MAX);
// Setup serial for debug printing.
Serial.begin(9600);
/**
* Setup LED for example demonstration purposes.
*
* Note: Set radio first to ensure that GDO2 line isn't being driven by the
* MCU as it is an output from the radio.
*/
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, LOW); // set the LED on
}
void loop()
{
// Load the txData into the radio TX FIFO and transmit it to the broadcast
// address.
Radio.transmit(ADDRESS_BROADCAST, txData, 6);
printTxData(); // TX debug information
// Increment tx data sequence number ('0'-'9' ASCII) for next transmission.
if (txData[0] >= '0' && txData[0] < '9')
{
txData[0]++;
}
else
{
txData[0] = '0';
}
/**
* The radio transmitter and receiver cannot be operated at the same time.
* Wait until transmit completes before turning on the receiver. Please note
* that the radio is considered busy when it is transmitting.
*
* WARNING: If busy is not checked between two successive radio operations
* receiverOn/transmit, the radio may not perform the specified task. The
* radio must be complete with the transmission before it can begin the next
*/
while (Radio.busy());
// Turn on the receiver and listen for incoming data. Timeout after 1 seconds.
// The receiverOn() method returns the number of bytes copied to rxData.
if (Radio.receiverOn(rxData, sizeof(rxData), 1000) > 0)
{
/**
* Data has been received and has been copied to the rxData buffer provided
* to the receiverOn() method. At this point, rxData is available. See
* printRxData() for more information.
*/
digitalWrite(RED_LED, HIGH);
printRxData(); // RX debug information
}
digitalWrite(RED_LED, LOW);
}
/**
* WirelessTest - test transceiver sketch using AIR430Boost FCC driver.
* Copyright (C) 2012-2013 Anaren Microwave, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* This example demonstrates usage of the AIR430BoostETSI library which uses
* the 430Boost-CC110L AIR Module BoosterPack created by Anaren Microwave, Inc.
* and available through the TI eStore, for the European Union.
*
* ----------------------------------------------------------------------------
*
* Note: This file is part of AIR430Boost.
*
* ----------------------------------------------------------------------------
*
* Description
* ===========
*
* Each radio will send a message consisting of: 1 byte counter, 5 byte static
* text. The counter will count from 0 to 9 and will rollover. Each radio will
* wait in receive mode for approximately one second. Upon receiving data, or
* timeout of one second, the radio receive function will return. If valid data
* was received, the radio's receiverOn() method will return the number of bytes
* that were received. In this example, the data can be monitored on the serial
* port (please refer to printTxData() and printRxData() functions).
*
* ----------------------------------------------------------------------------
*
* This example assumes that two BoosterPacks will be used to showcase the
* wireless radio communication functionality. This same code should be
* programmed to both LaunchPad development kits.
*
* This BoosterPack relies on the SPI hardware peripheral and two additional
* GPIO lines for SPI chip-select and GDO0 for packet handling. They use pins 18
* and 19 respectively.
*
* In the default configuration, this BoosterPack is not compatible with an
* external crystal oscillator. This can be changed, if necessary, and would
* require reconfiguration of the BoosterPack hardware and changes to the
* AIR430BoostFCC library. Refer to the BoosterPack User's Manual if necessary.
*
* For complete information, please refer to the BoosterPack User's Manual available at:
* https://www.anaren.com/air/cc110l-air-module-boosterpack-embedded-antenna-module-anaren
*
* To purchase the 430Boost-CC110L AIR module BoosterPack kit, please visit the TI eStore at:
* https://estore.ti.com/430BOOST-CC110L-CC110L-RF-Module-BoosterPack-P2734.aspx
*/
// The AIR430BoostFCC library uses the SPI library internally. Energia does not
// copy the library to the output folder unless it is referenced here.
// The order of includes is also important due to this fact.
#include <SPI.h>
#include <AIR430BoostFCC.h>
#include "LCD_SharpBoosterPack_SPI.h"
#include "Energia.h"
// -----------------------------------------------------------------------------
/**
* Global data
*/
// Data to write to radio TX FIFO (60 bytes MAX.)
unsigned char txData[6] = { 0x30, 'A', 'i', 'r', '!', '\0' };
// Data to read from radio RX FIFO (60 bytes MAX.)
unsigned char rxData[6] = { '\0', '\0', '\0', '\0', '\0', '\0' };
LCD_SharpBoosterPack_SPI myScreen;
uint8_t k = 0;
// -----------------------------------------------------------------------------
// Debug print functions
void printTxData()
{
Serial.print("TX (DATA): ");
Serial.println((char*)txData);
}
void printRxData()
{
/**
* The following illustrates various information that can be obtained when
* receiving a message. This includes: the received data and associated
* status information (RSSI, LQI, and CRC_OK bit).
*/
Serial.print("RX (DATA, RSSI, LQI, CRCBIT): ");
Serial.print("(");
Serial.print((char*)rxData);
Serial.print(", ");
Serial.print(Radio.getRssi());
Serial.print(", ");
Serial.print(Radio.getLqi());
Serial.print(", ");
Serial.print(Radio.getCrcBit());
Serial.println(")");
}
// -----------------------------------------------------------------------------
// Main example
void setup()
{
// The radio library uses the SPI library internally, this call initializes
// SPI/CSn and GDO0 lines. Also setup initial address, channel, and TX power.
Radio.begin(0x01, CHANNEL_1, POWER_MAX);
// Setup serial for debug printing.
Serial.begin(9600);
/**
* Setup LED for example demonstration purposes.
*
* Note: Set radio first to ensure that GDO2 line isn't being driven by the
* MCU as it is an output from the radio.
*/
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, LOW); // set the LED on
#if defined(__MSP430__)
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
#elif defined(__LM4F120H5QR__)
//SPI.Select(2);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV128); // for LM4F120H5QR DIV2 = 4 MHz !
#elif defined(__CC3200R1M1RGC__)
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2); // for __CC3200R1M1RGC__ DIV2 = 4 MHz !
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
#endif
myScreen.begin();
myScreen.setFont(1);
myScreen.text(10, 10, "Hello!");
myScreen.flush();
delay(1000);
myScreen.clear();
}
void loop()
{
// Load the txData into the radio TX FIFO and transmit it to the broadcast
// address.
Radio.transmit(ADDRESS_BROADCAST, txData, 6);
printTxData(); // TX debug information
// Increment tx data sequence number ('0'-'9' ASCII) for next transmission.
if (txData[0] >= '0' && txData[0] < '9')
{
txData[0]++;
}
else
{
txData[0] = '0';
}
/**
* The radio transmitter and receiver cannot be operated at the same time.
* Wait until transmit completes before turning on the receiver. Please note
* that the radio is considered busy when it is transmitting.
*
* WARNING: If busy is not checked between two successive radio operations
* receiverOn/transmit, the radio may not perform the specified task. The
* radio must be complete with the transmission before it can begin the next
*/
while (Radio.busy());
// Turn on the receiver and listen for incoming data. Timeout after 1 seconds.
// The receiverOn() method returns the number of bytes copied to rxData.
if (Radio.receiverOn(rxData, sizeof(rxData), 1000) > 0)
{
/**
* Data has been received and has been copied to the rxData buffer provided
* to the receiverOn() method. At this point, rxData is available. See
* printRxData() for more information.
*/
digitalWrite(RED_LED, HIGH);
printRxData(); // RX debug information
}
digitalWrite(RED_LED, LOW);
k++;
myScreen.clearBuffer();
myScreen.setFont(0);
myScreen.text(k, 10, (char*)rxData);
for (uint8_t i=10; i<LCD_HORIZONTAL_MAX-10; i++) {
myScreen.setXY(i,20,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50+i,30,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50,30+i,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(50+i,50,1);
}
for (uint8_t i=0; i<=20; i++) {
myScreen.setXY(70,30+i,1);
}
myScreen.setFont(1);
myScreen.text(10, 60, "ABC");
myScreen.flush();
//delay(200);
}
Comments