• 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
Proszę o pooc w kodzie
#1
Dopiero się uczę i proszę o pomoc w dopisaniu paru linijek. Jeżeli void zielona() nie zostanie wykonana to void czerwona() też nie zostanie wykonana i odwrotnie i każde przyciśnięcie przycisku mignie przypisana do niej led.

long cm;                        //zielona
long cm1;                        //czerwona
long pm,pm_1;                    //zielona
long pm0,pm_2;                  //czerwona
long licznik;                    //zielona
long licznik2;                  //czerwona
byte start;                      //zielona
byte start1;                    //czerwona
int liczbaliosci3 = 0;
int statz,startz_1;              //zielona
int statcz,startcz_2;            //czerwona
byte czas_oczekiwania = 5;      //zielona
byte czas_oczekiwania2 = 5;      //czerwona
int liczba1 = 3;                  //ilość przyciśnięć zielona
int liczba2 = 3;                  //ilość przyciśnięć czerwona
int liczbaczas1 = 10;                //czas wyłączenia led zielona
int liczbaczas2 = 10;                //czas wyłączenia led czerwona
void setup() {
  Serial.begin(9600);
pinMode(5, INPUT_PULLUP);        //przycisk zielonej
pinMode (12, OUTPUT);            //led zielonej
pinMode(4, INPUT_PULLUP);        //przycisk czerwonej
pinMode (11, OUTPUT);            //led czerwonej
}
void loop() {
  zielona();
  czerwona(); 
}
void zielona() {
//=========================zielona============================= 

  if ( start > 0 ){
  start1 = 0;}
 
//if (start==3){
//liczbaliosci3 ++;
//}
cm = millis()/100;

if ( digitalRead(5) == HIGH ){statz = 0;}

if ( digitalRead(5) == LOW and statz == 0 )
    {start ++;statz = 1;pm = cm;}

if ( start > 0 ){
  if ((cm - pm) == 1){licznik ++;pm = cm;}}

if ( licznik > czas_oczekiwania and digitalRead(12) == 0 )
    {licznik = 0;start = 0;}
     
if ( start >= liczba1 )
    {digitalWrite(12, LOW);}

if ( digitalRead(12) == LOW ){
  licznik = 0;start = 0;
  if ((cm - pm_1) > 0){startz_1 ++;pm_1 = cm;}
  if ( startz_1 > liczbaczas1 ){digitalWrite(12, HIGH);startz_1 = 0;}}
 
}

//=========================czerwona=============================
void czerwona() {

  if ( start1 > 0 ){
  start = 0;}

cm1 = millis()/100;

if ( digitalRead(4) == HIGH )statcz = 0;

if ( digitalRead(4) == LOW and statcz == 0 )
    {start1 ++;statcz = 1;pm0 = cm1;}

if ( start1 > 0 ){
  if ((cm1 - pm0) == 1){licznik2 ++;pm0 = cm1;}}

if ( licznik2 > czas_oczekiwania2 and digitalRead(11) == 0 )
    {licznik2 = 0;start1 = 0;}
     
if ( start1 >= liczba2 )
    {digitalWrite(11,LOW);}

if ( digitalRead(11) == LOW ){
  licznik2 = 0;start1 = 0;
  if ((cm1 - pm_2) > 0){startcz_2 ++;pm_2 = cm1;}
  if ( startcz_2 > liczbaczas2 ){digitalWrite(11,HIGH);startcz_2 = 0;}


 
  }
//Serial.print(liczbaliosci3);
Serial.print("ZIELONY");
Serial.print(" - ");
Serial.print(start);
Serial.print(" / ");
Serial.print(startz_1);
Serial.print(" i ");
Serial.print("CZERWONY");
Serial.print(" - ");
Serial.print(start1);
Serial.print(" / ");
Serial.println(startcz_2);

}
 
Odpowiedź
#2
Funkcje zielona(); i czerwona(); zawsze zostaną wykonane w loop. Nie ma za co.
A jeśli chodzi o coś innego to napisz co chcesz osiągnąć, a co otrzymujesz bieżącym kodem.
 
Odpowiedź
#3
(21-11-2021, 17:30)kaczakat napisał(a): Funkcje  zielona(); i  czerwona();  zawsze zostaną wykonane w loop. Nie ma za co.
A jeśli chodzi o coś innego to napisz co chcesz osiągnąć, a co otrzymujesz bieżącym kodem.
Teraz mam tak jak wcisnę przycisk pin 4 1raz to nie wcisnę przycisku pin 5 aż nie osiągnę 3 wciśnięć na pinie 4 i odwrotnie
mogę wciskać nieskończoną ilość dowolny kolor np. 10 razy pod rząd mogę gasić diodę wciskając 3razy przycisk

chciał bym aby każde przyciśnięcie czy pin 4 czy pin5 złasił led na ten czas co gasi po nieciśnięciu 3 razy przycisku
(int liczbaczas1 = 10; i int liczbaczas2 = 10Wink oprócz tego gaszenie led ma być naprzemienne najpierw mam zgasić led pin 11 a potem led pin 12, tak abym nie mógł zgazić kilka razy pod rząd jednej z led.
np. żebym mógł sortować przedmioty 3 okrągłe 3 kwadratowe i ich kolejność była zawsze taka sama po 3 szt
 
Odpowiedź
#4
Niestety ja nie rozumiem o co Ci chodzi. Może ktoś inny przeczyta i zrozumie.
Jedyne co widzę, to nie zrobiłeś żadnego kursu od ostatniego wątku i nie opanowałeś millis, ani obsługi przycisków z obsługą drgań styków.
Nawet jeśli te wydruki na serial mają Ci w czymś pomagać, to ich ilość będzie taka, że i tak nic nie zobaczysz na ekranie.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości