• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
indeksowanie wartosci
#1
witam
Moduł: Arduino Due + ADAFRUIT motorshield v2

proszę o pomoc, jak indeksować wartości.


Już objaśniam o co chodzi:
mam 6 wejść analogowych - zmienne EMGinput
nie ma potrzeby tworzyć 6 różnych zmiennych np int EMGinput1, EMGinput2 itd.
chciałbym zrobić coś takiego:


Kod:
void setup() {
  for(int r=0;r<7;r++)
  {
EMGinput[r]=r+1;
EMGvalue[r]=map(EMGinput[r],0, 1024, 0, 255);
  }

następnie w kodzie odwoływać się do poszególnych wartości kolejnych zmiennych np:
void loop(){
if EMGvalue[1] > 100 {
  myMotor1->run(FORWARD);
  myMotor1->setSpeed(EMGvalue[1]);
  }

itd
w powyższym fragmencie sprawdzam wartość pierwszego wejścia analogowego i jeżeli jest większe od 100 to wykonuję poniższe czynności

czy to jest poprawny sposób? zaoszczędzi mi to wiele miejsca
jestem słabo obeznany z C++
do tej pory zajmowałem się PLC, z programowania liznałem niewiele
 
Odpowiedź
#2
Kod:
for(int r=0;r<7;r++)
  {
EMGinput[r]=r+1;
EMGvalue[r]=map(EMGinput[r],0, 1024, 0, 255);
  }
tworząc to w setup odczyta będzie tylko raz kolejny odczyt nastąpi po restarcie programu
Kod:
EMGinput[r]=r+1;
po drugie to nie jest konieczne ponieważ tablice zaczynają się od bitu 0
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
(12-04-2016, 23:22)adix napisał(a):
Kod:
 
 for(int r=0;r<7;r++)
 {
EMGinput[r]=r+1;
EMGvalue[r]=map(EMGinput[r],0, 1024, 0, 255);
 }

 
tworząc to w setup odczyta będzie tylko raz  kolejny odczyt nastąpi po restarcie programu
Kod:
EMGinput[r]=r+1;
po drugie to nie jest konieczne ponieważ tablice zaczynają się od bitu 0

Jeżeli zaczynają się od bitu 0 a wejścia analogowe od 1 to czy to nie jest poprawne? 

Pozdrawiam
 
Odpowiedź
#4
tak i nie EMGinput[r]=r+1;

to co tu napisać to inaczej
a=r+1
EMGvalue[r]=map(a[r],0, 1024, 0, 255);
EMGinput[r] tu nie wpisujesz mapy tylko 'r+1' a 'r' nadal jest 0 1 2....i tak do końca for a nie ka byc powino czyli 0+1 ,1+1 ,2+1... aby to miało sens
to musi być r=r+1
ale to zakłóci funkcje for a wiec musisz zmienić zmienna jeśli chcesz zaczynać od 1 a wiedz wygloda to tak
Kod:
for(int r=0;r<7;r++)
{
w=r+1;
EMGvalue[w]=map(EMGinput[w],0, 1024, 0, 255);
}
i wejścia a zaczynają się od A0...A7
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
Bardzo dziękuję za pomoc
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości