Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję
Odbierz rabat na filament!

Spowolniony program

Autor Wiadomość
Neeeds 



Posty: 10
Wysłany: 18-04-2017, 21:44   Spowolniony program

Witam, zauważyłem w swoim arduino jeden problem, który nie wiem jak rozwiązać. Napisałem prosty programik w którym jeden warunek ma sie wykonywać bez przerwy(if(val >400 && val <600)). Dołożyłem dwa przyciski, które po wciśnięciu zapalają diodę 1 lub 2. Z tego co zauważyłem (na serial porcie) to gdy wciskam jeden przycisk to wykonuje się warunek i jedna dioda świeci, gdy dwa wcisne to obie świecą, ale już nie tak jasno jak powinny świecić. Zapewne to dlatego, że skoro wykonują sie 3 warunki naraz to ogólna pętla zwalnia 3 krotnie bo musi wykonać 3 if'y po kolei. I tu moje pytanie, czy da się zrobić tak by świeciły maksymalnie jak powinny? Później mam zamiar podłączyć tam silniki więc nie moge mieć takich opóźnień. Załączam poglądowy kod:





Kod programu: Zaznacz cały
int val;
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
pinMode(7,OUTPUT);
digitalWrite(7, HIGH);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
val = (analogRead(A1));
if(val >400 && val <600)
{
Serial.println(1);
Serial.println(2);
Serial.println(3);

}
if(val >600)
{
Serial.println(4);
Serial.println(5);
Serial.println(6);
delay(500);
}
if(val <400)
{
Serial.println(7);
Serial.println(8);
Serial.println(9);
delay(500);
}
if(digitalRead(2) == LOW)
{
Serial.println(10);
Serial.println(11);
Serial.println(12);
digitalWrite(4, HIGH);
}
else
{
Serial.println(100000);
digitalWrite(4, LOW);
}
if(digitalRead(7) == LOW)
{
Serial.println(13);
Serial.println(14);
Serial.println(15);
digitalWrite(5, HIGH);
}
else
{
Serial.println(9999999);
digitalWrite(5, LOW);
}
}


Chciałbym aby warunek po wciśnięciu przycisku się wykonywał tak długo jak jest on wciśnięty.
Polecany artykuł z FORBOT.PL:
Wszystko o mikrokontrolerach

Przeglądając nasze forum można dojść do wniosku, że jednym z największych problemów początkujących robotyków j... Czytaj całość

Popularny artykuł » Tworzenie aplikacji Android - #4 - Sterowanie robotem


Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 3991
Pomógł: 429 razy
Otrzymał 578 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 19-04-2017, 09:40   

Jeśli diody świecą się słabiej to nie dlatego, że coś się wykonuje wolniej tylko dlatego, że je bez sensu wyłączasz. Nie mam zamiaru analizować Twojego kompletnie nieczytelnego programu więc nie wskażę palcem miejsca błędu. Być może nie istnieje takie jedno, bo cała kompozycja kodu jest zła - niestety nikt tego w powyższym nie odkryje. Wygląda, że Ty sam masz z nim kłopoty. Tak, styl zapisu jest jednym z narzędzi wspierających powstawanie poprawnych programów, zacznij od teraz.
Jeśli spełniasz jakieś warunki zapalania diod, to je zapalaj na stałe - wtedy będą świecić poprawnie. Jeśli jednocześnie gasisz je w innych warunkach, to zaczynają przygasać lub mrugać. Sformatuj program tak (wcięcia!), by było widać co z czego wynika i co kiedy się wykonuje a kiedy nie.
A dodatkowo weź pod uwagę czasy nadawania znaków przez UART - to nie jest bezkarne. Gdy zapełnisz bufor wyjściowy, każde wysłanie bajtu przy 9600 to milisekunda. A Ty ślesz na monitor jakieś dziwne ciągi wielu liczb, które procesor musi dodatkowo konwertować na znaki. Nie wpadłeś na pomysł pisania prostych, ale coś znaczących komunikatów tekstowych typu "S1", "Stan A", "Switch 1" itp?

Postaw piwo autorowi tego posta
 
 
Neeeds 



Posty: 10
Wysłany: 19-04-2017, 14:22   

Zgodze się w zupełności, że mogłem napisać np S1,S2, nie sądziłem że UART może na to jakoś wpłynąć. Nie jestem specjalistą więc tak na szybko chciałem napisać tylko poglądowy programik by zobaczyć co się kiedy wysyła. Ale jednego w Twojej wypowiedzi nie rozumiem. Chcę aby diody paliły się tak długo jak trzymam przycisk więc musze je wyłączać chyba że masz coś innego na myśli.

Postaw piwo autorowi tego posta
 
 
Elvis 



Posty: 1188
Pomógł: 83 razy
Otrzymał 217 piw(a)
Skąd: wawa
Programuję w:
C, asm

Wysłany: 19-04-2017, 14:50   

Zamiast używać "magicznych liczb" lepiej jest zdefiniować odpowiednie stałe - inaczej pozostaje się domyślać, że np. pin 2 to pewnie przycisk:
Kod programu: Zaznacz cały
if(digitalRead(2) == LOW)

Mam więc pytanie - czy przypadkiem nie ustawiasz tego pinu jako wyjścia?
Kod programu: Zaznacz cały
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
pinMode(7,OUTPUT);
digitalWrite(7, HIGH);

Warto przeczytać » Detekcja koloru obiektów


Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 3991
Pomógł: 429 razy
Otrzymał 578 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 19-04-2017, 18:39   

Nie rozumiejąc Twojego programu podejrzewam/łem, że diody możesz zapalać i gasić w sposób delikatnie niekontrolowany. Jeżeli będziesz robił to wystarczająco często, np. w jakiejś pętli to możesz odnieść wrażenie przygasania, bo średnia jasność spada wraz z wydłużaniem przerw w świeceniu.
Przyczyną Twoich problemów może być też to o czym napisał Elvis: jeżeli pin zaprogramujesz na wyjście, wystawisz tam stan wysoki a potem przyciskiem zewrzesz to do masy i wczytasz stan, to w pewnym sensie to zadziała. Program będzie czytał stany 1 i 0, ale zwarcie takiego wyjścia przyciskiem do masy przywiera (przez tranzystor wyjściowy pinu) linię zasilania. To może spowodować spadek napięcia zasilającego i w skrajnym przypadku spalenie tego pinu procesora. A obniżenie napięcia to także spadek jasności wszystkich diodek LED.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Arduino i programowa... Przysyłanie/Odbieran... Arduino ATmega 328-k... Atmega - problem z b...
lub przeszukaj forum po wybranych tagach: program, spowolniony


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki