• 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
z pętlą zgubiłem się w czasie
#30
Po zmianach program wygląda tak:
Kod:
#define fr 11 // wejscie z fotorezystora
#define sw 12 // dodatkowy przycisk wyzwalania
#define k1 22  // przekaźnik 1
// Czemu przekaźniuki nazwywają się k1..k16? "k" od czego? "pk", bym rozumiał, "r" lub "rel" też, ale "k"?
Ze względu na to, ze wyjścia sa kolejno 22..37 nie trzeba definiować wszystkich w tablicy.
#define    LICZBA_PK        16

// przypisanie stanów do pinów
int l = 1; // licznik zdarzeń
int sk = HIGH;
/*
int sk1 = HIGH; // włączone  ....int sk16 = HIGH; // włączone
*/
// Czemu typ int? Za szybki jest AVR i ma za dużo FLASH? AVR to nie ARM, w którym operacje na int wykonują się szybciej niż na 8-bit.
//Nie mozna tak:
uint8_t sk[LICZBA_PK];
//?

int czastrwania = 15;  // przypisanie wartości do czasu trwania sekwencji
int tempo = 8000;  // określenie tempa załączania

// przypisanie wartośki częstotliwości załąćzania
unsigned long migk[LICZBA_PK];


// przypisanie wartości przesunięcia w czasie załączenia
unsigned long memczask[LICZBA_PK] ;
unsigned long czasstart=0;
unsigned long aczas = 0;
unsigned long StartCzas ;
byte stat = 0;

void setup() {
  Serial.begin(9600);
  for(uint8_t x=0; x<LICZBA_PK ; x++) migk[x] = tempo;
  for(uint8_t x=0; x<LICZBA_PK ; x++) pinMode( k1+x, OUTPUT);
  for(uint8_t x=0; x<LICZBA_PK ; x++) sk[LICZBA_PK] = HIGH;
  pinMode (sw, INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(sw) == HIGH )
  {
    stat = 0;
    // tu trzeba dopisać sekwencję stop
  }
  if (digitalRead(sw) == LOW && stat == 0){
    stat = 1;
    StartCzas = millis();
    for(uint8_t x=0; x<LICZBA_PK; x++) memczask1 = StartCzas - x * 1000;
  }

  if (digitalRead(sw) == LOW && stat == 1){
    aczas = millis();

    for(uint8_t x=0; x<LICZBA_PK; x++) {
        if ( aczas - memczask[x] >= migk[x]) {        //załączanie przekaźnika 1
        memczask1 = aczas;
        sk[x] = !sk[x];
        digitalWrite(k[x], sk[x]); Serial.print(" 1,");
        }
    }
  }

}
Czytelniejszy? Łatwiej wprowadzać zmiany? Zmieniam jedno wyrażenie a zmiana dotyczy wszystkich 16 przekaźników. Proste i wygodne?

PS
Pisałem "z palca" więc może są błędy ale forum nie jest po to aby dawać gotowce (ryby) ale nakierować na rozwiązanie problemu (dać wędkę).
 
Odpowiedź
  


Wiadomości w tym wątku
z pętlą zgubiłem się w czasie - przez maniekdii - 05-12-2019, 09:29
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 08:55
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 09:12
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:31
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:18
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 09:44
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 10:41
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 11:59
RE: z pętlą zgubiłem się w czasie - przez semi - 07-12-2019, 15:22
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 15:42
RE: z pętlą zgubiłem się w czasie - przez elvis - 07-12-2019, 16:39
RE: z pętlą zgubiłem się w czasie - przez elvis - 08-12-2019, 12:19

Skocz do:


Przeglądający: 1 gości