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
{
}
}
Podvozek Merkur a Arduino Uno
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Re: Podvozek Merkur a Arduino Uno
Rozhodně zapomeň na použití funkce delay. Zkus si to rozblikat takhle : https://bastlirna.hwkitchen.cz/arduino- ... kce-delay/
Re: Podvozek Merkur a Arduino Uno
Tohle máme na kroužku jako příklad (výplod dětí)
blikání od tlačítka bez dalay.
Třeba tě to navede
blikání od tlačítka bez dalay.
Třeba tě to navede
Kód: Vybrat vše
// Blikaní bez Delay od stavu
// konstanty
#define ledPin 13 // číslo pinu LED
#define tlacitko 7 // cislo pinu tlacitka
unsigned long interval = 300; //interval, ve kterém bude LED blikat (milisekundy)
// Proměnné
int ledState = LOW; // ledState použité k nastavení LED
unsigned long previousMillis = 0; // bude ukládat poslední případ aktualizace LED
unsigned long currentMillis;
void setup() {
// nastavte digitální piny
pinMode(ledPin, OUTPUT);
pinMode(tlacitko, INPUT_PULLUP);
}
void loop(){
if (digitalRead(tlacitko) == LOW) // dokud je stlaceno tlacitko blikej
{
// vlastní blikani
currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW) ledState = HIGH;
else ledState = LOW;
digitalWrite(ledPin, ledState);
} // vlastní blikani konec
}
else digitalWrite(ledPin, LOW); //pokud neni tlacitko LED vypni
}
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
-
- Příspěvky: 2
- Registrován: 22 říj 2020, 07:43
Re: Podvozek Merkur a Arduino Uno
Dobrý večer, děkuji moc všem za zaslané příspěvky. Vyřešeno, sice asi tak trochu na prasáka, ale účel to plní.
- nakonec to chtělo vypnutí led, jinak zůstávala po uvolnění tlačítka zapnutá
- musel jsem dát ještě jedno časování pro vypnutí led nakonec dioda jinak jen slabě problikla
Finální program vypadá teď takto...
#define L1 8
#define L2 9
#define R1 10
#define R2 11
#define E1 3
#define E2 5
const int ledPin = 7;
int ledState = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 500;
unsigned long currentMillis;
int SR = 250;
int SL = 250;
int Blikani = 5;
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()
{
// 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);
}
// Dozadu
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);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
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);
}
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 - 1 bile a 1 cervene
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, HIGH);
}
// Svetla 2 - 2 bile a 2 cervene
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == LOW))
{
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
}
// Svetla 3 - Oranzove blikani
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
// Svetla 4 - Vypnout
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
else
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, LOW);
}
}
}
- nakonec to chtělo vypnutí led, jinak zůstávala po uvolnění tlačítka zapnutá
- musel jsem dát ještě jedno časování pro vypnutí led nakonec dioda jinak jen slabě problikla
Finální program vypadá teď takto...
#define L1 8
#define L2 9
#define R1 10
#define R2 11
#define E1 3
#define E2 5
const int ledPin = 7;
int ledState = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 500;
unsigned long currentMillis;
int SR = 250;
int SL = 250;
int Blikani = 5;
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()
{
// 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);
}
// Dozadu
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);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
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);
}
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 - 1 bile a 1 cervene
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == LOW) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, HIGH);
}
// Svetla 2 - 2 bile a 2 cervene
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == HIGH) && (digitalRead(A3) == LOW) && (digitalRead(A2) == LOW))
{
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
}
// Svetla 3 - Oranzove blikani
if ((digitalRead(A5) == HIGH) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == LOW))
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
// Svetla 4 - Vypnout
if ((digitalRead(A5) == LOW) && (digitalRead(A4) == LOW) && (digitalRead(A3) == HIGH) && (digitalRead(A2) == HIGH))
{
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
else
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, LOW);
}
}
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti