Arduino program
Napsal: 30 led 2022, 14:27
Zdravím,
ocitl jsem se ve složité situaci. Potřeboval jsem napsat program, který by hodnoty ze vstupu (1;2;3;4) vždy přepsal na výstup každého vstupu. (1->10; 2->11; 3->12; 4->13). Přepsal by je vždy však pouze po jednom, a pouze po přivedení řídícího impulzu na pin (5), časově závisle na tom jak byli hodnoty na vstup nahrány.
Příklad:
Na vstup bych tak nejprve přivedl impulz vysoké úrovně (například tlačítkem) na pin 2, ta by se zapsala do paměti a poté ještě třeba na pin 4, a 3 (které by se také zapsali do paměti). Kdybych poté přivedl impulz na řídící pin 5, nejprve by se objevil impuls vysoké úrovně na pinu 11 (výstup pinu 2), po dalším přivedení vysoké úrovně na pin 5 by se impuls převedl na pin 13, a po dalším řídícím impulzu na pin 12.
Společně se známým který v C programuje, jsme napsali kod, který ale nefunguje, a my nemůžeme najít chybu. Tento kód dělá s arduinem jen to, že poté co na pin 5 přivedu impulz vysoké úrovně, na pinu 10 se asi na dvě sekundy objeví vysoká úroveň. Žádná reakce na ostatní piny se neděje.
Prosím tedy někoho pro koho by to nebyl sebemenší problém o pomoc.
ocitl jsem se ve složité situaci. Potřeboval jsem napsat program, který by hodnoty ze vstupu (1;2;3;4) vždy přepsal na výstup každého vstupu. (1->10; 2->11; 3->12; 4->13). Přepsal by je vždy však pouze po jednom, a pouze po přivedení řídícího impulzu na pin (5), časově závisle na tom jak byli hodnoty na vstup nahrány.
Příklad:
Na vstup bych tak nejprve přivedl impulz vysoké úrovně (například tlačítkem) na pin 2, ta by se zapsala do paměti a poté ještě třeba na pin 4, a 3 (které by se také zapsali do paměti). Kdybych poté přivedl impulz na řídící pin 5, nejprve by se objevil impuls vysoké úrovně na pinu 11 (výstup pinu 2), po dalším přivedení vysoké úrovně na pin 5 by se impuls převedl na pin 13, a po dalším řídícím impulzu na pin 12.
Společně se známým který v C programuje, jsme napsali kod, který ale nefunguje, a my nemůžeme najít chybu. Tento kód dělá s arduinem jen to, že poté co na pin 5 přivedu impulz vysoké úrovně, na pinu 10 se asi na dvě sekundy objeví vysoká úroveň. Žádná reakce na ostatní piny se neděje.
Prosím tedy někoho pro koho by to nebyl sebemenší problém o pomoc.
Kód: Vybrat vše
char pole[10];
int index = 0;
void vyplnPole() {
for (int i = 0; i < 10; i++) {
pole[i] = 0;
}
}
void serad() {
for (int j = 0; j <= 8; j++) {
pole[j] = pole[j+1];
}
pole[9] = 0;
}
void setup() {
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT); //řídící impulz
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
vyplnPole();
}
void loop() {
if (digitalRead(1) == HIGH) {
pole[index] = 1;
index++;
}
else if (digitalRead(2) == HIGH) {
pole[index] = 2;
index++;
}
else if (digitalRead(3) == HIGH) {
pole[index] = 3;
index++;
}
else if (digitalRead(4) == HIGH) {
pole[index] = 4;
index++;
}
if (digitalRead(5) == HIGH) {
digitalWrite(pole[0]+9, HIGH);
delay(500); //doba trvání impulzu na výstupu 0,5s
digitalWrite(pole[0]+9, LOW);
serad();
index--;
}
}