Sterownik Żłobka na Atmega problem

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
darex120
Młodszy majsterkowicz
Posty: 28
Rejestracja: 5 lut 2018, 17:36

Sterownik Żłobka na Atmega problem

Post autor: darex120 » 10 gru 2022, 09:23

Witam mam pewien problem , mianowicie , podpięte mam krańcówki pod pin 5 i 6 i nie mogę ogarnąć tego
aby po naciśnięciu krańcówki 5 oraz 6 uruchamiał się dalszy program jak ruszę krańcówką 6 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: Zaznacz cały


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[2]))) {
      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 **********
podaje link do filmiku https://youtu.be/nyYNlHMe-L0

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1276
Rejestracja: 18 lis 2011, 02:18

Re: Sterownik Żłobka na Atmega problem

Post autor: Marhef » 10 gru 2022, 20:21

Opisz proszę, jak to ma działać. Jak trzymasz przycisk ma kontynuować ruch? Jak puścisz ma się zatrzymać?
Wiesz, w którym miejscu w programie się zatrzymuje?
Zerknę w kod, jak będę miał chwilę, ale to nie będzie szybko
darex120
Młodszy majsterkowicz
Posty: 28
Rejestracja: 5 lut 2018, 17:36

Re: Sterownik Żłobka na Atmega problem

Post autor: darex120 » 10 gru 2022, 23:58

Wiec tak , naciskam przycisk start , otwierają się drzwi lewe i prawe dojeżdżają do krańcowek i stają i uruchamiaja nastepny silnik tzw. kolo
Awatar użytkownika
Marhef
Złota rączka
Posty: 1276
Rejestracja: 18 lis 2011, 02:18

Re: Sterownik Żłobka na Atmega problem

Post autor: Marhef » 11 gru 2022, 15:04

I to działa, czy po dojechaniu do krańcówek się zatrzymuje?
darex120
Młodszy majsterkowicz
Posty: 28
Rejestracja: 5 lut 2018, 17:36

Re: Sterownik Żłobka na Atmega problem

Post autor: darex120 » 11 gru 2022, 15:18

Tak wszystko pracuje jak rusze drzwiami jak nie rusze to stoi
darex120
Młodszy majsterkowicz
Posty: 28
Rejestracja: 5 lut 2018, 17:36

Re: Sterownik Żłobka na Atmega problem

Post autor: darex120 » 13 gru 2022, 20:43

Ok zrobione powodem była kolejność krańcówek teraz działa tak jak powino
link do filmiku https://www.youtube.com/watch?v=Nce0iVsj...ture=share

Dzięki wszystkim za pomoc. :-)
ODPOWIEDZ

Strony partnerskie: