 | cimirek 17.04.2023 13:46 Bydliště: Střední Čechy
|
| Dneska jsem vyzkoušel ód pro arduino od UI.
Musím říct, že to nedělalo přesně co jsem požadoval, možná by bylo třeba jinak, lépe formulovat zadání.
Nicméně po několika urgencích a opravách se podařilo to dotáhnout.
Hotový vyzkoušený kód je přiložen. Jen je změna aby bylo možné pozorovat funkci, jsou časy 1,25s a překrytí 0,25s.
Pro eventuální konečné řešení je třeba příkazy delay() nahradit delayMicroseconds()
Video jak to funguje je na
https://ulozto.cz/file/l0OcIKerCiZ2/p1010135-avi#!ZJHjBQR2A2D5ATLkZwyzMGpkMJExAmWnnHAHEx42Fz5hG2WxAD==
---------------- kód ---------------------
const int DELAY_TIME = 1250;
const int OVERLAP_TIME = 250;
int currentOutput = 1;
int direction = 1;
void setup() {
// Nastavení výstupních pinů
for (int i = 1; i <= 8; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
// Zapínání výstupů v aktuálním směru
digitalWrite(currentOutput, HIGH); // Zapnutí aktuálního výstupu
delay(DELAY_TIME); // Počkejte DELAY_TIME ms
if (currentOutput + direction <= 8 && currentOutput + direction >= 1) {
// Pokud existuje další výstup v aktuálním směru, zapněte ho s překrytím
digitalWrite(currentOutput + direction, HIGH);
delay(OVERLAP_TIME);
}
// Vypnutí aktuálního výstupu
digitalWrite(currentOutput, LOW);
if (currentOutput + direction <= 8 && currentOutput + direction >= 1) {
// Pokud existuje další výstup v aktuálním směru, vypněte ho s překrytím
digitalWrite(currentOutput + direction, LOW);
}
// Přepnutí aktuálního výstupu na další v aktuálním směru
currentOutput += direction;
// Pokud jsme narazili na konec cyklu, změňte směr
if (currentOutput == 9 || currentOutput == 0) {
direction *= -1;
// Pokud jsme měli poslední výstup sepnutý, nevypínat ho, ale pouze změnit směr cyklu
if (currentOutput == 9) {
currentOutput = 8;
} else if (currentOutput == 0) {
currentOutput = 1;
}
}
} |
|