tvorim kod pro ovladani krokoveho motoru pres ethernet. Mam skript ktery se spousti v pythonu zadanim jmena motoru-pocet kroku-speeddelay-smer viz data v kodu.
Kód: Vybrat vše
from socket import *
import time
address = ('192.168.1.2', 5000) #server IP and port
client_socket = socket(AF_INET, SOCK_DGRAM) #Socket
client_socket.settimeout(1) # wait max 1 sec for answer... if response is expected
#while (1):
data = "motorha-200-1-0" # settings for motor ... do motor, left, 20 steps, 5 ms delay, dir 1
lst=data.split("-")
stp=int(lst[2])
dey=int(lst[3])
client_socket.sendto(data.encode('utf-8'), address) # send data request
print(data) #python output
time.sleep(1) # delay before sending next command
Kód: Vybrat vše
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <stdio.h>
#include <string.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};// randomly choosen MAC Adress
IPAddress ip(192, 168, 1, 2); //Arduino IP Adress. Has to be known of (python) script.
unsigned int localPort = 5000;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
String datReq;
int packetSize;
EthernetUDP Udp;
#define ENABLE 8
#define X_STEP 2
#define Y_STEP 3
#define Z_STEP 4
#define X_DIR 5
#define Y_DIR 6
#define Z_DIR 7
#define X_LIMIT 9
void setup() {
Serial.begin(115200);
Ethernet.begin( mac, ip);
Udp.begin(localPort);
delay(500);
// nastavení směrů pro všechny piny
pinMode(X_STEP, OUTPUT);
pinMode(Y_STEP, OUTPUT);
pinMode(Z_STEP, OUTPUT);
pinMode(X_DIR, OUTPUT);
pinMode(Y_DIR, OUTPUT);
pinMode(Z_DIR, OUTPUT);
pinMode(X_LIMIT, INPUT_PULLUP);
pinMode(ENABLE, OUTPUT);
//digitalWrite(ENABLE, LOW);
}
void loop() {
packetSize = Udp.parsePacket();
if (packetSize > 0) { //request is received if packetSize > 0
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
String datReq(packetBuffer);
//Serial.print("Raw Input: "); // debug only
//Serial.println(packetBuffer);
String actionha = getValue(datReq, '-', 0);
//String motor = getValue(datReq, '-', 1); // not implemented yet...
int stepsha = getValue(datReq, '-', 1).toInt();
int speedDelayha = getValue(datReq, '-', 2).toInt();
int dirha = getValue(datReq, '-', 3).toInt();
String datReqca(packetBuffer);
//Serial.print("Raw Input: "); // debug only
//Serial.println(packetBuffer);
String actionca = getValue(datReqca, '-', 0);
//String motorca = getValue(datReqca, '-', 1); // not implemented yet...
int stepsca = getValue(datReqca, '-', 1).toInt();
int speedDelayca = getValue(datReqca, '-', 2).toInt();
int dirca = getValue(datReqca, '-', 3).toInt();
if (actionha == "motorha") {
moveMotorha(stepsha, speedDelayha, dirha);
}
if (actionca == "motorca") {
moveMotorca(stepsca, speedDelayca, dirca);
}
if (actionha == "print") {
Serial.print("Motor: ");
//Serial.println(motorha); // not implemented yet...
Serial.print("Steps: ");
Serial.println(stepsha);
Serial.print("SpeedDelay: ");
Serial.println(speedDelayha);
Serial.print("Dir: ");
Serial.println(dirha);
}
if (actionca == "print") {
Serial.print("Motorca: ");
//Serial.println(motorca); // not implemented yet...
Serial.print("Stepsca: ");
Serial.println(stepsca);
Serial.print("SpeedDelayca: ");
Serial.println(speedDelayca);
Serial.print("Dirca: ");
Serial.println(dirca);
}
}
memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i + 1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void moveMotorha(int stepsha,int speedDelayha, int dirha) {
// motor selector is not implemented yet...
Serial.println(speedDelayha);
if (dirha == 1) {
digitalWrite(X_DIR, HIGH);
Serial.println("Dirha is 1");
}
if (dirha == 0) {
digitalWrite(X_DIR, LOW);
Serial.println("Dirha is 0");
}
Serial.println("Stepping now!");
//for (int x = 0; x < stepsha; x++) {
while (digitalRead(X_LIMIT)) {
if (dirha == 1) {
Serial.println("smer 1");
digitalWrite(X_DIR, LOW);
digitalWrite(X_STEP, HIGH);
delay(speedDelayha);
digitalWrite(X_STEP, LOW);
delay(speedDelayha);
}
if (dirha == 0){
Serial.println("smer 0");
digitalWrite(X_DIR, HIGH);
digitalWrite(X_STEP, HIGH);
delay(speedDelayha);
digitalWrite(X_STEP, LOW);
delay(speedDelayha);
}
}
while (!digitalRead(X_LIMIT)) {
if (dirha == 1) {
digitalWrite(X_DIR, HIGH);
digitalWrite(X_STEP, HIGH);
delay(speedDelayha);
digitalWrite(X_STEP, LOW);
delay(speedDelayha);
}
if (dirha == 0) {
digitalWrite(X_DIR, LOW);
digitalWrite(X_STEP, HIGH);
delay(speedDelayha);
digitalWrite(X_STEP, LOW);
delay(speedDelayha);
}
}
}
Kód: Vybrat vše
while (digitalRead(X_LIMIT))
Kód: Vybrat vše
while (!digitalRead(X_LIMIT))
Diky.