Witam, potrzebuję pomocy w moim programie działa on jako moduł oświetlenia do modelu RC ale mam dużo błędów. Wiem że można to zrobić na funkcjach lub flagach ale mi to nie wychodzi. Proszę o pomoc.
Kod:
byte PinRx1 = 4; // sygnal kan4 podlaczony do Pin8
byte PinRx2 = 6; // sygnal kan6 podlaczony do Pin9
byte PinRx3 = 8; // sygnal kan7 podlaczony do Pin10
byte PinRx4 = 9; // sygnal kan8 podlaczony do Pin8
byte PinRx5 = 5; // sygnal kan2 podlaczony do Pin9
// (poczatek detekcji)
int PPM1 = 0; //kierunki
int PPM2 = 0; //silnik
int PPM3 = 0; //silnik 2
int PPM4 = 0; //światła
byte Rx3 = 0; // zmienna pomocnicza (poczatek detekcji)
int kanal81 =0;
int kanal82 =0;
int lewy =0;
int prawy =0;
int Licz = 0; // zmienne pozwalajace drukowac
int LiczMax = 10; // co 20 impuls PPM1
void setup()
{
pinMode(7,OUTPUT); // kogut
pinMode(10,OUTPUT); //drogowe
pinMode(15,OUTPUT); //robocze
pinMode(16,OUTPUT); //lewy
pinMode(18,OUTPUT); //prawy
pinMode(14,OUTPUT); //silnik
pinMode(19,OUTPUT); //ślimak
pinMode(PinRx1,INPUT); // ustaw PinRx1 jako wejscie
pinMode(PinRx2,INPUT); // ustaw PinRx2 jako wejscie
pinMode(PinRx3,INPUT); // ustaw PinRx3 jako wejscie
pinMode(PinRx4,INPUT);
pinMode(PinRx5,INPUT);
Serial.begin(57600); // ustaw predkosc transmisji
}
void loop() {
do //czekaj az pojawi sie impuls na kan8
{ //i wtedy rozpocznij detekcje kan1 i kan2
Rx3=digitalRead(PinRx3);
} while (Rx3==0);
Rx3=0;
PPM1=pulseIn(PinRx1,HIGH); // detekcja impulsu PPM na PinRx1
PPM2=pulseIn(PinRx2,HIGH); // detekcja impulsu PPM na PinRx2
PPM3=pulseIn(PinRx3,HIGH);
PPM4=pulseIn(PinRx4,HIGH);
Licz += 1; // zwieksz licznik impulsow o 1
if (Licz>LiczMax) { // drukuj wartosc co n-ty impuls
Serial.print(PPM1);
Serial.print("; ");
Serial.print(PPM2);
Serial.println("; ");
Serial.print(PPM3);
Serial.print("; ");
Serial.print(PPM4);
Serial.println("; ");
Serial.print(prawy);
Serial.println("p");
Serial.println("; ");
Serial.print(lewy);
Serial.println("l");
Serial.println("; ");
Serial.print(kanal82);
Serial.println("k");
Serial.println("; ");
Licz = 0;
}
if(PPM3 >= 1450)
{
digitalWrite(14,HIGH);
}
else digitalWrite(14,LOW);
if(PPM4 <= 800)
{
delay(250);
kanal81++;
}
if(kanal81 == 1)
{
digitalWrite(10,HIGH);
}
if(kanal81 == 2)
{
digitalWrite(15,HIGH);
}
if(kanal81 == 3)
{
kanal81=0;
}
if(kanal81 ==0)
{
digitalWrite(15,LOW);
digitalWrite(10,LOW);
}
if(PPM4 >= 1450)
{
delay(250);
kanal82++;
}
if(kanal82 == 1 && lewy == 0 && prawy == 0)
{
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
}
if(kanal82 == 2)
{
kanal82=0;
}
if(PPM2 >= 800)
{
digitalWrite(19,HIGH);
}
else digitalWrite(19,LOW);
if(PPM1 <=800)
{
delay(250);
lewy++;
}
if(PPM1 >=1450)
{
delay(250);
prawy++;
}
if(lewy == 1 && prawy == 0 && kanal82 == 0)
{
digitalWrite(16,HIGH);
delay(450);
digitalWrite(16,LOW);
delay(450);
}
if(prawy == 1 && lewy == 0 && kanal82 == 0)
{
digitalWrite(18,HIGH);
delay(450);
digitalWrite(18,LOW);
delay(450);
}
if(prawy == 1 && lewy == 1 && kanal82 == 0)
{
digitalWrite(18,HIGH);
digitalWrite(16,HIGH);
delay(450);
digitalWrite(16,LOW);
digitalWrite(18,LOW);
delay(450);
}
if (kanal82 == 1 && lewy == 1 && prawy == 0)
{
digitalWrite(16,HIGH);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
digitalWrite(16,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
}
if (kanal82 == 1 && lewy == 0 && prawy == 1)
{
digitalWrite(18,HIGH);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
digitalWrite(18,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
}
if (kanal82 == 1 && lewy == 1 && prawy == 1)
{
digitalWrite(16,HIGH);
digitalWrite(18,HIGH);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
digitalWrite(16,LOW);
digitalWrite(18,LOW);
delay(150);
digitalWrite(7,HIGH);
delay(150);
digitalWrite(7,LOW);
delay(150);
}
if(lewy == 2)
lewy=0;
if(prawy == 2)
prawy=0;
}