terça-feira, 3 de outubro de 2023

Projetos elaborados, ferrovia

 

Data: 03/10/2023


Registro internet, realização dos projetos com sucesso!

-Monitoramento de circuitos de via, com acesso ao log via navegador.

-Monitoramento de correntes de MCH, com acesso ao log via navegador. com alarmes e display OLED 2,42

-Receptor portátil e decodificador dos códigos ATC, com display 1'' e também com display 2,42''

-Decodificador de códigos CBTC com display oled 2,42"

-Monitoramento dos circuitos Serra Cremalheira, via zigbee e LORA. 2012 já com prévia.

-Projeto do single car para testes de freio em vagões, com display oled 2.42", base para mais elaborado.

- Captador de material particulado de exaustores, locomotivas e geradores.

- Relé CTP eletrônico.

- Localizador de cabos, via vlf.

- Sensor de movimentação de MCH, com aquisição óptica de escalas x/y, temperatura e posicionamento de MCH, sem escala graduada. 1200dpi, comunicação com o concentrador via rs485....

sexta-feira, 24 de fevereiro de 2023

Controle WEB Mini System Sony

 

                           Controle de Mini System Sony pela internet


 Controle seus aparelhos de som da Sony pelo celular

Faça por conta e risco...


Pesquisei sobre o protocolo SIRC da Sony, daí clonei um controle pela entrada do microfone no pc com o programa Audacity (Melhor que osciloscópio)...


          Neste caso, Start  0000 1100 1011 1001 1100 em HEX: CB9C  comando: - <<

Foi utilizado a IDE do arduino, para programar um ESP32, na GPIO 26 utilizar um led IR com resistor de 120 ohms para proteção da saída, utiliza metade da corrente do led, pois o pino está limitado à 12mA e não 20mA que o led precisa, distância funcional sem drive 50 cm.


Página do servidor que está no ESP32

Programa completo:


// Base do protocolo Sony consultada em https://www.sbprojects.net/knowledge/ir/sirc.php

/*

Aparelho testado HCD-SH2000 100% funcional, extra o comando Eject

100% Compatível com os modelos de controle:

- RM-AMU006 / RM-AMU053 / RM-SC3 / RM-SCU37B

Aparelhos compatíveis: Não testados :)

MHC-GTR6 / CMT-LX10R 

CMT-FX200 / FST-SH2000

MHC-EC590 / / MHC-GTZ3

GTR33 / GTR888

MHC-EC599 / MHC-ESX6

MHC-ESX8 / MHC-ESX9

MHC-EX66 /MHC-EX88

MHC-EX99 / GTR555

HCD-ZUX9 / FST-ZUX9

HCD-GTX66 / MHC-GTX66

HCD-GTX77 / MHC-GTX77

HCD-GTX88 / MHC-GTX88

HCD-GTX787 / MHC-GTX787

HCD-GTX888 / MHC-GTX888

HCD-EX6 / MHC-EX6

HCD-EX8 / MHC-EX8

HCD-EC68 / MHC-EC68

HCD-GT22 / MHC-GT22

HCD-GT44 / MHC-GT44

HCD-GT111 / MHC-GT111

HCD-GT222 / MHC-GT222

HCD-GT444 / MHC-GT444

HCD-GT555 / MHC-GT555

HCD-EX660 / MCH-EX660

HCD-EX880 / MHC-EX880

 */

#include <WiFi.h>

unsigned long previousMillis = 0; 

unsigned long interval = 30000;

#define D1 26

#define CONNECT_TIME 10000

#define TIMEOUTTIME 5000


const char* ssid = "Sua rede aqui";

const char* password = "Senha da rede aqui";

WiFiServer server(80);


size_t currentTime = millis();

size_t previousTime = 0;

String header;


void setup() {

pinMode(D1, OUTPUT);

WiFi.begin(ssid, password);

server.begin();

}


void loop() {

WiFiClient client = server.available();

if (client) {

currentTime = millis();

previousTime = currentTime;

String currentLine = "";

unsigned long currentMillis = millis(); 

if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {

WiFi.disconnect();

//WiFi.reconnect();

previousMillis = currentMillis;}

while (client.connected() && currentTime - previousTime <= TIMEOUTTIME) {currentTime = millis();

if (client.available()) {char c = client.read();header += c;

if (c == '\n') {if (currentLine.length() == 0) {

client.println("<br />");

client.println("<h1 style=\"text-align:center; \" class=\"display-4\"><font color='Gold'><i><u>Controle Mini System Sony</u></i></h1> "); 


if (header.indexOf("GET /D1/on") >= 0) { // power ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: POWER</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();zero();um();zero();um();zero();zero();zero();zero();zero();zero();um();delay(45);}} //code 0xA81 POWER ON/OFF 101010000001


else if (header.indexOf("GET /D2/on") >= 0) { //sleep ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: SLEEP</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();zero();zero();zero();zero();um();um();zero();zero();zero();zero();um();delay(45);}} //code 0x061   Sleep 0000 0110 0001


else if (header.indexOf("GET /D3/on") >= 0) { // display ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Crimson'>State: DISPLAY</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();um();zero();um();zero();zero();um();zero();zero();zero();zero();um();delay(45);}} //END code 0xD21  Display 110100100001


else if (header.indexOf("GET /D4/on") >= 0) { // vol + ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: VOL +</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();um();zero();zero();um();zero();zero();zero();zero();zero();zero();um();delay(45);}} //code 0x481  VOL + 010010000001


else if (header.indexOf("GET /D5/on") >= 0) { // vol - ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: VOL -</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();um();um();zero();zero();um();zero();zero();zero();zero();zero();zero();um();delay(45);}} //code 0xC81 Vol - 110010000001


else if (header.indexOf("GET /D6/on") >= 0) { // play ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: PLAY</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();um();zero();zero();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x4CB9C  01001100101110011100   


else if (header.indexOf("GET /D7/on") >= 0) { // stop ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: STOP</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();zero();zero();um();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x1CB9C 0001 1100 1011 1001 1100


else if (header.indexOf("GET /D8/on") >= 0) { //set clock ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: SELECT (clock)</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();um();zero();zero();zero();um();um();zero();zero();zero();zero();um();delay(45);}} //code 0x461


else if (header.indexOf("GET /D13/on") >= 0) { //tunner / band ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: TUNER/BAND</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();um();um();um();um();zero();zero();zero();zero();zero();zero();zero();um();delay(45);}} //code 0xF01 111100000001


else if (header.indexOf("GET /D10/on") >= 0) { //pause ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State:PAUSE</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();um();zero();zero();um();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x9CB9C  1001 1100 1011 1001 1100       


else if (header.indexOf("GET /D11/on") >= 0) { //cd ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: CD</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();um();zero();um();zero();zero();um();zero();zero();zero();zero();zero();um();delay(45);}} //code 0xA41 1010 0100 0001


else if (header.indexOf("GET /D12/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: USB</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();zero();um();zero();um();um();zero();zero();zero();zero();zero();zero();um();zero();zero();um();delay(45);}} //code 0x2C09 010 1100 0000 1001


else if (header.indexOf("GET /D9/on") >= 0) { // eq ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='RED'>State: EQ</MARQUEE></2></i>"); 

for (int i = 0; i < 3; i++){start();um();um();zero();zero();zero();um();um();zero();zero();zero();zero();um();zero();zero();um();delay(45);}} //code 0x6309 110 0011 0000 1001


else if (header.indexOf("GET /D14/on") >= 0) { //function ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: FUNCTION</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();zero();zero();um();zero();um();um();zero();zero();zero();zero();um();zero();zero();um();delay(45);}} //code 0x4B09   100 1011 0000 1001                                                                           


else if (header.indexOf("GET /D15/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: - << </MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();zero();zero();zero();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0xCB9C  00001100 1011 1001 1100


else if (header.indexOf("GET /D16/on") >= 0) { // + >> ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: + >> </MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();zero();zero();zero();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x8CB9C 1000 1100 1011 1001 1100                                                                           


else if (header.indexOf("GET /D17/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: ENTER</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();zero();um();um();um();um();um();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x3EB9C  0011 1110 1011 1001 1100                                                                           


else if (header.indexOf("GET /D18/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: SET (clock)</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();zero();um();zero();zero();um();um();zero();zero();zero();zero();um();delay(45);}} //code 0xA61  101001100001                                                                          


else if (header.indexOf("GET /D19/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: << </MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();um();zero();zero();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0xCCB9C  1100 1100 1011 1001 1100                                                                        


else if (header.indexOf("GET /D20/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: >> </MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();zero();um();zero();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x2CB9C 0010 1100 1011 1001 1100                                                                        


else if (header.indexOf("GET /D21/on") >= 0) { // eject ok

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: EJECT</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();zero();um();um();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x3CB9C  0011 1100 1011 1001 1100


else if (header.indexOf("GET /D22/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: REPEAT / FM mode</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();zero();um();um();zero();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0xB4B9C  1011 0100 1011 1001 1100                                                                           


else if (header.indexOf("GET /D23/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: Tuner Memory</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();um();um();um();zero();zero();zero();zero();zero();zero();zero();um();delay(45);}} //code 0x701  0111 0000 0001                                                                         


else if (header.indexOf("GET /D24/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: Play M / Tuner M</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();zero();zero();um();zero();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x14B9C  0001 0100 1011 1001 1100                                                                          


else if (header.indexOf("GET /D25/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: CLEAR</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();um();um();um();zero();zero();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0xF0B9C 1111 0000 1011 1001 1100                                                                           


else if (header.indexOf("GET /D26/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: Disc Skip / USB Select</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();um();um();um();um();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x7CB9C 0111 1100 1011 1001 1100                                                                          


else if (header.indexOf("GET /D27/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: Folder -</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();zero();um();um();um();zero();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0x74B9C 0111 0100 1011 1001 1100                                                                           


else if (header.indexOf("GET /D28/on") >= 0) { //

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: Folder +</MARQUEE></2></i>");

for (int i = 0; i < 3; i++){start();um();um();um();um();zero();um();zero();zero();um();zero();um();um();um();zero();zero();um();um();um();zero();zero();delay(45);}} //code 0xF4B9C  1111 0100 1011 1001 1100                                                                           


client.println("<!DOCTYPE html><html>");

client.println("<head><meta name=\"viewport\" content=\"width=device-width(); initial-scale=1\">");

client.println("<meta charset=\"UTF-8\">");

client.println("<title>Controle Mini System Sony</title>");

client.println("<link rel=\"icon\" href=\"data:,\">");

client.println("<style> { font-family: Helvetica; display: inline-block; margin: 3px auto; text-align: center;}");

client.println(".mybtn { background-color: #4CAF50; border: 3px solid #4CAF50;border-radius:50px;; color: white; padding: 10px 15px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }");

client.println(".par { font-size: 16px;}"); 

client.println("p {text-align: center;}");

client.println("</style></head>"); 

client.println("<body style=background-color:#000000>"); 

client.println("<body class=\"bg-light\">");

client.println("<center><table>");

client.println("<td><p><a href=\"/D13/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">TUNER/BAND</a></p></td>");

client.println("<td><p><a href=\"/D14/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">FUNCTION</a></p></td>");

client.println("<tr>");

client.println("<td><p><a href=\"/D1/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #DC143C!important; color:#f8f9fa!important;\" >POWER</a></p></td>");

client.println("<td><p><a href=\"/D2/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">SLEEP</a></p></td>");         

client.println("<td><p><a href=\"/D3/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">DISPLAY</a></p></td>");        

client.println("<td><p><a href=\"/D4/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">VOL +</a></p></td>");

client.println("<tr>");      

client.println("<td><p><a href=\"/D5/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">VOL -</a></p></td>");      

client.println("<td><p><a href=\"/D6/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">PLAY</a></p></td>"); 

client.println("<td><p><a href=\"/D7/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">STOP</a></p></td>");         

client.println("<td><p><a href=\"/D8/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">SELECT (clock)</a></p></td>");          

client.println("</tr>");

client.println("<tr>");     

client.println("<td><p><a href=\"/D9/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">EQ</a></p></td>");

client.println("<td><p><a href=\"/D10/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">PAUSE</a></p></td>");

client.println("<td><p><a href=\"/D11/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">CD</a></p></td>");  

client.println("<td><p><a href=\"/D12/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">USB</a></p></td>");

client.println("</tr>"); 

client.println("<tr>");     

client.println("<td><p><a href=\"/D15/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> - << </a></p></td>");

client.println("<td><p><a href=\"/D16/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> + >> </a></p></td>");

client.println("<td><p><a href=\"/D17/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">ENTER</a></p></td>");  

client.println("<td><p><a href=\"/D18/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">SET (clock)</a></p></td>");

client.println("</tr>");

client.println("<tr>");     

client.println("<td><p><a href=\"/D19/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> << </a></p></td>");

client.println("<td><p><a href=\"/D20/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> >> </a></p></td>");

client.println("<td><p><a href=\"/D21/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">EJECT</a></p></td>");  

client.println("<td><p><a href=\"/D22/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">REPEAT / FM mode</a></p></td>");

client.println("</tr>");

client.println("<tr>");     

client.println("<td><p><a href=\"/D23/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> Tuner Memory </a></p></td>");

client.println("<td><p><a href=\"/D24/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\"> Play Mode / tuner Mode</a></p></td>");

client.println("<td><p><a href=\"/D25/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">CLEAR</a></p></td>");  

client.println("<td><p><a href=\"/D26/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">Disc skip / USB select</a></p></td>");

client.println("</tr>");

client.println("<tr>");     

client.println("<td><p><a href=\"/D27/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">Folder -</a></p></td>");

client.println("<td><p><a href=\"/D28/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">Folder +</a></p></td>");

client.println("</tr>");                                                                

client.println("</div>");

client.println("</body></html></div></form></table></center>");

client.println();

break;} else {

currentLine = "";}} 

else if (c != '\r') {

currentLine += c;}}}

header = ""; 

client.stop();}

delay(1);}


// Aqui controle dos bits 1, 0 e start gerando a portadora em 40KHZ

void um(){

for (int i = 0; i < 47; i++){   //48  |--|_  48x25=1200/600

   digitalWrite(D1, HIGH);

   delayMicroseconds(12.5);// 12.5uS

   digitalWrite(D1, LOW);

   delayMicroseconds(12.5);} //12.5uS}

   //digitalWrite(D1, LOW);

   delayMicroseconds(600); }//600uS}}

void zero(){

for (int i = 0; i < 23; i++){  //24   |-|_    24x25=600/600

   digitalWrite(D1, HIGH);

   delayMicroseconds(12.5); //12.5uS

   digitalWrite(D1, LOW);

   delayMicroseconds(12.5);} //12.5uS}

  // digitalWrite(D1, LOW);

   delayMicroseconds(600);} //600uS}}

void start(){

for (int i = 0; i < 95; i++){   //96    |----|_  96x25=2400/600

   digitalWrite(D1, HIGH);

   delayMicroseconds(12.5); //12.5uS

   digitalWrite(D1, LOW);

   delayMicroseconds(12.5);} //12.5uS}

   delayMicroseconds(600);} //600uS}}







domingo, 7 de agosto de 2022

JVC Compulink, COMPU LINK, JVC, Tape Deck, Arduino, DCS Codes

                                Protocolo JVC COMPU LINK e Arduino


 Quem tem um Tape Deck antigo com entrada COMPU LINK - 3, e não tem o amplificador com controle remoto, o mesmo pode ser controlado por outros equipamentos via cabo. Muitas vezes, obrigando à quem não tem os módulos restantes, pouco utilizarem o Tape Deck.

Exemplo de conexões


Ao procurar no GOOGLE, descobri, que existe um protocolo para envio de comandos via cabo, neste Site  https://github.com/jcj83429/jvc_compulink .

Detalhe do protocolo, com 9 bits 

Conforme o manual de serviço disponibilizado no Site, existem alguns comandos em Hexadecimal, que o usuário atestou na porta COMPU LINK.

DCS Codes(RM-S20) Remote Control

Agora, sei que dá para enviar códigos de controle neste terminal. Irei testar com um Arduino Mega.

Arduino Mega controlando Deck B


Conectando um Osciloscópio no terminal COMPU LINK e na terra do equipamento, ao pressionar play, observei parte do código que o equipamento enviou, provavelmente para ligar o resto do conjunto e pedir prioridade de execução.




                                                         Trecho do código enviado pelo Tape Deck




Agora, capturando o mesmo sinal na porta microfone do PC, rodando o programa Audacity.


                       Análise do sinal compulink com Audacity, sinal abaixo, reduzindo ganho do MIC



Agora como testar os Códigos DCS do manual:

- Realizar a conversão de Hex para Bin na calculadora do Windows.

Conversão do comando Play Hex/Bin

- Realizar alguns comandos (digitalWrite) no pino 13 do Arduino.


//Comandos em teste do Deck JVC W218, inicia pelo deck b

//Josicáudio J. Lima

//Base do protocolo https://github.com/jcj83429/jvc_compulink


#define saida 13

void setup() {pinMode(saida, OUTPUT);}

//códigos sem sucesso 26, 28, 30, 2B, 44, C0, C1, C2 

//códigos utilizados hex funcionais 20, 22, 23, 24, 25, 27, 29

void loop() {

  rec();delay(5000);

  pauses();delay(5000);

  ff();delay(5000);

  stope();delay(5000);

  play();delay(5000);

  pauses();delay(5000);

  rew();delay(5000);

  stope();delay(5000);

  tlado();delay(5000);


/*  

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0 

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

*/

}

void pauses(){//00100101 = 0x25

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

 }

void play() {//00100000 = 0x20

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

void rec(){//00101001 0x29

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

void tlado(){// 00100111 0x27

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

void ff(){//00100011 = 0x23

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

void stope(){//00100010 = 0x22

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

void rew(){//00100100 0x24

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); //BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  //BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

}

Pronto, o Tape Deck, respondeu perfeitamente!!!

No caso do programa acima:

- Inicia gravação no Deck b;

- Após 5S, realiza a pausa;

- Após 5S, Avança a fita;

- Após 5S, para;

- Após 5S, play;

- Após 5S, pausa;

- Após 5S, volta;

- Após 5S, para;

- Após 5S, troca o lado da fita;



Segue aplicação utilizada no Arduino Mega, para conversão e controle do Tape Deck JVC W218.

Pode ser modificado para várias aplicações, decodificações...



// Comandos play, avançar, retroceder, gravar, pausar, parar, trocar lado Deck B JVC W218

// Comandos play, avançar, retroceder, parar, trocar lado Deck A JVC W218

// Controle remoto Samsung

// Josicláudio J. Lima

// Podem ser realizados mapeamentos de vários controles, só abrir o Monitor serial do Arduino

#include <IRremote.h>

int RECV_PIN = 8; //Recebe na porta digital 8 receptor IR TSOP38238

IRrecv irrecv(RECV_PIN);

decode_results results;

#define saida 13

void setup() {

Serial.begin(9600);

irrecv.enableIRIn();

pinMode(saida, OUTPUT);

//códigos utilizados hex funcionais 20, 22, 23, 24, 25, 27, 29, 60, 62, 63, 64, 67

}

void loop() {

if (irrecv.decode(&results)) {     

Serial.println(results.value, DEC);//Decodifica os dados recebidos para decimal e envia para pc

irrecv.resume();//pega próximo valor

if(results.value == 1784778242){ //comando play 00100000 = 0x20

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 3774104872){ //comando pausa 00100101 = 0x25

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 3843765582){ //comando gravar 00101001 0x29

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 2770332734){ //comando trocar de lado 00100111 0x27

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 3980777284){ //comando avançar 00100011 = 0x23

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 3361986248){ //comando parar 00100010 = 0x22

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 1976685926){ //comando retroceder 0x24

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 2331063592){ //comando enter Play Deck A 0x60

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

if(results.value == 3261853764){ //comando Seta Acima Tlado  0x67

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

    if(results.value == 1400905448){ //comando Seta dir FF 0x63

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);  // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15); // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

    if(results.value == 1972149634){ //comando Seta Esq REW 0x64

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

    if(results.value == 3305092678){ //comando Seta baixo Stop 0x62

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(15);  // BIT 1

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW);delay(5);   // BIT 0

digitalWrite(saida, HIGH);delay(5);digitalWrite(saida, LOW); //END

    }

  }

}

/*

Mapeamento controle samsung tv AA59-00469A


play         1784778242

rec          3843765582

stop         3361986248

ff           3980777284

pause        3774104872

rew          1976685926

psize        2308325960

cc           2770332734

mts          1150532780

pmode        3135877228

srs          551334792

emanual      1268204482

a            3672802284

b            732942060

c            3038842278

d            1906441864

exit         158659426

return       1003313352

seta baixo   3305092678

seta direita 1400905448

seta esquerda 1972149634

seta superior 3261853764

ok setas      2331063592

info          1908947622

tools         1825097194

menu          1723810024

vol menos     2209452902

vol mais      1752382022

mudo          591444258

canal mais    1595074756

canal menos   412973352

0             3119867746

1             3778927144

2             2908251746

3             657459652

4             4120482440

5             1931099650

6             742730860

7             1167253836

8             1747313982

9             2340753640

hdmi          3241158247

source        3459683302

power         4105841032

ch list       1820560902

content       1809676774

guide         3468072230 

 */


Segue o mesmo código mais enxuto, sem escrita no monitor serial



// Comandos play, avançar, retroceder, gravar, pausar, parar, Reversao Deck B JVC W218

// Comandos play, avançar, retroceder, parar, Reversao Deck A JVC W218

// Controle remoto Samsung// Josicláudio J. Lima

#include <IRremote.h>

int RECV_PIN = 8;IRrecv irrecv(RECV_PIN);decode_results results;

#define A digitalWrite(13, HIGH);

#define B digitalWrite(13, LOW);

#define a delay(5);

#define b delay(15);

void setup() {irrecv.enableIRIn();pinMode(13, OUTPUT);}

void loop() {if (irrecv.decode(&results)) {irrecv.resume();

if(results.value == 1784778242){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;}//comando play 0x20

if(results.value == 3774104872){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;b;A;a;B;}//comando pausa 0x25

if(results.value == 3843765582){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;}//comando gravar 0x29

if(results.value == 2770332734){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;b;A;a;B;}//comando Reversao  0x27

if(results.value == 3980777284){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;}//comando avançar 0x23

if(results.value == 3361986248){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;}//comando parar 0x22

if(results.value == 1976685926){A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;}//comando retroceder 0x24

if(results.value == 2331063592){A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;}//comando enter Play Deck A 0x60

if(results.value == 3261853764){A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;b;A;a;B;}//comando Seta Acima reversao  0x67

if(results.value == 1400905448){A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;}//comando Seta dir FF 0x63

if(results.value == 1972149634){A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;}//comando Seta Esq REW 0x64

if(results.value == 3305092678){A;a;B;a;A;a;B;b;A;a;B;b;A;a;B;a;A;a;B;a;A;a;B;a;A;a;B;b;A;a;B;a;A;a;B;}//comando Seta baixo Stop 0x62

}

}

            


                               Controle do Tape Deck pela internet com ESP32 Wroom





 #include <WiFi.h>

unsigned long previousMillis = 0; 

unsigned long interval = 30000;

#define D1 26

#define CONNECT_TIME 10000

#define TIMEOUTTIME 5000


const char* ssid = "your_ssid";

const char* password = "your_password";

WiFiServer server(80);


size_t currentTime = millis();

size_t previousTime = 0;

String header;


void setup() {  

pinMode(D1, OUTPUT);

WiFi.begin(ssid, password);

server.begin();}


void loop() {

WiFiClient client = server.available();

if (client) {

currentTime = millis();

previousTime = currentTime;

String currentLine = "";

unsigned long currentMillis = millis(); 

if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {

WiFi.disconnect();

WiFi.reconnect();

previousMillis = currentMillis;}

while (client.connected() && currentTime - previousTime <= TIMEOUTTIME) {currentTime = millis();

if (client.available()) {char c = client.read();header += c;

if (c == '\n') {if (currentLine.length() == 0) {

client.println("<br />");

client.println("<h1 style=\"text-align:center; \" class=\"display-4\"><font color='Gold'><i><u>JVC TAPE DECK Control</u></i></h1> "); 

if (header.indexOf("GET /D1/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: PLAY B</MARQUEE></2></i>");

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x20

else if (header.indexOf("GET /D2/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: PAUSE B</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x25

else if (header.indexOf("GET /D3/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Crimson'>State: REC B</MARQUEE></2></i>");

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x29

else if (header.indexOf("GET /D4/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: SIDE B</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x27

else if (header.indexOf("GET /D5/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: FF B</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END  code 0x23

else if (header.indexOf("GET /D6/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: STOP B</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END  code 0x22     

else if (header.indexOf("GET /D7/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: REW B</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x24

else if (header.indexOf("GET /D8/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: PLAY A</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END  code 0x60

else if (header.indexOf("GET /D9/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: SIDE A</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x67

else if (header.indexOf("GET /D10/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: FF A</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);  // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15); // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END   code 0x63         

else if (header.indexOf("GET /D11/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: REW A</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0x64

else if (header.indexOf("GET /D12/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Cyan'>State: STOP A</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END  code 0x62

else if (header.indexOf("GET /D13/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='RED'>State: POWER OFF</MARQUEE></2></i>"); 

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END code 0xBF

else if (header.indexOf("GET /D14/on") >= 0) {

client.println("<h2 style=\"text-align:center; \" class=\"display-4\"><i><MARQUEE BEHAVIOR=SCROLL WIDTH=30%><font color='Gold'>State: POWER ON</MARQUEE></2></i>");

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(15);  // BIT 1

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);delay(5);   // BIT 0

digitalWrite(D1, HIGH);delay(5);digitalWrite(D1, LOW);} //END   code 0xBE                                                                             

client.println("<!DOCTYPE html><html>");

client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

client.println("<meta charset=\"UTF-8\">");

client.println("<title>JVC TAPE DECK Control</title>");

client.println("<link rel=\"icon\" href=\"data:,\">");

client.println("<style> { font-family: Helvetica; display: inline-block; margin: 3px auto; text-align: center;}");

client.println(".mybtn { background-color: #4CAF50; border: 3px solid #4CAF50;border-radius:50px;; color: white; padding: 10px 15px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }");

client.println(".par { font-size: 16px;}"); 

client.println("p {text-align: center;}");

client.println("</style></head>"); 

client.println("<body style=background-color:#000000>"); 

client.println("<body class=\"bg-light\">");

client.println("<center><table>");

client.println("<td><p><a href=\"/D13/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #B22222!important; color:#f8f9fa!important;\">Pwr OFF</a></p></td>");

client.println("<td><p><a href=\"/D14/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">Pwr ON</a></p></td>");

client.println("<tr>");

client.println("<td><p><a href=\"/D1/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\" >PLAY B</a></p></td>");

client.println("<td><p><a href=\"/D2/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">PAUSE B</a></p></td>");         

client.println("<td><p><a href=\"/D3/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #DC143C!important; color:##DC143C!important;\">REC B</a></p></td>");        

client.println("<td><p><a href=\"/D4/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">SIDE B</a></p></td>");

client.println("<tr>");      

client.println("<td><p><a href=\"/D5/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">FF --- B</a></p></td>");      

client.println("<td><p><a href=\"/D6/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">STOP B</a></p></td>"); 

client.println("<td><p><a href=\"/D7/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">REW B</a></p></td>");         

client.println("<td><p><a href=\"/D8/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">PLAY A</a></p></td>");          

client.println("</tr>");

client.println("<tr>");     

client.println("<td><p><a href=\"/D9/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">SIDE A</a></p></td>");

client.println("<td><p><a href=\"/D10/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">FF --- A</a></p></td>");

client.println("<td><p><a href=\"/D11/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">REW A</a></p></td>");  

client.println("<td><p><a href=\"/D12/on\" role=\"button\" class=\" mybtn btn btn-success mybtn\"style=\"background-color: #198754!important; color:#f8f9fa!important;\">STOP A</a></p></td>");

client.println("</tr>");                                                                 

client.println("</div>");

client.println("</body></html></div></form></table></center>");

client.println();

break;} else {

currentLine = "";}} 

else if (c != '\r') {

currentLine += c;}}}

header = ""; 

client.stop();}

delay(1);}