#define D1 4 // Направление вращение двигателя 1
#define D11 2 // Направление вращение двигателя 1
#define D2 8 // Направление вращение двигателя 2
#define D22 7 // Направление вращение двигателя 2
#define M1 5 // ШИМ вывод для управления двигателем 1
#define M2 6 // ШИМ вывод для управления двигателем 2
#define zvuk 3 // пьезопищалка
bool direction1 = 0; // Текущее направление вращения двигателя 1
bool direction2 = 0; // Текущее направление вращения Двигателя 2
int shim1 = 0; // Текущее значение ШИМ1
int shim2 = 0; // Текущее значение ШИМ2
int temp2 = 0;
int temp1 = 0;
#include <VirtualWire.h>
void setup() {
pinMode(zvuk, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D11, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D22, OUTPUT);
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(12);
vw_setup(2000); // Bits per sec
pinMode(13, OUTPUT);
vw_rx_start(); // Start the receiver PLL running
Serial.begin(9600);
beep(75);
beep(75);
beep(75);
delay(600);
}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Буфер для сообщения
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Длина буфера
if (vw_get_message(buf, &buflen)) // Если принято сообщение
{
// Начинаем разбор
int i;
// Если сообщение адресовано не нам, выходим
if (buf[0] != 'q') return;
char command = buf[2]; // Команда находится на индексе 2
// Числовой параметр начинается с индекса 4
i = 4;
int number = 0;
// Поскольку передача идет посимвольно, то нужно преобразовать набор символов в число
while (buf != ' ')
{
number *= 10;
number += buf - '0';
i++;
}
/* Serial.print(command);
Serial.print(" ");
Serial.println(number); */
if (buf[2] != 'y') goto x;
goto y;
//============================= X ===================
x:
temp1 = number - 128;
if (temp1 > 0) direction1 = 0;
if (temp1 < 0) direction1 = 1;
if (temp1 < 0) temp1 = - temp1;
shim1 = temp1 + temp1;
if (shim1 > 254) shim1 = 254;
temp1 = 0;
goto poehali;
//============================= Y========================
y:
temp2 = number - 128;
if (temp2 > 0) direction2 = 0;
if (temp2 < 0) direction2 = 1;
if (temp2 < 0) temp2 = - temp2;
shim2 = temp2 + temp2;
if (shim2 > 254) shim2 = 254;
temp2 = 0;
poehali:
digitalWrite(D1, direction1); digitalWrite(D11, direction1 ^ 1); // Задаем направление вращения двигателя
digitalWrite(D2, direction2); digitalWrite(D22, direction2 ^ 1);
analogWrite(M1, shim1); // Задаем скорость вращения двигателя
analogWrite(M2, shim2);
Serial.print(shim1);
Serial.print(" ");
Serial.println(shim2);
delay(5);
}
}
void beep(unsigned char delayms) {
analogWrite(zvuk, 20); // значение должно находится между 0 и 255
// поэкспериментируйте для получения хорошего тона
delay(delayms); // пауза delayms мс
analogWrite(zvuk, 0); // 0 - выключаем пьезо
delay(delayms); // пауза delayms мс
}