• 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
Prosze o pomoc
#1
Witam.

Chcialbym nauczyc sie choc minimalnie cos zaprogramowac. Niestety mojs wiedza we wszystkich aspektach wynosi 0.0 .

Wpierw chcialbym znapisac prosty programik generatora , ktory generejuje 2 ramki na przemian  (np. 1- 5ms, 2- 7ms, ), i tak ciagle na zmiane.

przy pomocy innego przzykladu splodzilem  cos takiego :

 unsigned long pmicross;
unsigned long interwal = 1000;
int stan =1;
int stad =3;


void setup() {
pinMode(13, OUTPUT);
pmicross = micros(); 


}

void loop() {

// odliczanie w mikrosekundach
unsigned long currentMillis = micros(); 

if (currentMillis - pmicross >= interwal) {
 
    pmicross = micros();
   
  if (stan == 1) {stan = 2; interwal = 1000000;} else if (stan == 2) {stan = 1;interwal = 100000;}
  if (stad == 3) {stad = 4; interwal = 500000;} else if (stad == 4) {stad = 3;interwal = 50000;}
 
}


if (stan == 1) {digitalWrite(13, HIGH);} else  if (stan == 2) {digitalWrite(13, LOW);}
if (stad == 3) {digitalWrite(13, HIGH);} else  if (stad == 4) {digitalWrite(13, LOW);}

}


Programik sie kompiluje ale nie dziala jak trzeba (na zzmiane)

Prosze milych forumowiczow o poprawienie tego Smile

Zycze milego dnia.

Pozdrawiam 

Wojtek
 
Odpowiedź
#2
Opisz dokładnie jak to ma działać.
 
Odpowiedź
#3
4 ustawienia A  ms, B  ms, C ms i D ms. Poprostu w kodzie.

___                __________                  ___                    _________

A          B              C                  D        A          B                C              D
    _________                    _________        __________                  _________

i tak nonstop, jak generator taktu
 
Odpowiedź
#4
1. W Twoim kodzie masz dwie zmienne stan i stad, które wpływają na zmianę zmiennej interwal. W jednej pętli loop() najpierw interwal zmienia się w zależności od wartości zmiennej stan, a chwilę potem w zależności od wartości zmiennej stad. Wygląda mi to trochę na nieumiejętne kopiuj wklej.
Kod:
if (stan == 1) {stan = 2; interwal = 1000000;} else if (stan == 2) {stan = 1;interwal = 100000;}
if (stad == 3) {stad = 4; interwal = 500000;} else if (stad == 4) {stad = 3;interwal = 50000;}

2. Pytanie dlaczego w kodzie pojawia się coś takiego:
Kod:
if (stan == 1) {digitalWrite(13, HIGH);} else  if (stan == 2) {digitalWrite(13, LOW);}
if (stad == 3) {digitalWrite(13, HIGH);} else  if (stad == 4) {digitalWrite(13, LOW);}
Nie można było tego ifa połączyć z tym powyżej? Przecież sprawdzasz te same warunki. Zmiana wartości zmiennych stan i stad następuje tylko raz.

3. Twój kod nie działa jako sekwencja - brakuje zależności pomiędzy zmienną stan i stad. Tak w ogólne to zmienna stad nie jest w ogóle potrzebna. Rozważ kod:

Kod:
void loop() {

// odliczanie w mikrosekundach
unsigned long currentMillis = micros(); 

if (currentMillis - pmicross >= interwal) {
 
  pmicross = micros();
   
  if (stan == 0) {
    interwal = 1000000;
  }
  else if (stan == 1) {
    interwal = 100000;
  }
  else if (stan == 2) {
    interwal = 500000;
  }
  else if (stan == 3) {
    interwal = 50000;
  }  
  
  stan++;  // zwiększenie zmiennej stan o 1
  stan %= 4;  // może być if(stan > 3) {stan = 0;}

  digitalWrite(13, !digitalRead(13)); // zmiana stanu pinu 13 na przeciwny
}
 
Odpowiedź
#5
Kompilator - cos mu nie psuje, i nie kompiluje tego programiku.
Jeden z bledow udalo mi sie samemu, dodajac jeszcze jedna klemre na koncu. (dobrze? - \zle?)
a drugie to nie wiem.
 
Odpowiedź
#6
Kompilator wyraźnie wskazuje co mu nie pasi. Wklej komunikat.

Ewidentnie brakuje klamry na końcu od loop().
 
Odpowiedź
#7
Juz dziala Smile , poza klamra , zamienilem jeszcze rozkaz podwyzszania o 1 z przykladu ktory byl dalej.

Dziekuje jeszcze raz za pomoc. Smile

Mam juz odpowiedni kurs dla mnie , i zaczynam sie uczyc programowac sam.
Ale jeszcze nie raz sie cos zapytam Smile

Milej Nocy.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości