Требуется доделать скетч
- Войдите на сайт для отправки комментариев
Вс, 04/03/2018 - 00:04
Добрый вечер, мне нужно сделать скетч для управления четырьмя двигателями через шильд L293D и интернет модуль HR911105A. Имеется два скетча (они представлены ниже). Нужно объеденить их + добавить управление двумя светодиодами через интернет. Все предложения на martin7swift@gmail.com !
#include <EtherCard.h> static byte mymac[] = {0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A}; byte Ethernet::buffer[900]; BufferFiller bfill; int LedPins[] = {2, 3, 4, 5}; boolean PinStatus[] = {1, 2, 3, 4}; const char http_OK[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n\r\n"; const char http_Found[] PROGMEM = "HTTP/1.0 302 Found\r\n" "Location: /\r\n\r\n"; const char http_Unauthorized[] PROGMEM = "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n\r\n" "<h1>401 Unauthorized</h1>"; void homePage() { bfill.emit_p(PSTR("$F" "<title>ArduinoPIN Webserver</title>" "Relay 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />" "Relay 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />" "Relay 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />" "Relay 4: <a href=\"?ArduinoPIN4=$F\">$F</a>"), http_OK, PinStatus[1] ? PSTR("off") : PSTR("on"), PinStatus[1] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"), PinStatus[2] ? PSTR("off") : PSTR("on"), PinStatus[2] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"), PinStatus[3] ? PSTR("off") : PSTR("on"), PinStatus[3] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>"), PinStatus[4] ? PSTR("off") : PSTR("on"), PinStatus[4] ? PSTR("<font color=\"green\"><b>ON</b></font>") : PSTR("<font color=\"red\">OFF</font>")); } void setup() { Serial.begin(9600); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0); if (!ether.dhcpSetup()); ether.printIp("My Router IP: ", ether.myip); for (int i = 0; i <= 4; i++) { pinMode(LedPins[i], OUTPUT); digitalWrite (LedPins[i], HIGH); PinStatus[i] = false; } } void loop() { delay(1); word len = ether.packetReceive(); // check for ethernet packet word pos = ether.packetLoop(len); // check for tcp packet if (pos) { bfill = ether.tcpOffset(); char *data = (char *) Ethernet::buffer + pos; if (strncmp("GET /", data, 5) != 0) { bfill.emit_p(http_Unauthorized); } else { data += 5; if (data[0] == ' ') { homePage(); // Return home page for (int i = 0; i <= 3; i++) { digitalWrite(LedPins[i], !PinStatus[i + 1]); } } else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) { PinStatus[1] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) { PinStatus[2] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) { PinStatus[3] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) { PinStatus[4] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) { PinStatus[1] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) { PinStatus[2] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) { PinStatus[3] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) { PinStatus[4] = false; bfill.emit_p(http_Found); } else { // Page not found bfill.emit_p(http_Unauthorized); } } ether.httpServerReply(bfill.position()); // send http response } }
#include <AFMotor.h> // Подключаем библиотеку для работы с шилдом #include <Servo.h> // Подключаем библиотеку для работы с сервоприводами, можно не подключать // Подключаем моторы к клеммникам M1, M2, M3, M4 AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); void setup() { // Задаем максимальную скорость вращения моторов (аналог работы PWM) motor1.setSpeed(255); motor1.run(RELEASE); motor2.setSpeed(255); motor2.run(RELEASE); motor3.setSpeed(255); motor3.run(RELEASE); motor4.setSpeed(255); motor4.run(RELEASE); } int i; void loop() { // Двигаемся условно вперед одну секунду motor1.run(FORWARD); // Задаем движение вперед motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); motor1.setSpeed(255); // Задаем скорость движения motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255); delay(1000); // Останавливаем двигатели /* Очень не рекомендуем резко переключать направление вращения двигателей. Лучше дать небольшой промежуток времени.*/ motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Двигаемся в обратном направлении motor1.run(BACKWARD); // Задаем движение назад motor2.run(BACKWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); motor1.setSpeed(255); // Задаем скорость движения motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255); delay(1000); // Останавливаем двигатели motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Разгоняем двигатели в одном направлении motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); for (i=0; i<255; i++) { motor1.setSpeed(i); motor2.setSpeed(i); motor3.setSpeed(i); motor4.setSpeed(i); delay(10); } // Останавливаем двигатели motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500);
[quote = Martin Swift] интернет модуль HR911105A [/ quote]
Хочу вас разочаровать, этот модуль на самом деле ENC28J60, а он не сможет нормально работать с шаговыми двигателями и все зависнет.
Приобретите нормальный модуль типа W5100