Arduino Polska Forum
Szopka bożonarodzeniowa :) - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Szopka bożonarodzeniowa :) (/watek-szopka-bo%C5%BConarodzeniowa)



Szopka bożonarodzeniowa :) - wieslaw3 - 07-05-2018

Witam.
Poniższy projekt ma za zadanie sterowaniem odtwarzaczem dźwięku, przekaźnikiem włączającym oświetlenie oraz trzema serwomechanizmami. Całość to szopka bożonarodzeniowa do kościoła w mojej parafii (nie śmiejcie się, wiem że to dziwna pora na robienie szopki ale robię ją w wolnym czasie a tego wolnego czasu mam niewiele i mam nadzieję że do grudnia zdążę).
Krótki opis wejść i wyjść.
Wejście jest tylko jedno  - A1
Wyjście dla odtwarzacza dźwięku - D2
Wyjście dla przekaźnika oświetlenia – D3
Wyjście dla serwomechanizmu 1 – D4
Wyjście dla serwomechanizmu 2 – D5
Wyjście dla serwomechanizmu 3 – D6
 
Prośba.
W tej chwili program działa tak, że zmiana na wejściu A1 powoduje kolejno
1. podanie stanu wysokiego na D2 na określony czas i przejście w stan niski
2. podanie stanu wysokiego na D3
3. sterowanie kolejno serwomechanizmami 1, 2 i 3 według określonych parametrów.
4. podanie stanu niskiego na D3
 
Chciałbym żeby niezależnie od tego czy program się już w całości wykonał czy nie, punk 1 (czyli podanie stanu wysokiego na odtwarzacz dźwięku i jego wyłączenie) wykonywał się zawsze gdy na A1 nastąpi zmiana.
Czyli zawsze po tym jak w podłączonej do A1 bramce fotooptycznej pojawi się przeszkoda zostanie podany stan wysoki dla odtwarzacza dźwięku niezależnie czy program jest w wykonywania zadań z punktu 2, 3, 4.

Bardzo byłbym wdzięczny za pomoc gdyż syn który pisał mi ten kod mówi że nie ma możliwości żeby tak to działało.

Oto mój kod:
Kod:
const int czasbogzaplac=8000;

#include <Servo.h>

Servo myservo,myservo2,myservo3;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int poz = 0;
int koniec=0;
bool kalibracja=1;
void setup() {
 myservo.attach(4); // servomotor 1
 myservo2.attach(6); // servomotor 2
  myservo3.attach(5); // servomotor 3
  pinMode(3,OUTPUT);  // światło
  pinMode(2,OUTPUT);  // odtwarzacz dźwięku
}
void loop() {
 if(kalibracja)
 {
   myservo.write(2);
    myservo2.write(85);
    myservo3.write(60);
    delay(3000);
    kalibracja=0;
 }
 if(analogRead(1)>100)// bramka fotooptyczna
 {
   digitalWrite(2,HIGH);
   delay(czasbogzaplac);
   digitalWrite(2,LOW);
   digitalWrite(3,HIGH);
 for(int i=2;i<=80;i++)
 {
   myservo.write(i);
   delay(20);
 }
 delay(1000);
 myservo2.write(85);
 for(int i=85;i>=40;i--)
 {
   myservo2.write(i);
   delay(25);
 }
 delay(1000);
 for(int j=0;j<4;j++)
 {
     myservo3.write(60);
     for(int i=60;i<=70;i++)
 {
   myservo3.write(i);
   delay(40);
 }for(int i=70;i>50;i--)
 {
   myservo3.write(i);
   delay(40);
 }
 for(int i=50;i<=60;i++)
 {
   myservo3.write(i);
   delay(40);
 }
 myservo3.write(60);
 }
 delay(1000);
 for(int i=40;i<=85;i++)
 {
   myservo2.write(i);
   delay(25);
 }
 delay(1000);
 for(int i=80;i>2;i--)
 {
   myservo.write(i);
   delay(20);
 }
 myservo.write(2);
 digitalWrite(3,LOW);
 koniec++;
 }
 }



RE: Szopka bożonarodzeniowa :) - es2 - 07-05-2018

(07-05-2018, 14:59)wieslaw3 napisał(a): Bardzo byłbym wdzięczny za pomoc gdyż syn który pisał mi ten kod mówi że nie ma możliwości żeby tak to działało.
Jest możliwość, trzeba wywalić delay użyć millis().