Witam,
proszę was o pomoc, próbuję zrealizować następujący układ.
Chcę sterować serwem za pomocą potencjometru, po przyciśnięciu przycisku arduino powinno zapisywać ruchy serwa, aby po ponownym naciśnięciu przycisku odtworzyć zapisaną sekwencję ruchów. Cały problem polega na tym że w momencie kiedy serwo powinno powtórzyć sekwencję ruchów, ono powtarza tylko jeden. Wydaje mi się ze odczytuje ono tylko pierwszą pozycję zapisaną w tabeli, czy mógłby ktoś to zweryfikować? Oto kod:
Dodałem u siebie linijkę
po warunku "else if" i na monitorze portu pokazują mi się wartości 0. Rozumiem że arduino odczytuje tylko pierwszą komórkę tabeli, czyli problem jest gdzieś tu:
Ktoś podpowie jak poprawnie powinien wyglądać ten kod aby były odczytywane kolejne wartości z tabeli a nie tylko pierwsza?
proszę was o pomoc, próbuję zrealizować następujący układ.
Chcę sterować serwem za pomocą potencjometru, po przyciśnięciu przycisku arduino powinno zapisywać ruchy serwa, aby po ponownym naciśnięciu przycisku odtworzyć zapisaną sekwencję ruchów. Cały problem polega na tym że w momencie kiedy serwo powinno powtórzyć sekwencję ruchów, ono powtarza tylko jeden. Wydaje mi się ze odczytuje ono tylko pierwszą pozycję zapisaną w tabeli, czy mógłby ktoś to zweryfikować? Oto kod:
Kod:
#include <Servo.h>
Servo test;
int AnalogOut = 0;
int NewAnalogOut = 0;
int pin_Button = 12;
int pin_Button_State = 0;
int pin_Button_State_Last = 0;
int storage[800];
int storage_loc = 0;
int recording = 0;
void setup() {
Serial.begin(9600);
test.attach(11);
pinMode(pin_Button, INPUT);
}
// testing
void loop() {
pin_Button_State = digitalRead(pin_Button);
if (pin_Button_State != pin_Button_State_Last) {
if (pin_Button_State == HIGH) {
recording++;
if (recording == 2) {
storage[storage_loc] = 777;
}
}
delay(50);
}
pin_Button_State_Last = pin_Button_State;
if (recording == 0) {
int sensorValue = analogRead(A0);
NewAnalogOut = map(sensorValue, 0, 1023, 0, 180);
if (abs(NewAnalogOut - AnalogOut) > 2) {
test.write(AnalogOut);
AnalogOut = NewAnalogOut;
}
}
delay(1);
if ( recording == 1) {
recording = 1;
int sensorValue = analogRead(A0);
NewAnalogOut = map(sensorValue, 0, 1023, 0, 180);
if (abs(NewAnalogOut - AnalogOut) > 2) {
test.write(AnalogOut);
AnalogOut = NewAnalogOut;
}
if (storage_loc < 800) {
storage[storage_loc] = NewAnalogOut;
delay(100);
Serial.println(storage_loc);
storage_loc++;
}
} else if (recording > 1) {
while (1 == 1) {
storage_loc = 0;
if (storage_loc < 800 || storage[storage_loc] != 777) {
test.write(storage[storage_loc]);
delay(100);
}
}
}
Kod:
Serial.println(storage_loc);
po warunku "else if" i na monitorze portu pokazują mi się wartości 0. Rozumiem że arduino odczytuje tylko pierwszą komórkę tabeli, czyli problem jest gdzieś tu:
Kod:
else if (recording > 1) {
while (1 == 1) {
storage_loc = 0;
if (storage_loc < 800 || storage[storage_loc] != 777) {
test.write(storage[storage_loc]);
delay(100);
Ktoś podpowie jak poprawnie powinien wyglądać ten kod aby były odczytywane kolejne wartości z tabeli a nie tylko pierwsza?