09-12-2022, 12:57
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.
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.
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 **********
Poza tym fajna szopka.
Miło być decenianym https://buycoffee.to/kaczakat