Merge pull request #1 from StrangeD0s/update-irremote-version
Update irremote version
This commit is contained in:
@@ -30,3 +30,5 @@
|
|||||||
*.exe
|
*.exe
|
||||||
*.out
|
*.out
|
||||||
*.app
|
*.app
|
||||||
|
|
||||||
|
secrets.h
|
||||||
@@ -1,3 +1,33 @@
|
|||||||
# Arduino Sony RM-D27M Minidisc Namer
|
# Arduino Sony RM-D27M Minidisc Namer
|
||||||
|
|
||||||
This is an arduino sketch to make an IR-remote control for easier title renaming on a Sony MDS-JE510 minidisc deck.
|
This is an arduino sketch to make an IR-remote control for easier title renaming on a Sony MDS-JE510 minidisc deck.
|
||||||
|
|
||||||
|
- Add webserver
|
||||||
|
- Add ir remote library
|
||||||
|
- Add SD-Card support to load html and css
|
||||||
|
|
||||||
|
Store WiFi secrets in a secrets.h like this:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define SSID "your-ssid"
|
||||||
|
#define PASSWORD "your-password"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Circuit
|
||||||
|
|
||||||
|
Circuit:
|
||||||
|
|
||||||
|
- LED attached to pin 13 (optional)
|
||||||
|
- IR Transmitter attached to pin 4 (connect to 5v or 3v3)
|
||||||
|
- SD-Module to load HTML and CSS from SD-card
|
||||||
|
|
||||||
|
Connect the SD card to the following pins:
|
||||||
|
|
||||||
|
SD Card | ESP32
|
||||||
|
------- | -----
|
||||||
|
3v3 | 3.3V
|
||||||
|
CS | 5
|
||||||
|
MOSI | 23
|
||||||
|
CLK | 18
|
||||||
|
MISO | 19
|
||||||
|
GND | GND
|
||||||
|
|||||||
@@ -0,0 +1,333 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
WebServer to use as replacement for Sony RM-D27M to control Sony MiniDisc decks.
|
||||||
|
|
||||||
|
Based on the the following sketches:
|
||||||
|
- SimpleWifiServer example
|
||||||
|
- ESP32/SD_Test
|
||||||
|
- IRremote/SendDemo
|
||||||
|
|
||||||
|
|
||||||
|
If the IP address of your shield is yourAddress:
|
||||||
|
http://yourAddress/H turns the LED on
|
||||||
|
http://yourAddress/L turns it off
|
||||||
|
|
||||||
|
|
||||||
|
Circuit:
|
||||||
|
- LED attached to pin 13 (optional)
|
||||||
|
- IR Transmitter attached to pin 4 (connect to 5v or 3v3)
|
||||||
|
- SD-Module to load HTML and CSS from SD-card
|
||||||
|
|
||||||
|
Connect the SD card to the following pins:
|
||||||
|
|
||||||
|
SD Card | ESP32
|
||||||
|
------- | -----
|
||||||
|
3v3 | 3.3V
|
||||||
|
CS | 5
|
||||||
|
MOSI | 23
|
||||||
|
CLK | 18
|
||||||
|
MISO | 19
|
||||||
|
GND | GND
|
||||||
|
|
||||||
|
developed for the ESP32vn IoT Uni board 2024
|
||||||
|
*/
|
||||||
|
#include "FS.h"
|
||||||
|
#include "SD.h"
|
||||||
|
#include "SPI.h"
|
||||||
|
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <IRremote.hpp>
|
||||||
|
#include "secrets.h"
|
||||||
|
#include "defines.h"
|
||||||
|
|
||||||
|
WiFiServer server(80);
|
||||||
|
|
||||||
|
/**** SD-Card Functions ****/
|
||||||
|
void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
|
||||||
|
{
|
||||||
|
Serial.printf("Listing directory: %s\n", dirname);
|
||||||
|
|
||||||
|
File root = fs.open(dirname);
|
||||||
|
if (!root)
|
||||||
|
{
|
||||||
|
Serial.println("Failed to open directory");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!root.isDirectory())
|
||||||
|
{
|
||||||
|
Serial.println("Not a directory");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = root.openNextFile();
|
||||||
|
while (file)
|
||||||
|
{
|
||||||
|
if (file.isDirectory())
|
||||||
|
{
|
||||||
|
Serial.print(" DIR : ");
|
||||||
|
Serial.println(file.name());
|
||||||
|
if (levels)
|
||||||
|
{
|
||||||
|
listDir(fs, file.path(), levels - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.print(" FILE: ");
|
||||||
|
Serial.print(file.name());
|
||||||
|
Serial.print(" SIZE: ");
|
||||||
|
Serial.println(file.size());
|
||||||
|
}
|
||||||
|
file = root.openNextFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void readFile(fs::FS &fs, const char *path)
|
||||||
|
{
|
||||||
|
Serial.printf("Reading file: %s\n", path);
|
||||||
|
|
||||||
|
File file = fs.open(path);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
Serial.println("Failed to open file for reading");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("Read from file: ");
|
||||||
|
while (file.available())
|
||||||
|
{
|
||||||
|
Serial.write(file.read());
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void testFileIO(fs::FS &fs, const char *path)
|
||||||
|
{
|
||||||
|
File file = fs.open(path);
|
||||||
|
static uint8_t buf[512];
|
||||||
|
size_t len = 0;
|
||||||
|
uint32_t start = millis();
|
||||||
|
uint32_t end = start;
|
||||||
|
if (file)
|
||||||
|
{
|
||||||
|
len = file.size();
|
||||||
|
size_t flen = len;
|
||||||
|
start = millis();
|
||||||
|
while (len)
|
||||||
|
{
|
||||||
|
size_t toRead = len;
|
||||||
|
if (toRead > 512)
|
||||||
|
{
|
||||||
|
toRead = 512;
|
||||||
|
}
|
||||||
|
file.read(buf, toRead);
|
||||||
|
len -= toRead;
|
||||||
|
}
|
||||||
|
end = millis() - start;
|
||||||
|
Serial.printf("%u bytes read for %u ms\n", flen, end);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.println("Failed to open file for reading");
|
||||||
|
}
|
||||||
|
|
||||||
|
file = fs.open(path, FILE_WRITE);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
Serial.println("Failed to open file for writing");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t i;
|
||||||
|
start = millis();
|
||||||
|
for (i = 0; i < 2048; i++)
|
||||||
|
{
|
||||||
|
file.write(buf, 512);
|
||||||
|
}
|
||||||
|
end = millis() - start;
|
||||||
|
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============ IR Functions ============ */
|
||||||
|
void sendButton(int command)
|
||||||
|
{
|
||||||
|
Serial.println(command);
|
||||||
|
Serial.flush();
|
||||||
|
IrSender.sendSony(0xF, command, 2, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============ Setup ============ */
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
pinMode(LED_PIN, OUTPUT); // set the LED pin mode
|
||||||
|
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
/* ============ SD-Card Setup ============ */
|
||||||
|
if (!SD.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Mount Failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint8_t cardType = SD.cardType();
|
||||||
|
|
||||||
|
if (cardType == CARD_NONE)
|
||||||
|
{
|
||||||
|
Serial.println("No SD card attached");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("SD Card Type: ");
|
||||||
|
if (cardType == CARD_MMC)
|
||||||
|
{
|
||||||
|
Serial.println("MMC");
|
||||||
|
}
|
||||||
|
else if (cardType == CARD_SD)
|
||||||
|
{
|
||||||
|
Serial.println("SDSC");
|
||||||
|
}
|
||||||
|
else if (cardType == CARD_SDHC)
|
||||||
|
{
|
||||||
|
Serial.println("SDHC");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.println("UNKNOWN");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
|
||||||
|
Serial.printf("SD Card Size: %lluMB\n", cardSize);
|
||||||
|
|
||||||
|
listDir(SD, "/", 0);
|
||||||
|
readFile(SD, "/index.html");
|
||||||
|
Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
|
||||||
|
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
|
||||||
|
|
||||||
|
/* ============ IR Setup ============ */
|
||||||
|
IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin
|
||||||
|
Serial.println();
|
||||||
|
Serial.print(F("Send IR signals at pin "));
|
||||||
|
Serial.println(IR_SEND_PIN);
|
||||||
|
|
||||||
|
/* ============ Webserver Setup ============ */
|
||||||
|
|
||||||
|
// We start by connecting to a WiFi network
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("Connecting to ");
|
||||||
|
Serial.println(SSID);
|
||||||
|
|
||||||
|
WiFi.begin(SSID, PASSWORD);
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED)
|
||||||
|
{
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.println("WiFi connected.");
|
||||||
|
Serial.println("IP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
|
||||||
|
server.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
WiFiClient client = server.available(); // listen for incoming clients
|
||||||
|
|
||||||
|
if (client)
|
||||||
|
{ // if you get a client,
|
||||||
|
Serial.println("New Client."); // print a message out the serial port
|
||||||
|
String currentLine = ""; // make a String to hold incoming data from the client
|
||||||
|
while (client.connected())
|
||||||
|
{ // loop while the client's connected
|
||||||
|
if (client.available())
|
||||||
|
{ // if there's bytes to read from the client,
|
||||||
|
char c = client.read(); // read a byte, then
|
||||||
|
Serial.write(c); // print it out the serial monitor
|
||||||
|
if (c == '\n')
|
||||||
|
{ // if the byte is a newline character
|
||||||
|
|
||||||
|
// if the current line is blank, you got two newline characters in a row.
|
||||||
|
// that's the end of the client HTTP request, so send a response:
|
||||||
|
if (currentLine.length() == 0)
|
||||||
|
{
|
||||||
|
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
|
||||||
|
// and a content-type so the client knows what's coming, then a blank line:
|
||||||
|
client.println("HTTP/1.1 200 OK");
|
||||||
|
client.println("Content-type:text/html");
|
||||||
|
client.println();
|
||||||
|
|
||||||
|
// the content of the HTTP response follows the header:
|
||||||
|
client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 13 on.<br>Click <a href=\"/L\">here</a> to turn the LED on pin 13 off.<br><a href=\"/power\">power</a><br><a href=\"/play\">play</a><br><a href=\"/pause\">pause</a><br><a href=\"/stop\">stop</a><br><a href=\"/prev\">previous track</a><br><a href=\"/next\">next track</a><br>");
|
||||||
|
client.print("<form action=\"/api/control-deck\" method=\"post\"><button name=\"control\" type=\"submit\" value=\"play\">play</button></form><br><form action=\"/api/control-deck\" method=\"get\"><input name=\"textinput\" type=\"text\" /><button type=\"submit\">send</button></form><br>");
|
||||||
|
|
||||||
|
// The HTTP response ends with another blank line:
|
||||||
|
client.println();
|
||||||
|
// break out of the while loop:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // if you got a newline, then clear currentLine:
|
||||||
|
currentLine = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (c != '\r')
|
||||||
|
{ // if you got anything else but a carriage return character,
|
||||||
|
currentLine += c; // add it to the end of the currentLine
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check to see if the client request was "GET /H" or "GET /L":
|
||||||
|
if (currentLine.endsWith("GET /H"))
|
||||||
|
{
|
||||||
|
digitalWrite(LED_PIN, HIGH); // GET /H turns the LED on
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /L"))
|
||||||
|
{
|
||||||
|
digitalWrite(LED_PIN, LOW); // GET /L turns the LED off
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /power"))
|
||||||
|
{
|
||||||
|
sendButton(POWER);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /play"))
|
||||||
|
{
|
||||||
|
sendButton(PLAY);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /pause"))
|
||||||
|
{
|
||||||
|
sendButton(PAUSE);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /stop"))
|
||||||
|
{
|
||||||
|
sendButton(STOP);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /prev"))
|
||||||
|
{
|
||||||
|
sendButton(PREV);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("GET /next"))
|
||||||
|
{
|
||||||
|
sendButton(NEXT);
|
||||||
|
}
|
||||||
|
if (currentLine.endsWith("POST /api/control-deck"))
|
||||||
|
{
|
||||||
|
|
||||||
|
Serial.println("POST");
|
||||||
|
char c = client.read();
|
||||||
|
Serial.print(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// close the connection:
|
||||||
|
client.stop();
|
||||||
|
Serial.println("Client Disconnected.");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,18 @@
|
|||||||
|
// Pin definitions
|
||||||
|
#define IR_SEND_PIN 4
|
||||||
|
#define LED_PIN 13
|
||||||
|
|
||||||
|
// IR commands (Sony 12bit)
|
||||||
|
#define POWER 0x15
|
||||||
|
#define PLAY 0x2A
|
||||||
|
#define PAUSE 0x29
|
||||||
|
#define STOP 0x28
|
||||||
|
#define PREV 0x20 //geraten
|
||||||
|
#define NEXT 0x21
|
||||||
|
|
||||||
|
//old commands
|
||||||
#define EJECT 0x69E
|
#define EJECT 0x69E
|
||||||
#define POWER 0xA9E
|
//#define POWER 0xA9E
|
||||||
#define DISPLAY 0x19E
|
#define DISPLAY 0x19E
|
||||||
#define SCROLL 0x99E
|
#define SCROLL 0x99E
|
||||||
#define CONTINUE 0xB9E
|
#define CONTINUE 0xB9E
|
||||||
@@ -41,11 +54,11 @@
|
|||||||
#define CHAR 0x6DE
|
#define CHAR 0x6DE
|
||||||
#define NUM 0xEDE
|
#define NUM 0xEDE
|
||||||
#define CLEAR 0xF1E
|
#define CLEAR 0xF1E
|
||||||
#define PLAY 0x55E
|
// #define PLAY 0x55E
|
||||||
#define PAUSE 0x95E
|
// #define PAUSE 0x95E
|
||||||
#define STOP 0x15E
|
// #define STOP 0x15E
|
||||||
#define AMSPREV 0x05E
|
// #define AMSPREV 0x05E
|
||||||
#define AMSNEXT 0x85E
|
// #define AMSNEXT 0x85E
|
||||||
#define RECORD 0xB5E
|
#define RECORD 0xB5E
|
||||||
#define REWIND 0xD5E
|
#define REWIND 0xD5E
|
||||||
#define FASTFORWARD 0x35E
|
#define FASTFORWARD 0x35E
|
||||||
|
|||||||
@@ -1,866 +0,0 @@
|
|||||||
// modified for use with Sony RM-D27M
|
|
||||||
// based on https://hackaday.io/project/165504-sony-minidisc-namer by smartroad
|
|
||||||
|
|
||||||
#include <IRremote.h> // Muss installiert werden. Funktioniert mit v2.5.0 Siehe https://github.com/Arduino-IRremote/Arduino-IRremote
|
|
||||||
#include "defines.h"
|
|
||||||
|
|
||||||
IRsend irsend;
|
|
||||||
|
|
||||||
char inputChars[64];
|
|
||||||
byte charCount = 0;
|
|
||||||
|
|
||||||
byte mode = 0; // Capitals = 0, Lowercase = 1
|
|
||||||
byte targetMode = 0;
|
|
||||||
boolean commandMode = true; // True = control playback | False = name entry mode
|
|
||||||
|
|
||||||
int totalCount = 0;
|
|
||||||
byte blockCount = 0;
|
|
||||||
|
|
||||||
// define the IT sendPin:
|
|
||||||
uint8_t tSendPin = 4; // IO4 auf AZ D1
|
|
||||||
|
|
||||||
/* start testing code for hardware button*/
|
|
||||||
// constants won't change. They're used here to set pin numbers:
|
|
||||||
uint8_t buttonPin = 14; // the number of the pushbutton pin
|
|
||||||
uint8_t ledPin = 2; // the number of the LED pin
|
|
||||||
|
|
||||||
// variables will change:
|
|
||||||
uint8_t buttonState = 0; // variable for reading the pushbutton status
|
|
||||||
/* end testing code */
|
|
||||||
|
|
||||||
void setup()
|
|
||||||
{
|
|
||||||
pinMode(2, OUTPUT);
|
|
||||||
// Initialize serial monitor:
|
|
||||||
Serial.begin(115200);
|
|
||||||
while (!Serial)
|
|
||||||
;
|
|
||||||
// helpText();
|
|
||||||
pinMode(tSendPin, OUTPUT);
|
|
||||||
digitalWrite(tSendPin, LOW);
|
|
||||||
/* start testing code */
|
|
||||||
// initialize the LED pin as an output:
|
|
||||||
pinMode(ledPin, OUTPUT);
|
|
||||||
// initialize the pushbutton pin as an input:
|
|
||||||
pinMode(buttonPin, INPUT);
|
|
||||||
digitalWrite(ledPin, HIGH);
|
|
||||||
/* end testing code */
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop()
|
|
||||||
{
|
|
||||||
// blink(); //! Der Loop wird gerade nur einmal ausgeführt und stoppt bei der serial monitor eingabe. Bei jeder Eingabe erfolgt ein neue Loop. Alle test-Funktionen laufen durch.
|
|
||||||
// simpleButtonTest();
|
|
||||||
buttonPlayTest();
|
|
||||||
|
|
||||||
// oldSerialInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
void simpleButtonTest()
|
|
||||||
{
|
|
||||||
/* start testing code */
|
|
||||||
// read the state of the pushbutton value:
|
|
||||||
buttonState = digitalRead(buttonPin);
|
|
||||||
|
|
||||||
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
|
|
||||||
if (buttonState == HIGH)
|
|
||||||
{
|
|
||||||
// write to serial monitor:
|
|
||||||
Serial.println(F("button state is HIGH"));
|
|
||||||
// turn LED on:
|
|
||||||
digitalWrite(ledPin, HIGH);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// turn LED off:
|
|
||||||
digitalWrite(ledPin, LOW);
|
|
||||||
}
|
|
||||||
/* end testing code */
|
|
||||||
}
|
|
||||||
|
|
||||||
void buttonPlayTest()
|
|
||||||
{
|
|
||||||
/* start testing code */
|
|
||||||
// read the state of the pushbutton value:
|
|
||||||
buttonState = digitalRead(buttonPin);
|
|
||||||
|
|
||||||
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
|
|
||||||
if (buttonState == HIGH)
|
|
||||||
{
|
|
||||||
// write to serial monitor:
|
|
||||||
Serial.println(F("button state is HIGH"));
|
|
||||||
// turn LED on:
|
|
||||||
digitalWrite(ledPin, HIGH);
|
|
||||||
Serial.println(F("Play"));
|
|
||||||
sendButton(PLAY);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// turn LED off:
|
|
||||||
digitalWrite(ledPin, LOW);
|
|
||||||
}
|
|
||||||
/* end testing code */
|
|
||||||
}
|
|
||||||
|
|
||||||
void oldSerialInput()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (commandMode)
|
|
||||||
{
|
|
||||||
if (charCount > 0)
|
|
||||||
{
|
|
||||||
Serial.println(F("\n\r\u001b[34;1mCONFIRM NAME INPUT\u001b[0m"));
|
|
||||||
Serial.println(F("Y - Yes or N - NO"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Serial.print(F("\n\r\n\rEnter Command (H for help): "));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!Serial.available())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if (commandMode)
|
|
||||||
{
|
|
||||||
|
|
||||||
char serialChar = Serial.read();
|
|
||||||
if (charCount == 0)
|
|
||||||
{
|
|
||||||
if (serialChar == 'b')
|
|
||||||
{
|
|
||||||
Serial.println(F("Next Track"));
|
|
||||||
sendButton(AMSNEXT);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'z')
|
|
||||||
{
|
|
||||||
Serial.println(F("Previous Track"));
|
|
||||||
sendButton(AMSPREV);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'x')
|
|
||||||
{
|
|
||||||
Serial.println(F("Play"));
|
|
||||||
sendButton(PLAY);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'c')
|
|
||||||
{
|
|
||||||
Serial.println(F("Pause"));
|
|
||||||
sendButton(PAUSE);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'v')
|
|
||||||
{
|
|
||||||
Serial.println(F("Stop"));
|
|
||||||
sendButton(STOP);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'l')
|
|
||||||
{
|
|
||||||
Serial.println(F("Eject"));
|
|
||||||
sendButton(EJECT);
|
|
||||||
}
|
|
||||||
else if (serialChar == 's')
|
|
||||||
{
|
|
||||||
Serial.println(F("Starting Record"));
|
|
||||||
sendButton(RECORD);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'S')
|
|
||||||
{
|
|
||||||
Serial.println(F("Music Sync Recording"));
|
|
||||||
sendButton(MUSICSYNC);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'd')
|
|
||||||
{
|
|
||||||
Serial.println(F("Display Mode"));
|
|
||||||
sendButton(DISPLAY);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'D')
|
|
||||||
{
|
|
||||||
Serial.println(F("Scrolling Display"));
|
|
||||||
sendButton(SCROLL);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'r')
|
|
||||||
{
|
|
||||||
Serial.println(F("Repeat Mode"));
|
|
||||||
sendButton(REPEATMODE);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'R')
|
|
||||||
{
|
|
||||||
Serial.println(F("Section Repeat (A<>B)"));
|
|
||||||
sendButton(ATOB);
|
|
||||||
}
|
|
||||||
else if (serialChar == '1')
|
|
||||||
{
|
|
||||||
Serial.print(F("1"));
|
|
||||||
// sendButton(NUMBER1);
|
|
||||||
digitalWrite(ledPin, HIGH);
|
|
||||||
Serial.print(F("set ledPin HIGH"));
|
|
||||||
}
|
|
||||||
else if (serialChar == '2')
|
|
||||||
{
|
|
||||||
Serial.print(F("2"));
|
|
||||||
// sendButton(NUMBER2);
|
|
||||||
digitalWrite(ledPin, LOW);
|
|
||||||
Serial.print(F("set ledPin LOW"));
|
|
||||||
}
|
|
||||||
else if (serialChar == '3')
|
|
||||||
{
|
|
||||||
Serial.print(F("3"));
|
|
||||||
sendButton(NUMBER3);
|
|
||||||
}
|
|
||||||
else if (serialChar == '4')
|
|
||||||
{
|
|
||||||
Serial.print(F("4"));
|
|
||||||
sendButton(NUMBER4);
|
|
||||||
}
|
|
||||||
else if (serialChar == '5')
|
|
||||||
{
|
|
||||||
Serial.print(F("5"));
|
|
||||||
sendButton(NUMBER5);
|
|
||||||
}
|
|
||||||
else if (serialChar == '6')
|
|
||||||
{
|
|
||||||
Serial.print(F("6"));
|
|
||||||
sendButton(NUMBER6);
|
|
||||||
}
|
|
||||||
else if (serialChar == '7')
|
|
||||||
{
|
|
||||||
Serial.print(F("7"));
|
|
||||||
sendButton(NUMBER7);
|
|
||||||
}
|
|
||||||
else if (serialChar == '8')
|
|
||||||
{
|
|
||||||
Serial.print(F("8"));
|
|
||||||
sendButton(NUMBER8);
|
|
||||||
}
|
|
||||||
else if (serialChar == '9')
|
|
||||||
{
|
|
||||||
Serial.print(F("9"));
|
|
||||||
sendButton(NUMBER9);
|
|
||||||
}
|
|
||||||
else if (serialChar == '0')
|
|
||||||
{
|
|
||||||
Serial.print(F("0"));
|
|
||||||
sendButton(NUMBER10);
|
|
||||||
}
|
|
||||||
else if (serialChar == '=' || serialChar == '+')
|
|
||||||
{
|
|
||||||
Serial.print(F(">10"));
|
|
||||||
sendButton(LARGER25);
|
|
||||||
}
|
|
||||||
else if (serialChar == '#')
|
|
||||||
{
|
|
||||||
Serial.print(F("CLEARING MEMUSAGE"));
|
|
||||||
totalCount = 0;
|
|
||||||
blockCount = 0;
|
|
||||||
memUsed();
|
|
||||||
}
|
|
||||||
else if (serialChar == '`')
|
|
||||||
{ // change to naming mode
|
|
||||||
Serial.println(F("Name Mode"));
|
|
||||||
commandMode = false;
|
|
||||||
memUsed();
|
|
||||||
Serial.println(F("\n\rType name and press enter to send:\u001b[37;1m"));
|
|
||||||
}
|
|
||||||
else if (serialChar == 'H' || serialChar == 'h')
|
|
||||||
{ // stop
|
|
||||||
Serial.println(F("Help\r\n\r\n"));
|
|
||||||
helpText();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (serialChar == 'Y' || serialChar == 'y')
|
|
||||||
{ // confirm name
|
|
||||||
totalCount += charCount;
|
|
||||||
blockCount += (charCount + 6) / 7;
|
|
||||||
memUsed();
|
|
||||||
charCount = 0;
|
|
||||||
sendButton(NAME);
|
|
||||||
}
|
|
||||||
else if (serialChar == 'N' || serialChar == 'n')
|
|
||||||
{ // cancel name
|
|
||||||
memUsed();
|
|
||||||
charCount = 0;
|
|
||||||
sendButton(STOP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inputChars[charCount] = Serial.read();
|
|
||||||
if (inputChars[charCount] == 10 || inputChars[charCount] == 13)
|
|
||||||
{
|
|
||||||
Serial.print(F("\u001b[0m"));
|
|
||||||
if (nameCheck())
|
|
||||||
sendName();
|
|
||||||
else
|
|
||||||
charCount = 0;
|
|
||||||
commandMode = true;
|
|
||||||
}
|
|
||||||
else if (inputChars[charCount] == 127)
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[charCount]);
|
|
||||||
charCount--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[charCount]);
|
|
||||||
charCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void memUsed()
|
|
||||||
{
|
|
||||||
float countPercent = (float(totalCount) / 1785) * 100;
|
|
||||||
float blockPercent = (float(blockCount) / 255) * 100;
|
|
||||||
Serial.print(F("\n\rTotal characters used: \u001b[1m"));
|
|
||||||
if (countPercent >= 75 && countPercent < 90)
|
|
||||||
Serial.print(F("\u001b[33m"));
|
|
||||||
else if (countPercent >= 90)
|
|
||||||
Serial.print(F("\u001b[31m"));
|
|
||||||
else
|
|
||||||
Serial.print(F("\u001b[32m"));
|
|
||||||
Serial.print(countPercent);
|
|
||||||
Serial.print(F("%\u001b[0m\u001b[0m\n\rTotal blocks used: \u001b[1m"));
|
|
||||||
if (blockPercent >= 75 && blockPercent < 90)
|
|
||||||
Serial.print(F("\u001b[33m"));
|
|
||||||
else if (blockPercent >= 90)
|
|
||||||
Serial.print(F("\u001b[31m"));
|
|
||||||
else
|
|
||||||
Serial.print(F("\u001b[32m"));
|
|
||||||
Serial.print(blockPercent);
|
|
||||||
Serial.print(F("%\u001b[0m\n\r"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendName()
|
|
||||||
{
|
|
||||||
Serial.println(F("\n\r\n\rActivating Name Edit on Player - \u001b[31mPress any key when player ready\u001b[0m"));
|
|
||||||
sendButton(NAME);
|
|
||||||
mode = 0;
|
|
||||||
targetMode = 0;
|
|
||||||
// delay(2000);
|
|
||||||
while (!Serial.available())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
char purge = Serial.read(); // dump the character
|
|
||||||
|
|
||||||
Serial.print(F("\n\rSending: \u001b[32;1m"));
|
|
||||||
|
|
||||||
for (byte c = 0; c < charCount; c++)
|
|
||||||
{
|
|
||||||
if (inputChars[c] >= 65 && inputChars[c] <= 90)
|
|
||||||
{ // Check if char is capital and switch to correct mode
|
|
||||||
targetMode = 0;
|
|
||||||
}
|
|
||||||
else if (inputChars[c] >= 97 && inputChars[c] <= 122)
|
|
||||||
{ // Check if char is lower and switch to correct mode
|
|
||||||
targetMode = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (mode != targetMode)
|
|
||||||
{
|
|
||||||
sendButton(CHAR);
|
|
||||||
delay(1000);
|
|
||||||
mode++;
|
|
||||||
if (mode > 1)
|
|
||||||
mode = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inputChars[c] == 'A')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(CONTINUE, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'B')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(SHUFFLE, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'C')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(PROGRAM, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'D')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(KEY_D, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'E')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(KEY_E, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'F')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER1, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'G')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER2, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'H')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER3, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'I')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER4, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'J')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER5, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'K')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER6, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'L')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER7, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'M')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER8, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'N')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER9, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'O')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER10, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'P')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER11, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'Q')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER12, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'R')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER13, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'S')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER14, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'T')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER15, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'U')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER16, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'V')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER17, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'W')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER18, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'X')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER19, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'Y')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER20, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'Z')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER21, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inputChars[c] == 'a')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(CONTINUE, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'b')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(SHUFFLE, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'c')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(PROGRAM, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'd')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(KEY_D, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'e')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(KEY_E, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'f')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER1, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'g')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER2, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'h')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER3, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'i')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER4, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'j')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER5, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'k')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER6, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'l')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER7, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'm')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER8, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'n')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER9, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'o')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER10, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'p')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER11, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'q')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER12, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'r')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER13, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 's')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER14, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 't')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER15, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'u')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER16, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'v')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER17, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'w')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER18, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'x')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER19, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'y')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER20, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 'z')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER21, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inputChars[c] == 39 || inputChars[c] == 96)
|
|
||||||
{ // ' and `
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER25, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 45 || inputChars[c] == 95)
|
|
||||||
{ // - or _
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER22, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 47 || inputChars[c] == 92)
|
|
||||||
{ // slash or backslash
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(LARGER25, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == 44)
|
|
||||||
{ // , not supported
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER1, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '.')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER24, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '(')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(ASPACE, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == ')')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(MSCAN, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == ':')
|
|
||||||
{ // : not supported
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER1, 8);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '!')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(ATOB, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '?')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(REPEATMODE, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inputChars[c] == '1')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER1, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '2')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER2, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '3')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER3, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '4')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER4, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '5')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER5, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '6')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER6, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '7')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER7, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '8')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER8, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '9')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER9, 1);
|
|
||||||
}
|
|
||||||
else if (inputChars[c] == '0')
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendNumCmd(NUMBER10, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inputChars[c] == ' ')
|
|
||||||
{ // space
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
sendCmd(NUMBER23, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Serial.print(F("\u001b[0m\n\r\n\rTotal characters needed: "));
|
|
||||||
Serial.print(charCount);
|
|
||||||
Serial.print(F("\n\rTotal blocks needed: "));
|
|
||||||
Serial.print((charCount + 6) / 7);
|
|
||||||
Serial.print(F("\n\r"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendCmd(int command, byte repeats)
|
|
||||||
{
|
|
||||||
for (int i = 0; i <= repeats - 1; i++)
|
|
||||||
{
|
|
||||||
sendButton(command);
|
|
||||||
delay(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendButton(int bts)
|
|
||||||
{
|
|
||||||
digitalWrite(tSendPin, HIGH);
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
irsend.sendSony(bts, 12); //! Hier wird das Command gesendet! Es besteht aus dem command und der bitlänge.
|
|
||||||
delay(25);
|
|
||||||
}
|
|
||||||
digitalWrite(tSendPin, LOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendNumCmd(int command, byte repeats)
|
|
||||||
{
|
|
||||||
for (int i = 0; i <= repeats - 1; i++)
|
|
||||||
{
|
|
||||||
sendButton(NUM);
|
|
||||||
delay(1000);
|
|
||||||
sendButton(command);
|
|
||||||
delay(100);
|
|
||||||
sendButton(NUM);
|
|
||||||
delay(1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void helpText()
|
|
||||||
{
|
|
||||||
Serial.print(F("\u001b[1m\u001b[7mMinidisc Namer\u001b[0m\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[1mCommands:\u001b[0m\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[32mGeneral:\n\r\
|
|
||||||
\u001b[0mz Previous Track\n\r\
|
|
||||||
x Play\n\r\
|
|
||||||
c Pause\n\r\
|
|
||||||
v Stop\n\r\
|
|
||||||
b Next Track\n\r\
|
|
||||||
l Eject\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[31mRecording:\n\r\
|
|
||||||
\u001b[0ms Record\n\r\
|
|
||||||
S Music Sync Recording\n\r\
|
|
||||||
i Input Selection\n\r\
|
|
||||||
q Recording Mode\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[33mNumbers:\n\r\
|
|
||||||
\u001b[0m0-9 Number Entry\n\r\
|
|
||||||
=/+ >10 Entry\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[34;1mDisplay:\n\r\
|
|
||||||
\u001b[0md Display\n\r\
|
|
||||||
D Scroll Display\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[36mPlaymodes/Repeating:\n\r\
|
|
||||||
\u001b[0mp Play Mode (Normal/Shuffle/Program)\n\r\
|
|
||||||
r Repeat\n\r\
|
|
||||||
R A <-> B\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[32;1mNaming Disc/Tracks:\n\r\
|
|
||||||
\u001b[0m` Name Entry Mode\n\r\
|
|
||||||
# Reset Memory Usage Stats\n\r\
|
|
||||||
\n\r\
|
|
||||||
\u001b[37;1mh This help list\u001b[0m\n\r\n\r"));
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean nameCheck()
|
|
||||||
{
|
|
||||||
Serial.print(F("\n\r\n\r\n\rSend this to player (Y/N):\n\r\u001b[37;1m"));
|
|
||||||
for (byte c = 0; c < charCount; c++)
|
|
||||||
{
|
|
||||||
Serial.print(inputChars[c]);
|
|
||||||
}
|
|
||||||
Serial.print(F("\n\r\u001b[0m"));
|
|
||||||
while (!Serial.available())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
char serialChar = Serial.read();
|
|
||||||
if (serialChar == 'Y' || serialChar == 'y')
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void blink()
|
|
||||||
{
|
|
||||||
/* start testing code */
|
|
||||||
// read the state of the pushbutton value:
|
|
||||||
buttonState = digitalRead(buttonPin);
|
|
||||||
|
|
||||||
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
|
|
||||||
if (buttonState == HIGH)
|
|
||||||
{
|
|
||||||
// write to serial monitor:
|
|
||||||
Serial.println(F("button state is HIGH"));
|
|
||||||
// turn LED on:
|
|
||||||
digitalWrite(ledPin, HIGH);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// turn LED off:
|
|
||||||
digitalWrite(ledPin, LOW);
|
|
||||||
}
|
|
||||||
/* end testing code */
|
|
||||||
|
|
||||||
Serial.print(F("blink"));
|
|
||||||
// digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
|
|
||||||
// delay(1000); // wait for a second
|
|
||||||
// digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
|
|
||||||
// delay(1000);
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>SONY RM-D20P Pico Remote</title>
|
||||||
|
<!-- Required meta tags -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
||||||
|
/>
|
||||||
|
<!-- <link rel="stylesheet" href="style.css" /> -->
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--main-bg-color: #212121;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: var(--main-bg-color);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 150px;
|
||||||
|
padding: 12px 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 2px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
font-size: 16px;
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #454545;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-flex;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 2px 2px black;
|
||||||
|
height: 42px;
|
||||||
|
width: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active {
|
||||||
|
-webkit-box-shadow: inset 0px 0px 2px black;
|
||||||
|
-moz-box-shadow: inset 0px 0px 2px black;
|
||||||
|
box-shadow: inset 0px 0px 2px black;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-white {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.text-orange {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-with-line {
|
||||||
|
text-transform: uppercase;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-with-line:before,
|
||||||
|
.text-with-line:after {
|
||||||
|
content: "";
|
||||||
|
flex: 1 1;
|
||||||
|
border-bottom: 2px solid currentColor;
|
||||||
|
margin: auto 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.smallbutton {
|
||||||
|
height: 28px;
|
||||||
|
width: 56px;
|
||||||
|
background-color: #8a8a8a;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.roundbutton {
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upper-buttonbox {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #4d4d4d;
|
||||||
|
padding: 8px;
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
border: 2px solid grey;
|
||||||
|
border-bottom-color: black;
|
||||||
|
border-right-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lower-buttonbox {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #333333;
|
||||||
|
padding: 8px;
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
border: 2px solid grey;
|
||||||
|
border-bottom-color: black;
|
||||||
|
border-right-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textinput-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textinput {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 2px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
font-size: 16px;
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headline {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<h2 class="headline">SONY RM-D27M Remote</h2>
|
||||||
|
<span class="text-white text-with-line">LED Test Mode</span>
|
||||||
|
<div class="upper-buttonbox">
|
||||||
|
<form action="/api/control-led" method="post">
|
||||||
|
<button name="led" type="submit" value="1" class="smallbutton">
|
||||||
|
LED on
|
||||||
|
</button>
|
||||||
|
<button name="led" type="submit" value="0" class="smallbutton">
|
||||||
|
LED off
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="text-orange text-with-line">Title Editing</span>
|
||||||
|
<form action="/api/gettext" method="post" class="textinput-wrapper">
|
||||||
|
<textarea name="text_box" rows="4" cols="50"></textarea>
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<form action="/api/gettextinput" method="get" class="textinput-wrapper">
|
||||||
|
<label for="text_input">Change Title</label>
|
||||||
|
<input type="text" name="text_input" class="textinput" />
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="upper-buttonbox">
|
||||||
|
<form action="/api/control-deck" method="post">
|
||||||
|
<button
|
||||||
|
name="control"
|
||||||
|
type="submit"
|
||||||
|
value="power"
|
||||||
|
class="smallbutton"
|
||||||
|
>
|
||||||
|
power
|
||||||
|
</button>
|
||||||
|
<button name="control" type="submit" value="play" class="smallbutton">
|
||||||
|
play
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
name="control"
|
||||||
|
type="submit"
|
||||||
|
value="pause"
|
||||||
|
class="smallbutton"
|
||||||
|
>
|
||||||
|
pause
|
||||||
|
</button>
|
||||||
|
<button name="control" type="submit" value="stop" class="smallbutton">
|
||||||
|
stop
|
||||||
|
</button>
|
||||||
|
<button name="control" type="submit" value="next" class="smallbutton">
|
||||||
|
next
|
||||||
|
</button>
|
||||||
|
<button class="roundbutton"></button>
|
||||||
|
<button class="roundbutton"></button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="lower-buttonbox">
|
||||||
|
<button>Q</button>
|
||||||
|
<button>W</button>
|
||||||
|
<button>E</button>
|
||||||
|
<button>R</button>
|
||||||
|
<button>T</button>
|
||||||
|
<button>Z</button>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer>
|
||||||
|
<p>KEY BOARD REMOTE COMMANDER</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
/*
|
||||||
|
<script
|
||||||
|
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
|
||||||
|
integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
*/
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user