FireFly 2012: handheld remote with graphic LCD, IR receiver and Wii Nunchuk

From the Arduino sketchbook (Electronics\Arduino\Hexapod\hexapod_remote_glcd, was GLCD).
This commit is contained in:
mangavalk committed 2012-03-31 15:38:55 +02:00
1 parent 8e66e26bb9
commit 2e063fc0d9
1 file changed
+259
@@ -0,0 +1,259 @@
/*
GLCD Library - Hello World
This sketch prints "Hello World!" to the LCD
and shows the time in seconds since reset.
The circuit:
See the inlcuded documentation in glcd/doc directory for how to wire
up the glcd module. glcd/doc/GLCDref.htm can be viewed in your browser
by clicking on the file.
*/
// include the library header
#include "Arduino.h"
#include "hexapod.h"
#include "glcd.h"
//#include "math.h"
//#include "Wire.h"
//#include "WiiChuck.h"
#include "bitmaps/allBitmaps.h"
//#include "IRremote.h"
#define MAXANGLE 90
#define MINANGLE -90
// include the Fonts
#include "fonts/allFonts.h"
WiiChuck chuck = WiiChuck();
int angleStart, currentAngle;
int tillerStart = 0;
double angle;
int RECV_PIN = 11;
int m, mt; //mode
long int oud, oud2, oudt, t; //ouden ontvangen code
String protocol;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
// Initialize the GLCD
GLCD.Init();
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
// Select the font for the default text area
GLCD.SelectFont(SystemFont5x7);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the IR receiver
chuck.begin();
while (!chuck.plugd)
chuck.CheckifPlugd();
//GLCD.DrawBitmap(Earth, 0, 0, WHITE);
GLCD.CursorTo(12, 1);
GLCD.print("Nederland");
delay(3500);
}
long int getIR(decode_results *results) {
return results->value;
}
void dump(decode_results *results) {
int count = results->rawlen;
GLCD.CursorTo(0, 1);
if (results->decode_type == UNKNOWN) {
protocol = "Unknown encoding: ";
}
else if (results->decode_type == NEC) {
protocol = "Decoded NEC: ";
}
else if (results->decode_type == SONY) {
protocol = "Decoded SONY: ";
}
else if (results->decode_type == RC5) {
protocol = "Decoded RC5: ";
}
else if (results->decode_type == RC6) {
protocol = "Decoded RC6: ";
}
GLCD.print(protocol);
GLCD.CursorTo(0, 2);
GLCD.print(oud2, HEX);
GLCD.CursorTo(0, 3);
GLCD.print(oud, HEX);
GLCD.CursorTo(0, 4);
long int t = results->value;
oudt = t;
}
#define s1 50
#define s2 50
int stop = 0;
int stopstate = 0;
void loop()
{
if (irrecv.decode(&results)){
long int t2 = getIR(&results);
t = t2;
}
if (stop)
{
if ((t == 0x1045B) & (stopstate != 2)) {
mt = 0;
if (m == 0)
m = 1;
else
m = 0;
stopstate = 2;
}
else if (( t == 0x45B) & (stopstate != 3)) {
mt = 0;
if (m == 0)
m = 1;
else
m = 0;
stopstate = 3;
}
else if ((t == 0x1042C ) || ( t == 0x42C)) {
stop = false;
}
}
else if ((t == 0x431 ) || ( t == 0x10431)) {
digitalWrite(13, HIGH);
stop = true;
}
else if ((t == 0x40F ) || ( t == 0x1040F)) {
digitalWrite(13, HIGH);
irrecv.resume(); // Receive the next value
m = 60;
}
else if ((t == 0x1040C ) || ( t == 0x40C)) {
//power
GLCD.ClearScreen();
//GLCD.DrawBitmap(Power, 64, 0, BLACK);
while (1){
}
}
else
{
mt++;
digitalWrite(13, LOW);
}
switch (mt){
case 1:
m = 0;
break;
case s1:
m = 1;
break;
case s1+s2:
mt = 0;
break;
}
if (m == 0)
{
GLCD.ClearScreen();
GLCD.CursorTo(0, 0);
GLCD.print("IR Receiver");
//GLCD.DrawBitmap(Ir, 116, 0, BLACK);
if (irrecv.decode(&results)) {
dump(&results);
delay(100);
irrecv.resume(); // Receive the next value
oud2 = oud;
}
else
{
oud = oudt;
GLCD.CursorTo(0, 1);
GLCD.print(protocol);
GLCD.CursorTo(0, 2);
GLCD.print(oud2, HEX);
GLCD.CursorTo(0, 3);
GLCD.print(oud, HEX);
GLCD.CursorTo(0, 4);
GLCD.print("No DATA Input");
}
}
else
{
GLCD.ClearScreen();
chuck.update();
if (!chuck.plugd)
chuck.CheckifPlugd();
else {
GLCD.CursorTo(0, 0);
GLCD.print("MangaValk");
//GLCD.DrawBitmap(Nun, 106, 0, BLACK);
GLCD.CursorTo(0, 2);
GLCD.print("C: ");
GLCD.print(chuck.buttonC);
GLCD.print(" Z: ");
GLCD.print(chuck.buttonZ);
GLCD.CursorTo(0, 3);
GLCD.print("Roll: ");
GLCD.print(chuck.readRoll());
GLCD.CursorTo(0, 4);
GLCD.print("Pitch: ");
GLCD.print(chuck.readPitch()-75);
GLCD.CursorTo(0, 5);
GLCD.print("Jy: ");
GLCD.print(chuck.readJoyY());
GLCD.CursorTo(0, 6);
GLCD.print("Jx: ");
GLCD.print(chuck.readJoyX());
GLCD.CursorTo(0, 7);
GLCD.print("Atan2: ");
GLCD.print(atan2(chuck.readJoyX(), chuck.readJoyY()));
}
irrecv.resume(); // Receive the next value
}
delay(100);
}