• 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
Arduino problem z pinem D7
#10
Obejrzałem film i dalej nie wiem, którą krańcówkę odblokowałeś, żeby program ruszył jak chcesz. Ruszyłeś drzwiami lewymi czy prawymi?  Jak widzę, że na filmie ruszyłeś lewymi, ale dla Jezuska to są prawe, w samochodzie byłyby to prawe, w Castoramie do salonu lewe.
Rozumiesz jak prezentujesz swoje myśli w filmie i w programie i dlaczego nic z nich nie wiadomo?



W funkcji switching_2 masz wyłączenie drzwi lewych i prawych , potem wyłączenie ze sprawdzeniem drgań, ale już cyferki się w oczach mienią i zrobiłeś błędy, okolice linii 159.
Pisanie programu w taki sposób jak pisałem we wcześniejszych postach to jak przebieranie maku z popiołu, a każda linijka więcej kodu, to większa kupka do przebrania.
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[Lkolyska] wpisac rowniez ilosc diod
byte ledMax = 10; //liczba diod
enum Ledy { LSilnikLOtwieranie, LSilnikPOtwieranie,LSilnikLZamykanie,LSilnikPZamykanie,LKolo,Lkolyska,LMP3,LDzwon,LDzwonnikL, LDzwonnikP };

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
enum wejscia { WStart, WDrzwiLOpen, WDrzwiPOpen, WDzwonnikL,WDzwonnikP,WDrzwiLClose, WDrzwiPClose,WStop};
byte switchMax = 10;   //lczba wlacznikow
/*
  ledy :
  0 silnik drzwi lewych OTWIERANIE
  1 silnik drzwi prawych OTWIERANIE
  2 silnik drzwi lewych ZAMYKANIE
  3 silnik drzwi prawych ZAMYKANIE
  4 koło cały czas ma się kręcic
  5 kołyska cały czas ma się kręcic
  6 mp3 i światło cały czas właczone
  7 dzwon
  8 dzwonnik w LEWO
  9 dzwonnik w PRAWO

  przyciski:

  0 przycisk start
  1 krańcówka drzwi lewych otwarcie
  2 krańcówka drzwi prawych otwarcie
  3 krancowka dzwonnika w lewo
  4 krańcówka dzwonnika w prawo
  5 krańcówka drzwi lewych zamknięcie
  6 krańcówka drzwi prawych zamknięcie
  7 przycisk stop
  8
  9
*/
bool switchStan_Start;   // stan wlacznika 1 przycisk start
bool switchStan_DrzwiLOpen;   // stan wlacznika 2 krancowka otwarcia drzwi lewych
bool switchStan_DrzwiPOpen;   // stan wlacznika 3 krancowka otwarcia drzwi prawych
bool switchStan_DzwonnikL;   // stan wlacznika 4 krancowka dzwonnika w lewo
bool switchStan_DzwonnikP;   // stan wlacznika 5 krancowka dzwonnika w prawo
bool switchStan_DrzwiLClose;   // stan wlacznika 6 krancowka zamkniecia drzwi lewych
bool switchStan_DrzwiPClose;   // stan wlacznika 7 krancowka zamniecia drzwi prawych
bool switchStan_Stop;   // stan wlacznika 8 przycisk stop

bool ringingManPermit;  // zezwolenie na cykl dzwonnika
bool stopSequencePermit; // zezwolenie za wykonanie cyklu zakończenia sekwencji

bool startPermit  ; // zezwolenie na start PO CO TU 1 skoro i tak wylacza pierwsza funkcja LOOP

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[WStop])) && (startPermit)) {
    startPermit = false;
    stopSequencePermit = true;
  }
  if ((!startPermit) && (stopSequencePermit)) {
    stopSequence();   //funkcja koncowa
  }

  if (!startPermit) {
    if (!digitalRead(Switch[WDrzwiLClose])) {
      digitalWrite(led[LSilnikLZamykanie], LOW);
    }
    if (!digitalRead(Switch[WDrzwiPClose])) {
      digitalWrite(led[LSilnikPZamykanie], LOW);
    }
  }
  if (!digitalRead(Switch[WDzwonnikP])) {
    digitalWrite(led[LDzwonnikL], LOW);
  }
  if (!digitalRead(Switch[WDzwonnikL])) {
    digitalWrite(led[LDzwonnikP], LOW);
  }
  stateTimes();             // funkja wykonawcza po wyzwoleniu odliczania
  // outputsAndInputsStateControl();
}




void switching_1() {

  if (digitalRead(Switch[WStart])) { //nie wcisniety
    switchStan_Start = false;
  }
  if ((!digitalRead(Switch[WStart])) && (!switchStan_Start)) { //bounce
    delay(20);
    if ((!digitalRead(Switch[WStart])) && (!switchStan_Start)) {
      switchStan_Start = true;
      digitalWrite(led[LSilnikLOtwieranie], HIGH); //Otwieranie drzwi
      digitalWrite(led[LSilnikPOtwieranie], HIGH);
      digitalWrite(led[LSilnikLZamykanie], LOW);
      digitalWrite(led[LSilnikPZamykanie], LOW);
      startPermit = true;
    }
  }
}

void switching_2() {
  if (digitalRead(Switch[WDrzwiLOpen])) {
    switchStan_DrzwiLOpen = false;
  }
  if (digitalRead(Switch[WDrzwiPOpen])) {
    switchStan_DrzwiPOpen = false;
  }
  if (!digitalRead(Switch[WDrzwiLOpen])) { //drzwi otwarte, zatrzymanie silnika
    digitalWrite(led[LSilnikLOtwieranie], LOW);
  }
  if (!digitalRead(Switch[WDrzwiPOpen])) { //drzwi otwarte, zatrzymanie silnika
    digitalWrite(led[LSilnikPOtwieranie], LOW);
  }
  if ((!digitalRead(Switch[WDrzwiLOpen])) && (!digitalRead(Switch[WDrzwiPOpen]))) { //znowu sprawdzanie czy drzwi otwarte ale z bouncingiem
    delay(20);
    if ((!digitalRead(Switch[WDrzwiLOpen])) && (!digitalRead(Switch[WDrzwiLOpen]))) {
      digitalWrite(led[LSilnikLOtwieranie], LOW);
      digitalWrite(led[LSilnikPOtwieranie], LOW);
      switchStan_DrzwiLOpen = true, switchStan_DrzwiPOpen = true;
      couting_1 = true;
      oldTime_1 = millis();
    }
  }
  else {
    if (couting_1 == false) {
      oldTime_1 = millis();
    }
  }
}

void ringingMan() {
  if (ringingManPermit) {
    if ((!digitalRead(Switch[WDzwonnikP])) && (!switchStan_DzwonnikP)) {
      digitalWrite(led[LDzwonnikL], LOW);
      digitalWrite(led[LDzwon], HIGH);
      couting_5 = true;
      switchStan_DzwonnikP = true;
      switchStan_DrzwiLClose = false;
      oldTime_5 = millis();
    }
    if ((!digitalRead(Switch[WDzwonnikL])) & (!switchStan_DrzwiLClose)) {
      digitalWrite(led[LDzwonnikP], LOW);
      couting_6 = true;
      switchStan_DrzwiLClose = true;
      oldTime_6 = millis();
    }
  }
}

void stopSequence() {
  digitalWrite(led[LDzwon], LOW);
  digitalWrite(led[LSilnikLOtwieranie], LOW);
  digitalWrite(led[LSilnikPOtwieranie], LOW);
  if (digitalRead(Switch[WDzwonnikL])) {
    digitalWrite(led[LDzwonnikP], HIGH);
    digitalWrite(led[LDzwonnikL], LOW);
  }
  while (digitalRead(Switch[WDzwonnikL]) == HIGH) {
  }
  if (!digitalRead(Switch[WDzwonnikL])) {
//    Serial.println("wylaczono");
    digitalWrite(led[LDzwonnikP], LOW);
    digitalWrite(led[LDzwonnikL], LOW);
  }
  delay(timeStop_1);
  digitalWrite(led[LKolo], LOW);
  delay(timeStop_2);
  digitalWrite(led[Lkolyska], LOW);
  delay(timeStop_3);
  digitalWrite(led[LMP3], LOW);
  delay(timeStop_4);
  digitalWrite(led[LSilnikLZamykanie], HIGH);
  digitalWrite(led[LSilnikPZamykanie], 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[LMP3], 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[Lkolyska], 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[LKolo], 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[LDzwonnikL], HIGH);
      ringingManPermit = true;
      couting_4 = false;
      switchStan_DzwonnikP = false;
    }
  }

  if (couting_5 == true) {
    if ((newTime - oldTime_5) >= timeCouting_5) {    // czas bicia dzwona
      digitalWrite(led[LDzwon], LOW);
      digitalWrite(led[LDzwonnikP], HIGH);
      switchStan_DzwonnikP = true;
      couting_5 = false;
      switchStan_DrzwiLClose = false;
    }
  }

  if (couting_6 == true) {
    if ((newTime - oldTime_6) >= timeCouting_6) {    // czas oczekiwania dzwonnika na kolejny ruch
      digitalWrite(led[LDzwonnikL], HIGH);
      switchStan_DzwonnikP = 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 **********
Tu jest tak wiele do poprawy, że serio to lepiej napisać od nowa. Po co wszędzie masz digitalWrite po kilka razy by coś wysłać do silnika, jeszcze te błędne opisy, że pin startuje silnik w lewo,  a drugi w prawo, gdy to ma być ich odpowiednia sekwencja , powinny być funkcje silnikPrawyOtiweranie, SilnikPrawyZamykanie, silnikPrawyStop, itd., teraz masz pół tej sekwencji w jednej funkcji, gdzieś tam drugie. Przeczytaj książkę,  gotowe programy, które Ci się podobają, jak zbierzesz więcej wiedzy będą większe szanse na sukces.
Poza tym fajna szopka.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
Arduino problem z pinem D7 - przez darex120 - 07-12-2022, 07:39
RE: Arduino problem z pinem D7 - przez kaczakat - 07-12-2022, 19:52
RE: Arduino problem z pinem D7 - przez darex120 - 08-12-2022, 07:09
RE: Arduino problem z pinem D7 - przez kaczakat - 08-12-2022, 13:24
RE: Arduino problem z pinem D7 - przez darex120 - 08-12-2022, 15:05
RE: Arduino problem z pinem D7 - przez kaczakat - 08-12-2022, 15:37
RE: Arduino problem z pinem D7 - przez darex120 - 08-12-2022, 16:11
RE: Arduino problem z pinem D7 - przez kaczakat - 08-12-2022, 19:24
RE: Arduino problem z pinem D7 - przez darex120 - 09-12-2022, 10:03
RE: Arduino problem z pinem D7 - przez kaczakat - 09-12-2022, 12:57
RE: Arduino problem z pinem D7 - przez darex120 - 09-12-2022, 19:12
RE: Arduino problem z pinem D7 - przez kaczakat - 10-12-2022, 02:46
RE: Arduino problem z pinem D7 - przez darex120 - 11-12-2022, 21:48

Skocz do:


Przeglądający: 1 gości