Итак, всем привет. Накалякал я тут скетч для манипулятора, способного запоминать и воспроизводить записанные действия. Сервы управляются четырьмя потенциометрами, есть кнопка записи и кнопка воспроизведения. В чем суть моей проблемы - задержка при записи “пустых” шагов сервы, то есть при которых серва не двигается при воспроизведении, но задержка есть, и приходится ждать н-ное количество секунд, прежде чем начнется воспроизводиться не “пустая” ячейка. Нужно как то от этого избавится, всякое пробовал делать, ниче не робит, чат GPT тоже не понимает , что я от него хочу, а если понимает, то делает какую то нерабочую срань. А может просто я пенек.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int VegaPin1 = A0;
int VegaPin2 = A1;
int VegaPin3 = A2;
int VegaPin4 = A3;
int buttonPin1 = 6;
int buttonPin2 = 7;
int clearBut = 5;
int buttonState1 = 0;
int buttonState2 = 0;
int clearButState = 0;
int record[10][4];
int step = 0;
int currentPos[4] = {0, 0, 0, 0};
void setup() {
servo1.attach(9);
servo2.attach(10);
servo3.attach(11);
servo4.attach(12);
//отправляем крутилки на сервы
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}
void loop() {
// Запись
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH && step < 10) {
recordActions();
}
// Воспроизведение
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
digitalWrite(3, HIGH);
playbackActions();
digitalWrite(3, LOW);
}
clearButState = digitalRead(clearBut);
if (clearButState == HIGH)
{
clear();
}
// Считываем
// Управляем
int value1 = map(analogRead(VegaPin1), 0, 1024, 0, 180);
int value2 = map(analogRead(VegaPin2), 0, 1024, 0, 180);
int value3 = map(analogRead(VegaPin3), 0, 1024, 0, 180);
int value4 = map(analogRead(VegaPin4), 0, 1024, 0, 180);
servo1.write(value1);
servo2.write(value2);
servo3.write(value3);
servo4.write(value4);
}
void recordActions() {
record[step][0] = map(analogRead(VegaPin1), 0, 1024, 10, 180);
record[step][1] = map(analogRead(VegaPin2), 0, 1024, 10, 180);
record[step][2] = map(analogRead(VegaPin3), 0, 1024, 10, 180);
record[step][3] = map(analogRead(VegaPin4), 0, 1024, 10, 180);
currentPos[0] = record[step][0];
currentPos[1] = record[step][1];
currentPos[2] = record[step][2];
currentPos[3] = record[step][3];
if (step == 9) {
Serial.println("максимум шагов");
digitalWrite(4, HIGH);
}
step++;
delay(1000); // Задержка что бы не бахнуло
}
void playbackActions() {
for (int i = 0; i < step; i++) {
if (record[i][0] != 0 || record[i][1] != 0 || record[i][2] != 0 || record[i][3] != 0) {
servo1.write(record[i][0]);
servo2.write(record[i][1]);
servo3.write(record[i][2]);
servo4.write(record[i][3]);
delay(1000); // Задержка что бы не бахнуло
}
}
}
void clear(){
step = 0;
digitalWrite(4, LOW);
}