8.Master_I2C_PWM/slave/slave.cpp
2023-06-23 05:44:04 +03:00

82 lines
2.9 KiB
C++

#include <Wire.h>
#define SLAVE_ADDRESS 9
void setup() {
Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveCommand);
Serial.begin(9600);
Serial.println("PWM Controller Slave started!");
}
void loop() {
// Ваш код в цикле, если необходимо
}
void receiveCommand(int byteCount) {
while (Wire.available()) {
byte cmd = Wire.read();
if (cmd == 0x01) {
// Включить ШИМ
float dutyCycle = receiveFloat();
enablePWM(dutyCycle);
// Ваш код, обрабатывающий команду включения ШИМ
Serial.print("Received command: 0x");
Serial.print(cmd, HEX);
Serial.print(", duty cycle: ");
Serial.println(dutyCycle);
} else if (cmd == 0x02) {
// Выключить ШИМ
disablePWM();
// Ваш код, обрабатывающий команду выключения ШИМ
Serial.print("Received command: 0x");
Serial.println(cmd, HEX);
} else if (cmd == 0x03) {
// Установить частоту ШИМ
float frequency = receiveFloat();
setPWMFrequency(frequency);
// Ваш код, обрабатывающий команду установки частоты ШИМ
Serial.print("Received command: 0x");
Serial.print(cmd, HEX);
Serial.print(", frequency: ");
Serial.println(frequency);
} else if (cmd == 0x04) {
// Установить коэффициент заполнения ШИМ
float dutyCycle = receiveFloat();
setPWMDutyCycle(dutyCycle);
// Ваш код, обрабатывающий команду установки коэффициента заполнения ШИМ
Serial.print("Received command: 0x");
Serial.print(cmd, HEX);
Serial.print(", duty cycle: ");
Serial.println(dutyCycle);
}
// Добавьте обработку других команд, если необходимо
}
}
float receiveFloat() {
uint8_t upperByte = Wire.read();
uint8_t lowerByte = Wire.read();
uint16_t cmdValue = (upperByte << 8) | lowerByte;
float value = (float)cmdValue / 16.0;
return value;
}
void enablePWM(float dutyCycle) {
// Ваш код для включения ШИМ
// Например: analogWrite(PWM_PIN, dutyCycle * 255);
}
void disablePWM() {
// Ваш код для выключения ШИМ
// Например: analogWrite(PWM_PIN, 0);
}
void setPWMFrequency(float frequency) {
// Ваш код для установки частоты ШИМ
}
void setPWMDutyCycle(float dutyCycle) {
// Ваш код для установки коэффициента заполнения ШИМ
}