#include <Fuzzy.h>
#include <DRV8323RS.h>
Fuzzy *fuzzy = new Fuzzy();
FuzzySet *near = new FuzzySet(0, 0, 20, 40);
FuzzySet *far = new FuzzySet(30, 50, 100, 100);
DRV8323RS motorLeft(5, 6, 7, 10);
DRV8323RS motorRight(8, 9, 10, 11);
void setup() {
FuzzyInput *distance = new FuzzyInput(1);
distance->addFuzzySet(near);
distance->addFuzzySet(far);
fuzzy->addFuzzyInput(distance);
FuzzyOutput *speedAdjust = new FuzzyOutput(1);
speedAdjust->addFuzzySet(new FuzzySet(-100, -100, -50, 0));
speedAdjust->addFuzzySet(new FuzzySet(0, 50, 100, 100));
fuzzy->addFuzzyOutput(speedAdjust);
FuzzyRule *rule1 = new FuzzyRule(1, near, speedAdjust, new FuzzySet(-80, -60, -40, -20));
fuzzy->addFuzzyRule(rule1);
}
void loop() {
int dist = ultrasonicSensor.read();
fuzzy->setInput(1, dist);
fuzzy->fuzzify();
float adjustment = fuzzy->defuzzify(1);
motorLeft.setSpeed(baseSpeed + adjustment);
motorRight.setSpeed(baseSpeed - adjustment);
if (emergencyStopTriggered()) {
stopAllMotors();
delay(1000);
} else if (pathTrackingActive()) {
adjustPathFollowing();
}
}
#include <Fuzzy.h>
#include <L6234.h>
Fuzzy *jointFuzzy[3];
L6234 joints[3] = {
L6234(2, 3, 4, 5),
L6234(6, 7, 8, 9),
L6234(10, 11, 12, 13)
};
void setup() {
for (int i = 0; i < 3; i++) {
jointFuzzy[i] = new Fuzzy();
}
}
void loop() {
if (highPriorityTaskActive()) {
controlHighPriorityJoint();
} else {
for (int i = 0; i < 3; i++) {
float error = readJointError(i);
jointFuzzy[i]->setInput(1, error);
jointFuzzy[i]->fuzzify();
joints[i].setTorque(baseTorque[i] + jointFuzzy[i]->defuzzify(1));
}
}
if (millis() - lastControlTime > CONTROL_PERIOD) {
handleControlTimeout();
}
}
#include <Fuzzy.h>
#include <TaskScheduler.h>
Scheduler runner;
Task task1(10, TASK_FOREVER, &avoidObstacle);
Task task2(50, TASK_FOREVER, &batteryMonitor);
int motorPins[4] = {5, 6, 7, 8};
Fuzzy *speedFuzzy = new Fuzzy();
void setup() {
runner.init();
runner.addTask(task1);
runner.addTask(task2);
task1.enable();
}
void loop() {
runner.execute();
if (task1.isRunning()) {
speedFuzzy->setSensitivity(HIGH_SENSITIVITY);
} else {
speedFuzzy->setSensitivity(LOW_SENSITIVITY);
}
int pwm = calculateFuzzyPWM();
setMotorSpeed(motorPins, pwm);
}
void avoidObstacle() {
if (obstacleDetected()) {
runner.disableAll();
emergencyManeuver();
runner.enable();
}
}
#include <SimpleFOC.h>
#include <Fuzzy.h>
#include <Wire.h>
#define I2C_ADDR_MASTER 8
#define I2C_ADDR_MOTOR_CTRL 9
#define I2C_ADDR_SENSOR_FUSION 10
#define I2C_ADDR_COMM 11
struct TaskLoad {
char taskName[20];
float cpuLoad;
float memoryUsage;
float priority;
uint32_t period;
bool assigned;
uint8_t assignedTo;
};
TaskLoad systemTasks[] = {
{"MotorFOC", 0.15, 0.1, 0.9, 10, false, 0},
{"SensorFusion", 0.25, 0.2, 0.8, 20, false, 0},
{"PathPlanning", 0.35, 0.3, 0.7, 50, false, 0},
{"SLAM", 0.45, 0.4, 0.6, 100, false, 0},
{"CommProtocol", 0.2, 0.15, 0.5, 30, false, 0},
{"VisionProc", 0.6, 0.5, 0.4, 50, false, 0}
};
#define TASK_COUNT (sizeof(systemTasks) / sizeof(systemTasks[0]))
struct MCUCapability {
uint8_t address;
float cpuCapacity;
float memCapacity;
float powerBudget;
float currentLoad;
float temperature;
};
MCUCapability mcuNodes[] = {
{I2C_ADDR_MOTOR_CTRL, 1.0, 1.0, 5.0, 0.0, 40.0},
{I2C_ADDR_SENSOR_FUSION, 1.2, 1.5, 3.0, 0.0, 45.0},
{I2C_ADDR_COMM, 0.8, 1.0, 2.0, 0.0, 35.0}
};
#define MCU_COUNT (sizeof(mcuNodes) / sizeof(mcuNodes[0]))
void setup() {
Serial.begin(115200);
Wire.begin(I2C_ADDR_MASTER);
initFuzzyScheduler();
scanMCUNodes();
Serial.println("分布式模糊调度系统启动");
}
void loop() {
static uint32_t lastLoadBalanceTime = 0;
uint32_t now = millis();
if (now - lastLoadBalanceTime >= 5000) {
collectNodeStatus();
evaluateLoadDistribution();
redistributeTasks();
sendSchedulingCommands();
lastLoadBalanceTime = now;
printSchedulingInfo();
}
executeLocalTasks();
handleSlaveRequests();
}