07-05-2018, 14:59
Witam.
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:
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++;
}
}