"Wrócę wieczorem i podam wszystkie szczegóły. Chciałem się najpierw dowiedzieć, czy ktoś byłby zainteresowany pomogą w poprawieniu programu napisanego w C++."
Dodano po 10 [godziny] 1 [minuty]:
KOD DLA SAMOCHODZIKA
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
// Ustawienia sieci WiFi
const char *ssid = "NazwaTwojejSieci";
const char *password = "HasloTwojejSieci";
// Ustawienia pinów dla sterownika silników L298N
const int motor1A = D1;
const int motor1B = D2;
const int motor2A = D3;
const int motor2B = D4;
WiFiServer server(80);
WiFiClient client;
void setup() {
// Inicjalizacja pinów silników
pinMode(motor1A, OUTPUT);
pinMode(motor1B, OUTPUT);
pinMode(motor2A, OUTPUT);
pinMode(motor2B, OUTPUT);
// Połączenie z siecią WiFi
Serial.begin(115200);
Serial.println();
Serial.print("Łączenie z siecią ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi połączone");
// Inicjalizacja serwera
server.begin();
}
void loop() {
// Nasłuchuj połączenia klienta
client = server.available();
if (client) {
while (client.connected()) {
// Odczytaj pierwszy bajt danych (komenda) wysłanych przez pilota
if (client.available()) {
char command = client.read();
executeCommand(command);
}
}
client.stop();
}
}
// Funkcja do wykonania odpowiedniej komendy
void executeCommand(char command) {
switch (command) {
case 'F':
forward();
break;
case 'B':
backward();
break;
case 'L':
left();
break;
case 'R':
right();
break;
case 'S':
stop();
break;
default:
break;
}
}
// Funkcje sterujące ruchem samochodzika
void forward() {
digitalWrite(motor1A, HIGH);
digitalWrite(motor1B, LOW);
digitalWrite(motor2A, HIGH);
digitalWrite(motor2B, LOW);
}
void backward() {
digitalWrite(motor1A, LOW);
digitalWrite(motor1B, HIGH);
digitalWrite(motor2A, LOW);
digitalWrite(motor2B, HIGH);
}
void left() {
digitalWrite(motor1A, LOW);
digitalWrite(motor1B, HIGH);
digitalWrite(motor2A, HIGH);
digitalWrite(motor2B, LOW);
}
void right() {
digitalWrite(motor1A, HIGH);
digitalWrite(motor1B, LOW);
digitalWrite(motor2A, LOW);
digitalWrite(motor2B, HIGH);
}
void stop() {
digitalWrite(motor1A, LOW);
digitalWrite(motor1B, LOW);
digitalWrite(motor2A, LOW);
digitalWrite(motor2B, LOW);
}
KOD DLA PILOTA
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
// Ustawienia sieci WiFi
const char *ssid = "NazwaTwojejSieci";
const char *password = "HasloTwojejSieci";
// Ustawienia pinów dla przycisków
const int button1 = D1;
const int button2 = D2;
const int button3 = D3;
const int button4 = D4;
WiFiClient client;
void setup() {
// Inicjalizacja pinów przycisków
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
// Połączenie z siecią WiFi
Serial.begin(115200);
Serial.println();
Serial.print("Łączenie z siecią ");
Serial.println(ssid);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
Serial.println("Hotspot uruchomiony");
}
void loop() {
if (client.connect("adres_ip_samochodzika", 80)) {
if (digitalRead(button1) == LOW) {
client.write('F'); // Przycisk 1 - jazda do przodu
} else if (digitalRead(button2) == LOW) {
client.write('B'); // Przycisk 2 - jazda do tyłu
} else if (digitalRead(button3) == LOW) {
client.write('L'); // Przycisk 3 - skręt w lewo
} else if (digitalRead(button4) == LOW) {
client.write('R'); // Przycisk 4 - skręt w prawo
} else {
client.write('S'); // Brak wciśniętych przycisków - zatrzymanie
}
delay(100); // Opóźnienie zapobiegające nadmiernemu zatłoczeniu sieci
client.stop();
}
}
Płytki nawiązują połączenie między sobą, ale po kliknięciu przycisków, silniki nie reagują.