Po zmianach program wygląda tak:
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ę).
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,");
}
}
}
}
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ę).