• 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
Jak poprawić kod żeby zaczął działać prawidłowo?
#1
Witam jestem nowy na forum więc jeśli piszę w złym miejscu to przepraszam.
Ale do rzeczy chciałem stworzyć sobie program który po naciśnięciu przycisku zapalałby kolejno diody poprzednie gasząc 0->1->2->3->0 jak że nie bardzo miałem pojęcie jak to zrobić tzn wiedziałem że trzeba użyć "swich case" ale składni nie znałem wyszukałem w google niby to o co mi chodziło ale poprawiłem niby pod swój przypadek ale po wgraniu do Arduino normalnie cuda na kiju raz sie zapala 1 dioda po naciśnięciu inna ale nie po kolei więc zaczynam się poddawać jakby był ktoś na tyle miły i popatrzył na te moje "wypociny" to byłbym ogromnie wdzięczny. Pozdrawiam Grzesiek 
oto mój kod
Kod:
int numer = 5;
boolean wys = false;
boolean nis = false;
void setup() {
  // put your setup code here, to run once:
pinMode (2,INPUT);
pinMode (3,OUTPUT);
pinMode (4,OUTPUT);
pinMode (5,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  wys = digitalRead (2);
  if (wys && !nis){
    numer++;
  if (numer >4){
    numer = 0;
  }
    
  }
  wys = nis;
switch (numer){
  case 0:
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  break;
  case 1:
  digitalWrite (3,HIGH);
  digitalWrite (4, LOW);
  digitalWrite (5, LOW);
  break;
  case 2:
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  break;
  case 3:
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  break;
  default:
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  break;
}
}
Prosze używać code. z poważaniem adix.
 
Odpowiedź
#2
Możesz to zrobić na swich na if możliwości wiele, problem u ciebie polega na wytypowaniu hazardu.
Nie pod ciągnołeś wejścia do 1 zamiast pinMode (2,INPUT); wpisz tak pinMode (2,INPUT_PULLUP);

po drugie nazwij sobie porty dla przejzysztosci programu np;
Kod:
int const led1=1;
int const led2=2;
int const led3=3;
int const led4=4;
gdzie
led1,led2,led3,led4, to dowolna nazwa
1,2,3,4 to numery portów jakie używasz ustawiasz wedlug swojego uznania.
potem stosujesz
zamiast digitalWrite(3, LOW); dajesz digitalWrite(led3, LOW); .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Witam dzięki za zainteresowanie co do "PULLUPu" to nie dałem w programie gdyż zrobiłem to sprzętowo rezystor do masy a czy sama zmiana nazewnictwa portów pomoże bo w tym momencie to zachowuje się to w ten sposób że po naciśnięciu przycisku świecą się wszystkie a a po puszczeniu losowo zaświeca sie jedną lub wcale zaczyna mnie to przerastać niby banalny program a tyle problemu
 
Odpowiedź
#4
(03-11-2017, 10:48)grzesio.px napisał(a): Witam dzięki za zainteresowanie co do "PULLUPu" to nie dałem w programie gdyż zrobiłem to sprzętowo rezystor do masy a czy sama zmiana nazewnictwa portów pomoże bo w tym momencie to zachowuje się to w ten sposób że po naciśnięciu przycisku świecą się wszystkie a a po puszczeniu losowo zaświeca sie jedną lub wcale zaczyna mnie to przerastać niby banalny program a tyle problemu

Przede wszystkim, rezystor do zasilania, za rezystorem przycisk i jednocześnie masa, za przyciskiem pin Arduino.
Druga rzecz, spróbuj zrobić tak:
Kod:
while(digitalRead(2)==LOW){
wys = digitalRead (2);
}
if (wys && !nis){
    numer++;
  if (numer >4){
    numer = 0;
  }
    
  }
 
Odpowiedź
#5
Witam co do wcześniejszego tematu rozwiązałem go okazało się że były w nie właściwym miejscu nawiasy a teraz mam trochę ciekawsze pytanie tzn czy da radę aby jedno arduino obsłużyło dwa takie same programy tzn 2 przycisk robi dokładnie to samo co 1 tyle że z innymi portami .
Reasumując ma to wyglądać tak  1... 0->1->2->3->0
                                                                   2...0->4->5->6->0
 
Odpowiedź
#6
Da się ,Uprzedzając następne pytanie z 3 i 4 też się da.
 
Odpowiedź
#7
(03-11-2017, 22:39)grzesio.px napisał(a): a teraz mam trochę ciekawsze pytanie tzn czy da radę aby jedno arduino obsłużyło dwa takie same programy tzn 2 przycisk robi dokładnie to samo co 1 tyle że z innymi portami .

Oczywiście da się, z tym, że nie dwa takie same programy a raczej jeden program obsługujący dwa przyciski. No albo 3,4,5 czy ile tam Ci potrzebaSmile
CodingBlog.pl - ELEKTRONIKA / PROGRAMOWANIE / DIY
 
Odpowiedź
#8
Nie nie przez przesady chodzi mi tylko w sumie o coś takiego żeby obsługiwało 2 przyciski już mówię do czego to ma być chcę przerobić sterowanie okapu kuchennego + sterowanie światłem w okapie i pasek led pod szafkami bo mnie żona prześladuje miało być po staremu na kościach cd 4022 i plus do tego reszta (prototyp działa) ale trzeba iść z postępem więc arduino.
I tu moje pytanie czy zrobienie czegoś takiego 1 przycisk 0->1->2->3->0; 2 przycisk 0->1->1+2->2->0 (to co dotyczy 1 przycisku to mam) to jest wyższa szkoła jazdy. Bo w sumie jestem gotów (a czego bym nie chciał bo szkoda aż dwóch arduino do takiego cuda pchać) do 2 arduino 1 jeden robi 1 przycisk a drugi to co się tyczy 2.
 
Odpowiedź
#9
Twoje zadanie jst bardzo proste do wyknania i przy silnej Twojej woli poradzisz sobie napewno Smile
My natomiast z chęcią Ci pomozemy ale dawaj tylko kody abyśmy mieli o czym rozmawiać...
Próbuj sam pisać programy a jak nie wychodzą to dawaj kod na forum i pytaj.
Tak jak napisałeś wcześniej w swoim poście, że trzeba iść z postępem tak więc programuj, programuj, programuj...
Powodzenia Smile
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#10
Są kursy w necie poczytaj potem z elektroniki. Zastanów się nad PWN .
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości