Skocz do zawartości

Problem z odczytem pozycji


kh94

Pomocna odpowiedź

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:

#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);
   }
   }
 }
Link do komentarza
Share on other sites

kh94, witam na forum!

Po szybkiej analizie znalazłem w Twoim programie poniższy fragment. Chyba zabrakło tutaj inkrementacji storage_loc? Ciągle dowołujesz się do tego samego pola w tablicy.

while (1 == 1) { 
   storage_loc = 0; 
   if (storage_loc < 800 || storage[storage_loc] != 777) { 

     test.write(storage[storage_loc]); 

     delay(100); 
   } 
  • Lubię! 1
Link do komentarza
Share on other sites

Po szybkiej analizie znalazłem w Twoim programie poniższy fragment. Chyba zabrakło tutaj inkrementacji storage_loc? Ciągle dowołujesz się do tego samego pola w tablicy.

Dziękuję za pomoc, faktycznie tam był problem. Poniżej zamieszczam poprawiony kod, użyłem pętli for, ponadto dodałem zmienną storage_loc_last która zapamiętuje ostatni zapisany adres w tabeli, teraz działa poprawnie, czy można było to rozwiązać jeszcze inaczej? Jestem początkujący więc chętnie zapoznam się z waszymi opiniami

while (1 == 1) { 

   if (storage_loc < 800 || storage[storage_loc] != 777) { 
     for(storage_loc=0;storage_loc<storage_loc_last;storage_loc++){
     test.write(storage[storage_loc]); 
     }
     delay(100); 
   }
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.