Buongiorno,
Ho replicato il progetto di una automobilina tramite L298N per il controllo dei motori e una scheda con ESP8266 e WiFI. Da un applicazione android vengono inviati i comandi tramite una stringa del genere: Http://192.168.4.1/?Stato=A (Dove A sta per avanti).
Ho aggiunto un sensore IR per poter inviare comandi anche con questo. I comandi IR arrivano e vengono anche eseguiti ma per come ho impostato/pasticciato il codice i comandi IR si sovrappongono a quelli WIFI e vanno in conflitto.
Credo che la soluzione sia un richiesta GET in modo che alla ricezione di un segnale IR anzichè eseguire direttamente il comando venga invece prima inviata una stringa tramite WIFI e poi eseguita.
Non riesco però ad implementare questa richesta e non so nemmeno se è fattibile a dire il vero.
Allego il codice se qualcuno può aiutarmi grazie mille!
// Include le Librerie per il Server WiFi
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
// Include le Librerie per il sensore IR
#include <IRremote.h>
// Definire Motori su Modulo L298N
#define ENA D8 // Motore Destra
#define IN_1 D7 // In1 motore Destra
#define IN_2 D6 // In2 motore Destra
#define IN_3 D5 // In3 motore Sinistra
#define IN_4 D4 // In4 motore Sinistra
#define ENB D3 // Motore Sinistra
// Impostare Ricevitore IR
const int pinRicevitoreIR = D1; // pin a cui collegato il ricevitore
IRrecv irrecv(pinRicevitoreIR); // pin a cui collegato il ricevitore
decode_results risultato; // salva il risultato ricevuto dal rilevatore IR
String command; //String per lo stato di comando
// Impostare velocita' motori
int velocita = 1023;
// Creazione di un server web in ascolto sulla porta 80
const char* ssid = "Tank WiFI";
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200); // inizializza Serial monitor
irrecv.enableIRIn(); // Attiva l'oggetto del ricevitore
//Definire Pin
pinMode(ENA, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
pinMode(ENB, OUTPUT);
// Connessione WiFi
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
// Starting WEB-server
server.on ( "/", HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
}
void HTTP_handleRoot(void) {
if( server.hasArg("State") ){
Serial.println(server.arg("State"));
}
server.send ( 200, "text/html", "" );
delay(1);
}
// Impostazioni per i motori
void Avanti(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite (ENA, velocita);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite (ENB, velocita);
}
void Indietro(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite (ENA, velocita);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite (ENB, velocita);
}
void Sinistra(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite (ENA, velocita);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite (ENB, velocita);
}
void Destra(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite (ENA, velocita);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite (ENB, velocita);
}
void Fermo(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, LOW);
analogWrite(ENA, velocita);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, LOW);
analogWrite(ENB, velocita);
}
void loop() {
server.handleClient();
command = server.arg("State");
if (command == "A") Avanti();
else if (command == "I") Indietro();
else if (command == "D") Destra();
else if (command == "S") Sinistra();
if (irrecv.decode(&risultato) == true) // vero se si e' ricevuto un messaggio
{Serial.println(risultato.value, HEX);
irrecv.resume();
}
else if (risultato.value == 0xCDB54565) Fermo();
else if (risultato.value == 0xFFFFFFFF) Avanti();
}