Podvozek Merkur a Arduino Uno
Napsal: 22 říj 2020, 08:16
Dobrý den,
chtěl bych touto cestou poprosit o radu. Mám ze stavebnice Merkur kolový podvozek + vysílačka Merkur + ovládané Arduinem Uno. Podvozek ovládám níže vloženým programem. Po dobu, kdy držím tlačítko, například vpřed, podvozek jede vpřed, když tlačítko pustím zastaví. Jedná se mi o to, když například stisknu tlačítko dozadu, aby se současně prováděla funkce blikání a po doby držení tlačítka podvozek současně blikal blinkry a jel dozadu (dioda na pinu 7). Zároveň bych se chtěl zeptat, jak by šlo udělat, stisknutím tlačítka rozsvítit led diodu, druhým stiskem stejného tlačítka vypnout (např Led na pinu4). Jsem v tomto případě skoro začátečník a nevím jak na to. Předem děkuji za jakoukoliv radu.
#define L1 8 // Levý motor
#define L2 9 // Levý motor
#define R1 10 // Pravý motor
#define R2 11 // Pravý motor
#define E1 3 // Levý Motor on/off
#define E2 5 // Pravý motor on/off
int SR = 250; // Rychlost pravého motoru
int SL = 250; // Rychlost levého motoru
int Blikani = 5; // Počet zablikání pro tlačítko Světla3
void setup()
{
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(A5, INPUT);
pinMode(A4, INPUT);
pinMode(A3, INPUT);
pinMode(A2, INPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
analogWrite(E1, SL);
analogWrite(E2, SR);
}
void loop()
{
// ----------------------------------------Tlacitka - motory ---------------------------------------------------------
// Dopredu
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 255);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 255);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Vpravo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 0);
analogWrite(L2, 255);
analogWrite(R1, 255);
analogWrite(R2, 0);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Vlevo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
analogWrite(L1, 255);
analogWrite(L2, 0);
analogWrite(R1, 255);
analogWrite(R2, 0);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Dozadu
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 0);
analogWrite(L2, 255);
analogWrite(R1, 0);
analogWrite(R2, 255);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// ----------------------------------------Tlacitka - svetla --------------------------------------------------------
// Svetla 1 - Zapnout 1 bile a 1 cervene svetlo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, HIGH);
}
// Svetla 2 - Zapnout 2 bile a 2 cervene svetla
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == LOW))
{
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
}
// Svetla 3 - Oranzove svetla - blikani
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
for(int x=0; x<Blikani; x++)
{
digitalWrite(7, HIGH);
delay(500);
digitalWrite(7, LOW);
delay(500);
}
}
// Svetla 4 - Vypnout svetla
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// *****************************
else
{
}
}
chtěl bych touto cestou poprosit o radu. Mám ze stavebnice Merkur kolový podvozek + vysílačka Merkur + ovládané Arduinem Uno. Podvozek ovládám níže vloženým programem. Po dobu, kdy držím tlačítko, například vpřed, podvozek jede vpřed, když tlačítko pustím zastaví. Jedná se mi o to, když například stisknu tlačítko dozadu, aby se současně prováděla funkce blikání a po doby držení tlačítka podvozek současně blikal blinkry a jel dozadu (dioda na pinu 7). Zároveň bych se chtěl zeptat, jak by šlo udělat, stisknutím tlačítka rozsvítit led diodu, druhým stiskem stejného tlačítka vypnout (např Led na pinu4). Jsem v tomto případě skoro začátečník a nevím jak na to. Předem děkuji za jakoukoliv radu.
#define L1 8 // Levý motor
#define L2 9 // Levý motor
#define R1 10 // Pravý motor
#define R2 11 // Pravý motor
#define E1 3 // Levý Motor on/off
#define E2 5 // Pravý motor on/off
int SR = 250; // Rychlost pravého motoru
int SL = 250; // Rychlost levého motoru
int Blikani = 5; // Počet zablikání pro tlačítko Světla3
void setup()
{
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(A5, INPUT);
pinMode(A4, INPUT);
pinMode(A3, INPUT);
pinMode(A2, INPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
analogWrite(E1, SL);
analogWrite(E2, SR);
}
void loop()
{
// ----------------------------------------Tlacitka - motory ---------------------------------------------------------
// Dopredu
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 255);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 255);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Vpravo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 0);
analogWrite(L2, 255);
analogWrite(R1, 255);
analogWrite(R2, 0);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Vlevo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
analogWrite(L1, 255);
analogWrite(L2, 0);
analogWrite(R1, 255);
analogWrite(R2, 0);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// Dozadu
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
analogWrite(L1, 0);
analogWrite(L2, 255);
analogWrite(R1, 0);
analogWrite(R2, 255);
delay(100);
analogWrite(L1, 0);
analogWrite(L2, 0);
analogWrite(R1, 0);
analogWrite(R2, 0);
}
// ----------------------------------------Tlacitka - svetla --------------------------------------------------------
// Svetla 1 - Zapnout 1 bile a 1 cervene svetlo
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, HIGH);
}
// Svetla 2 - Zapnout 2 bile a 2 cervene svetla
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == LOW))
{
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
}
// Svetla 3 - Oranzove svetla - blikani
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
for(int x=0; x<Blikani; x++)
{
digitalWrite(7, HIGH);
delay(500);
digitalWrite(7, LOW);
delay(500);
}
}
// Svetla 4 - Vypnout svetla
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// *****************************
else
{
}
}