Page : | [ 1 ] | [ 2 ] | [ 3 ] | [ 4 ] | [ 5 ] |
This is the first go around for the software and could probably go for a bit of cleaning up in the future :)
First up is the software running on the Atmega328 (Arduino). Basically this taskes the IR input from the remote and sends it via serial to the ESP.
/*
* the IR library used was the library from
* Ken Shirriff
* http://arcfn.com
*/
/*
the codes from a crap remote i used for testing and the apple remote i use
generic apple
up : FF18E7 16718055 77E1D0F3 2011287795
down : FF4AB5 16730805 77E1B0F3 2011279603
left : FF10EF 16716015 77E110F3 2011238643
right : FF5AA5 16734885 77E1E0F3 2011291891
select: FF38C7 16726215 77E1BAF3 2011282163
play : FF52AD 16732845 77E17AF3 2011265779
back : FF42BD 16728765 77E140F3 2011250931
*/
#include <IRremote.h>
#include <SoftwareSerial.h>
#define VALUE_UP 2011287795
#define VALUE_DOWN 2011279603
#define VALUE_LEFT 2011238643
#define VALUE_RIGHT 2011291891
#define VALUE_SELECT 2011282163
#define VALUE_PLAY 2011265779
#define VALUE_BACK 2011250931
SoftwareSerial mySerial(8, 9); // RX, TX
int RECV_PIN = 6;
int LED_PIN = 7;
volatile long value = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long previousLedMillis = 0;
const long intervalLed = 250;
unsigned long previousMillis = 0;
const long interval = 250;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
pinMode(RECV_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
mySerial.begin(4800);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousLedMillis >= intervalLed) {
previousLedMillis = currentMillis;
digitalWrite(LED_PIN, LOW);
}
if (irrecv.decode(&results)) {
digitalWrite(LED_PIN, HIGH);
if (results.value != 4294967295){
value = results.value;
}
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int sendValue = 0;
switch (value) {
case VALUE_UP: // up
sendValue = 1;
break;
case VALUE_DOWN: // down
sendValue = 2;
break;
case VALUE_LEFT: // left
sendValue = 3;
break;
case VALUE_RIGHT: // right
sendValue = 4;
break;
case VALUE_SELECT: // select
sendValue = 5;
break;
case VALUE_PLAY: // play/pause
sendValue = 6;
break;
case VALUE_BACK: // back
sendValue = 7;
break;
default:
break;
}
if (sendValue > 0){
mySerial.write(sendValue);
}
}
irrecv.resume(); // Receive the next value
}
delay(100);
}
The next page lists the code running on the ESP.
(Page 4 of 5) | ||