07-12-2022, 07:39
Witam mam pewien problem , mianowicie , podpięte mam krańcówki pod pin D7 i D8 i nie mogę ogarnąć tego
aby po naciśnięciu krańcówki D7 oraz D8 uruchamiał się dalszy program jak ruszę krańcówką D7 czyli najpierw
nacisnę a potem puszczę program rusza jeśli krańcówka jest cały czas naciśnieta nie rusza i teraz pytanie
gdzie tkwi problem poniżej przesyłam kod
aby po naciśnięciu krańcówki D7 oraz D8 uruchamiał się dalszy program jak ruszę krańcówką D7 czyli najpierw
nacisnę a potem puszczę program rusza jeśli krańcówka jest cały czas naciśnieta nie rusza i teraz pytanie
gdzie tkwi problem poniżej przesyłam kod
Kod:
const byte led[10] = {0, 1, 2, 3, A0, A1, A2, A5, A4, A3}; //numery pinow diod zaczynajac od diody 1 w miejscu led[5] wpisac rowniez ilosc diod
byte ledMax = 10; //liczba diod
const byte Switch[10] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; //numery pinow wlacznikow zaczynajac od wlacznika 1 itd. mozna dodac wiecej pozycji po przecinki w miejscu Switch[8] wpisac rowniec ilosc wlacznikow
byte switchMax = 10; //lczba wlacznikow
/*
ledy :
1 silnik drzwi lewych OTWIERANIE
2 silnik drzwi prawych OTWIERANIE
3 silnik drzwi lewych ZAMYKANIE
4 silnik drzwi prawych ZAMYKANIE
5 koło cały czas ma się kręcic
6 kołyska cały czas ma się kręcic
7 mp3 i światło cały czas właczone
8 dzwon
9 dzwonnik w LEWO
10 dzwonnik w PRAWO
przyciski:
1 przycisk start
2 krańcówka drzwi lewych otwarcie
3 krańcówka drzwi prawych otwarcie
4 krancowka dzwonnika w lewo
5 krańcówka dzwonnika w prawo
6 krańcówka drzwi lewych zamknięcie
7 krańcówka drzwi prawych zamknięcie
8 przycisk stop
9
10
*/
bool switchStan_1; // stan wlacznika 1 przycisk start
bool switchStan_2; // stan wlacznika 2 krancowka otwarcia drzwi lewych
bool switchStan_3; // stan wlacznika 3 krancowka otwarcia drzwi prawych
bool switchStan_4; // stan wlacznika 4 krancowka dzwonnika w lewo
bool switchStan_5; // stan wlacznika 5 krancowka dzwonnika w prawo
bool switchStan_6; // stan wlacznika 6 krancowka zamkniecia drzwi lewych
bool switchStan_7; // stan wlacznika 7 krancowka zamniecia drzwi prawych
bool switchStan_8; // stan wlacznika 8 przycisk stop
bool ringingManPermit; // zezwolenie na cykl dzwonnika
bool stopSequencePermit; // zezwolenie za wykonanie cyklu zakończenia sekwencji
bool startPermit = 1; // zezwolenie na start
bool couting_1; // zezwolenie odliczania wlaczenia swiatla i mp3 po wyzwoleniu wlacznika 2 i 3
bool couting_2; // zezwolenie odliczania wlaczenia kolyski
bool couting_3; // zezwolenie odliczania wlaczenia kola
bool couting_4; // zezwolenie odliczania wlaczenia dzwonnika w lewo
bool couting_5; // zezwolenie odliczania bicia dzwona
bool couting_6; // zezwolenie odliczania czekania dzwonnika na kolejny ruch
long timeCouting_1 = 1000; // czas po ktorym ma wlaczyc sie swiatlo po otwarciu drzwi
long timeCouting_2 = 1000; // czas po ktorym ma wlaczyc sie kolyska po wlaczeniu swiatla
long timeCouting_3 = 1000; // czas po ktorym ma wlaczyc sie kolo po wlaczeniu swiatla
long timeCouting_4 = 1000; // czas po ktorym ma wlaczyc sie dzwonnik po wlaczeniu kola
long timeCouting_5 = 2000; // czas bicia dzwona
long timeCouting_6 = 3000; // czas czekania dzownnika do kolejnego przejazdu do dzwona
long timeStop_1 = 1000; // czas po ktorym ma sie wylaczyc kolo od czasu powortu dzownnika
long timeStop_2 = 1000; // czas po ktorym ma sie wylaczyc kolyska po wylaczeniu kola
long timeStop_3 = 1000; // czas po ktorym ma sie wylaczyc swiatlo i mp3 po wylaczeniu kolyski
long timeStop_4 = 1000; // czas po ktorym maja sie zamknac drzwi po wylaczeniu swiatla
unsigned long newTime; // aktualny czas od uruchomienia urzadzenia
unsigned long oldTime_1; // przechowywanie czasu swiatla i mp3
unsigned long oldTime_2; // przechowywanie czasu kolyski
unsigned long oldTime_3; // przechowywanie czasu kola
unsigned long oldTime_4; // przechowywanie czasu dzwonnika
unsigned long oldTime_5; // przechowywanie czasu dzwona
unsigned long oldTime_6; // przechowywanie czasu oczekiwania dzwonnika
unsigned long oldTimeState;
void setup() {
// Serial.begin(9600);
for (byte i = 0; i < switchMax; i++) { //ustawienie pinow jako wejscie wlacznikow z podciagnieciem do zasilania (PULLUP)
pinMode(Switch[i], INPUT_PULLUP);
}
for (byte i = 0; i < ledMax; i++) { //ustawienie pinow jako wyjscie diod
pinMode(led[i], OUTPUT);
}
}
void loop() {
switching_1(); // funkcja wlacznika 1
if (startPermit && !stopSequencePermit) {
switching_2(); // funkcja wlacznika 2 i 3
ringingMan(); // funkcja dzwonnika
}
if ((!digitalRead(Switch[7])) && (startPermit)) {
startPermit = false;
stopSequencePermit = true;
}
if ((!startPermit) && (stopSequencePermit)) {
stopSequence(); //funkcja koncowa
}
if (!startPermit) {
if (!digitalRead(Switch[5])) {
digitalWrite(led[2], LOW);
}
if (!digitalRead(Switch[6])) {
digitalWrite(led[3], LOW);
}
}
if (!digitalRead(Switch[3])) {
digitalWrite(led[8], LOW);
}
if (!digitalRead(Switch[4])) {
digitalWrite(led[9], LOW);
}
stateTimes(); // funkja wykonawcza po wyzwoleniu odliczania
// outputsAndInputsStateControl();
}
void switching_1() {
if (digitalRead(Switch[0])) {
switchStan_1 = false;
}
if ((!digitalRead(Switch[0])) && (!switchStan_1)) {
delay(20);
if ((!digitalRead(Switch[0])) && (!switchStan_1)) {
switchStan_1 = true;
digitalWrite(led[0], HIGH);
digitalWrite(led[1], HIGH);
digitalWrite(led[2], LOW);
digitalWrite(led[3], LOW);
startPermit = true;
}
}
}
void switching_2() {
if (digitalRead(Switch[1])) {
switchStan_2 = false;
}
if (digitalRead(Switch[2])) {
switchStan_3 = false;
}
if (!digitalRead(Switch[1])) {
digitalWrite(led[0], LOW);
}
if (!digitalRead(Switch[2])) {
digitalWrite(led[1], LOW);
}
if ((!digitalRead(Switch[1])) && (!digitalRead(Switch[2]))) {
delay(20);
if ((!digitalRead(Switch[1])) && (!digitalRead(Switch[1]))) {
digitalWrite(led[0], LOW);
digitalWrite(led[1], LOW);
switchStan_2 = true, switchStan_3 = true;
couting_1 = true;
oldTime_1 = millis();
}
}
else {
if (couting_1 == false) {
oldTime_1 = millis();
}
}
}
void ringingMan() {
if (ringingManPermit) {
if ((!digitalRead(Switch[3])) && (!switchStan_5)) {
digitalWrite(led[8], LOW);
digitalWrite(led[7], HIGH);
couting_5 = true;
switchStan_5 = true;
switchStan_6 = false;
oldTime_5 = millis();
}
if ((!digitalRead(Switch[4])) & (!switchStan_6)) {
digitalWrite(led[9], LOW);
couting_6 = true;
switchStan_6 = true;
oldTime_6 = millis();
}
}
}
void stopSequence() {
digitalWrite(led[7], LOW);
digitalWrite(led[0], LOW);
digitalWrite(led[1], LOW);
if (digitalRead(Switch[4])) {
digitalWrite(led[9], HIGH);
digitalWrite(led[8], LOW);
}
while (digitalRead(Switch[4]) == HIGH) {
}
if (!digitalRead(Switch[4])) {
Serial.println("wylaczono");
digitalWrite(led[9], LOW);
digitalWrite(led[8], LOW);
}
delay(timeStop_1);
digitalWrite(led[4], LOW);
delay(timeStop_2);
digitalWrite(led[5], LOW);
delay(timeStop_3);
digitalWrite(led[6], LOW);
delay(timeStop_4);
digitalWrite(led[2], HIGH);
digitalWrite(led[3], HIGH);
couting_1 = false;
couting_2 = false;
couting_3 = false;
couting_4 = false;
couting_5 = false;
couting_6 = false;
stopSequencePermit = false;
}
void stateTimes() {
newTime = millis();
if (couting_1 == true) {
if ((newTime - oldTime_1) >= timeCouting_1) { // czas po ktorym nastapi wlaczanie swiatla i mp3 po otwarciu drzwi
digitalWrite(led[6], HIGH);
couting_1 = false;
couting_2 = true;
oldTime_2 = newTime;
}
}
if (couting_2 == true) {
if ((newTime - oldTime_2) >= timeCouting_2) { // czas po ktorym nastapi wlaczanie kolyski po wlaczeniu swiatla
digitalWrite(led[5], HIGH);
couting_2 = false;
couting_3 = true;
oldTime_3 = newTime;
}
}
if (couting_3 == true) {
if ((newTime - oldTime_3) >= timeCouting_3) { // czas po ktorym nastapi wlaczanie kola po wlaczeniu kolyski
digitalWrite(led[4], HIGH);
couting_3 = false;
couting_4 = true;
oldTime_4 = newTime;
}
}
if (couting_4 == true) {
if ((newTime - oldTime_4) >= timeCouting_4) { // czas po ktorym nastapi wlaczanie dzwonnika w lewo po wlaczeniu kola
digitalWrite(led[8], HIGH);
ringingManPermit = true;
couting_4 = false;
switchStan_5 = false;
}
}
if (couting_5 == true) {
if ((newTime - oldTime_5) >= timeCouting_5) { // czas bicia dzwona
digitalWrite(led[7], LOW);
digitalWrite(led[9], HIGH);
switchStan_5 = true;
couting_5 = false;
switchStan_6 = false;
}
}
if (couting_6 == true) {
if ((newTime - oldTime_6) >= timeCouting_6) { // czas oczekiwania dzwonnika na kolejny ruch
digitalWrite(led[8], HIGH);
switchStan_5 = false;
couting_6 = false;
}
}
}
void outputsAndInputsStateControl() {
byte x = 1;
byte y = 1;
newTime = millis();
if (newTime - oldTimeState >= 1000) {
for (byte i = 0; i < ledMax; i++) {
Serial.print("LED:");
Serial.print(x);
Serial.print(" = ");
Serial.println(digitalRead(led[i]));
x++;
}
for (byte i = 0; i < switchMax; i++) {
Serial.print("Switch:");
Serial.print(y);
Serial.print(" = ");
Serial.println(digitalRead(Switch[i]));
y++;
}
oldTimeState = newTime;
}
}
//******* koniec programu **********