Добрый день, я постигаю азы программирования на этой чудесной платформе и впервые написал что то более менее серьезное. Наверняка вы как продвинутые в этом плане люди увидете кучу ошибок или проблем в моем творении, кинте тапком что я сделал по вашему мнению не так, но пожалуйста, с обоснованием или хотябы с небольшим пояснением как нужно.
Если кратко что это такое, мне нужно подключить несколько датчиков расстояния ультразвуковых и опрашивать их по очереди, если значение расстояния превышает порог (допустим 50см), то записать это, и после опроса всех датчиков (планируеться от 2 до 8) в вебку вывести число датчиков что превысили его.
#include <NewPing.h>
#include <SPI.h>
#include <Ethernet.h>
#define SONAR_NUM 2 // количество сенсоров.
#define MAX_DISTANCE 500 // Maximum distance (in cm) to ping.
#define ena1 30 //trigger for 1
#define ena2 30 //trigger for 2
const int ID = 1; // номер платы
int activatedSensors = 0; // установка переменной
const int sensorPins[SONAR_NUM] = {ena1, ena2};
long sensors[SONAR_NUM]; //array to store sensor distances
byte mac[] = { 0xFA, 0xFA, 0x01, 0x00, 0x01, 0x71 }; // Мак-адрес Ethernet
IPAddress ip(192, 168, 1, 101); // IP-адрес Arduino
byte gateway[] = { 192, 168, 1, 1 }; // IP-адрес шлюза
byte subnet[] = { 255, 255, 255, 0 }; // Маска подсети
EthernetServer server(80);
NewPing sonar[SONAR_NUM] = { // Sensor object array.
NewPing(4, 5, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.
NewPing(6, 7, MAX_DISTANCE),
};
void setup() {
pinMode(ena1, OUTPUT);
pinMode(ena2, OUTPUT);
Ethernet.begin(mac, ip, gateway, subnet); // start the Ethernet connection and the server:
server.begin(); // start the server
}
void loop() {
for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through each sensor and display results.
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
sensors[i] = sonar[i].ping_cm();
}
if (sensors[0] > 0 && sensors[0] <= MAX_DISTANCE){
digitalWrite(ena1, HIGH);
}else{
digitalWrite(ena1,LOW);
}
{
activatedSensors = 0;
for (int i = 0; i < SONAR_NUM; i++) {
int sensorReading = digitalRead(sensorPins[i]);
if (sensorPins[i] == HIGH) {
activatedSensors++;
}
}
}
EthernetClient client = server.available(); // выводим вебстраницу
if (client) {
bool currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 1");
client.println("Access-Control-Allow-Origin: *");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>");
client.println("ID: " + String(ID));
client.println("</title>");
client.println("</head>");
client.println("<body>");
client.println("ID: " + String(ID));
client.println("Busy Parks: " + String(activatedSensors) + " of " + String(SONAR_NUM)); // Вывод активированных датчиков
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
delay(1000); // Пауза между обновлениями в миллисекундах
}