Pomoc s Arduinom
Moderátor: Moderátori
Pomoc s Arduinom
Zdravím Vás,
neviem či som to dal do dobrej témy, ak nie prepáčte.
Už asi týždeň sa trápim s programom do Arduina. Potrebujem jedným tlačidlom odosielať data do registrov 74HC595. Ale tak aby sa pri prvom stisknuti odoslali jedny data a pri druhom stisku druhé, a potom odznova.
Proste ked stlačim tlačidlo prvy krat pošle do registrov napr: B00000001, B00000011, B00000111 a podruhe B00011111, B00111111, B01111111
Prelúskal som množstvo stránok ale nejak sa neviem k tomu dopracovať.
Tu je kód ktorý doteraz mam.
int TLAC1 = 3;
int TLAC2 = 4;
int TLAC3 = 5;
int TLAC4 = 6;
int TLAC5 = 7;
int TLAC6 = 8;
int TLAC7 = 9;
int TLAC8 = 10;
int latchPin = 2;
int clockPin = 1;
int dataPin = 0;
void setup()
{
pinMode(TLAC1, INPUT);
pinMode(TLAC2, INPUT);
pinMode(TLAC3, INPUT);
pinMode(TLAC4, INPUT);
pinMode(TLAC5, INPUT);
pinMode(TLAC6, INPUT);
pinMode(TLAC7, INPUT);
pinMode(TLAC8, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//na zaciatku reset registrov
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 3
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 2
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 1
digitalWrite(latchPin, HIGH);
}
void loop()
{
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000111);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00000001);//1
digitalWrite(latchPin, HIGH);
while (digitalRead(TLAC1)) delay(50);
}
{
if (digitalRead(TLAC2))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001110);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000110);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00001000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC2)) delay(50);
{
if (digitalRead(TLAC3))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC3)) delay(50);
}
if (digitalRead(TLAC4))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC4)) delay(50);
}
if (digitalRead(TLAC5))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC5)) delay(50);
if (digitalRead(TLAC6))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC6)) delay(50);
if (digitalRead(TLAC7))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC7)) delay(50);
if (digitalRead(TLAC8))//TLACIDLO NA VYPNUTIE VSETKEHO.
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC8)) delay(50);
}
Vedel by mi niekto poradiť ako na to?
Ďakujem veľmi pekne
neviem či som to dal do dobrej témy, ak nie prepáčte.
Už asi týždeň sa trápim s programom do Arduina. Potrebujem jedným tlačidlom odosielať data do registrov 74HC595. Ale tak aby sa pri prvom stisknuti odoslali jedny data a pri druhom stisku druhé, a potom odznova.
Proste ked stlačim tlačidlo prvy krat pošle do registrov napr: B00000001, B00000011, B00000111 a podruhe B00011111, B00111111, B01111111
Prelúskal som množstvo stránok ale nejak sa neviem k tomu dopracovať.
Tu je kód ktorý doteraz mam.
int TLAC1 = 3;
int TLAC2 = 4;
int TLAC3 = 5;
int TLAC4 = 6;
int TLAC5 = 7;
int TLAC6 = 8;
int TLAC7 = 9;
int TLAC8 = 10;
int latchPin = 2;
int clockPin = 1;
int dataPin = 0;
void setup()
{
pinMode(TLAC1, INPUT);
pinMode(TLAC2, INPUT);
pinMode(TLAC3, INPUT);
pinMode(TLAC4, INPUT);
pinMode(TLAC5, INPUT);
pinMode(TLAC6, INPUT);
pinMode(TLAC7, INPUT);
pinMode(TLAC8, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//na zaciatku reset registrov
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 3
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 2
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 1
digitalWrite(latchPin, HIGH);
}
void loop()
{
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000111);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00000001);//1
digitalWrite(latchPin, HIGH);
while (digitalRead(TLAC1)) delay(50);
}
{
if (digitalRead(TLAC2))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001110);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000110);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00001000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC2)) delay(50);
{
if (digitalRead(TLAC3))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC3)) delay(50);
}
if (digitalRead(TLAC4))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00011000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC4)) delay(50);
}
if (digitalRead(TLAC5))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC5)) delay(50);
if (digitalRead(TLAC6))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B01100000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC6)) delay(50);
if (digitalRead(TLAC7))
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC7)) delay(50);
if (digitalRead(TLAC8))//TLACIDLO NA VYPNUTIE VSETKEHO.
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//3
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//2
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//1
digitalWrite(latchPin, HIGH);
}
while (digitalRead(TLAC8)) delay(50);
}
Vedel by mi niekto poradiť ako na to?
Ďakujem veľmi pekne
0
Naposledy upravil/-a tomo27 v 13 Mar 2014, 20:07, upravené celkom 1 krát.
Re: Pomoc s Arduinom
Udělej si k tlačítku počitadlo stisků.Potrebujem jedným tlačidlom odosielať data do registrov 74HC595. Ale tak aby sa pri prvom stisknuti odoslali jedny data a pri druhom stisku druhé, a potom odznova.
Kód: Vybrať všetko
byte T1_counter = 0; // počitadlo stisknutí TLAC1
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
if(T1_counter == 0) shiftOut(data1);
if(T1_counter == 1) shiftOut(data2);
digitalWrite(latchPin, HIGH);
T1_counter++;
if(T1_counter >= 2) T1_counter == 0;
}
0
Re: Pomoc s Arduinom
ďakujem za pomoc.
Ale nejak to nefunguje.
Dosadil som to takto:
Na začiatku sa hneď pošlú tie prve data, a tie druhe preblikujú. Na stlačenie nereaguje.
Kde robim chybu v kode?
EDIT:
Skúsil som ešte jednu vec. Vytvoril som dve polia: DATA1 a DATA2
Teraz to funguje tak na polovicu. Keď prvý krát stlačím tak pošle DATA1. Ale na druhe už nereaguje.
tu je kód:
a ešte jednu vec som si všimol. V tom poli DATA1 je:
{B00000001, B00000011, B00000111};
ale pošle sa do všetkých troch registrov hodnota B00000111
prečo?
Ale nejak to nefunguje.
Dosadil som to takto:
Kód: Vybrať všetko
if (digitalRead(TLAC1));
{
digitalWrite(latchPin, LOW);
if(T1_counter == 0)
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//register 3
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//register 2
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//register 1
digitalWrite(latchPin, HIGH);
if(T1_counter == 1)
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//register 3
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//register 2
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);//register 1
digitalWrite(latchPin, HIGH);
T1_counter++;
if(T1_counter >= 2) T1_counter == 0;
}
Kde robim chybu v kode?
EDIT:
Skúsil som ešte jednu vec. Vytvoril som dve polia: DATA1 a DATA2
Teraz to funguje tak na polovicu. Keď prvý krát stlačím tak pošle DATA1. Ale na druhe už nereaguje.
tu je kód:
Kód: Vybrať všetko
void loop()
{
byte T1_counter = 0; // počitadlo stisknutí TLAC1
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
if(T1_counter == 0) shiftOut(dataPin, clockPin, MSBFIRST, DATA1[0,1,2]);
if(T1_counter == 1) shiftOut(dataPin, clockPin, MSBFIRST, DATA2[0,1,2]);
digitalWrite(latchPin, HIGH);
T1_counter++;
if(T1_counter >= 2) T1_counter == 0;
}
{B00000001, B00000011, B00000111};
ale pošle sa do všetkých troch registrov hodnota B00000111
prečo?
0
Re: Pomoc s Arduinom
1.
Deklaruj "byte T1_counter = 0;" jako globální (dej to za řádek "int dataPin = 0;").
2.
Tos našel na kterém smetišti?
Správně je
3.
Podle kódu máš tlačítka zapojené proti plusu.
Máš na nich pull-down odpory proti zemi?
Deklaruj "byte T1_counter = 0;" jako globální (dej to za řádek "int dataPin = 0;").
2.
Kód: Vybrať všetko
if(T1_counter == 0) shiftOut(dataPin, clockPin, MSBFIRST, DATA1[0,1,2]);
Správně je
Kód: Vybrať všetko
for (int j = 0; j < 3; j++)
{
shiftOut(dataPin, clockPin, MSBFIRST, DATA1[j]);
}
3.
Podle kódu máš tlačítka zapojené proti plusu.
Máš na nich pull-down odpory proti zemi?
0
Re: Pomoc s Arduinom
1.
Mam to deklarovane ako si napísal.
2.
tak som myslel že je to správne. Vyberal som s pola čo potrebujem.
3.
Ano rezistory tam mam 10K k zemi.
Dam ti sem ešte raz čo mam.
teraz to funguje tak, že síce reaguje na stláčanie, ale po každom pošle náhodne hodnoty do všetkých troch registrov.
Ďakujem za trpezlivosť
Mam to deklarovane ako si napísal.
2.
tak som myslel že je to správne. Vyberal som s pola čo potrebujem.
3.
Ano rezistory tam mam 10K k zemi.
Dam ti sem ešte raz čo mam.
teraz to funguje tak, že síce reaguje na stláčanie, ale po každom pošle náhodne hodnoty do všetkých troch registrov.
Kód: Vybrať všetko
int TLAC1 = 3;
int TLAC2 = 4;
int TLAC3 = 5;
int TLAC4 = 6;
int TLAC5 = 7;
int TLAC6 = 8;
int TLAC7 = 9;
int TLAC8 = 10;
int latchPin = 2;
int clockPin = 1;
int dataPin = 0;
byte T1_counter = 0;
byte DATA1[] =
{B00000001, B00000011, B00000111};
byte DATA2[] =
{B10000000, B10000000, B10000000};
void setup()
{
pinMode(TLAC1, INPUT);
pinMode(TLAC2, INPUT);
pinMode(TLAC3, INPUT);
pinMode(TLAC4, INPUT);
pinMode(TLAC5, INPUT);
pinMode(TLAC6, INPUT);
pinMode(TLAC7, INPUT);
pinMode(TLAC8, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//na zaciatku reset registrov
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 3
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 2
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);//register 1
digitalWrite(latchPin, HIGH);
}
void loop()
{
for (int j = 0; j < 3; j++)
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
if(T1_counter == 0)
shiftOut(dataPin, clockPin, MSBFIRST, DATA1[j]);
if(T1_counter == 1)
shiftOut(dataPin, clockPin, MSBFIRST, DATA2[j]);
digitalWrite(latchPin, HIGH);
delay(500);
if(T1_counter >= 2) T1_counter == 0;
}
}
Ďakujem za trpezlivosť
0
Re: Pomoc s Arduinom
Kód: Vybrať všetko
void loop()
{
if (digitalRead(TLAC1))
{
digitalWrite(latchPin, LOW);
if(T1_counter == 0)
{
for (int j = 0; j < 3; j++)
{
shiftOut(dataPin, clockPin, MSBFIRST, DATA1[j]);
}
}
if(T1_counter == 1)
{
for (int j = 0; j < 3; j++)
{
shiftOut(dataPin, clockPin, MSBFIRST, DATA2[j]);
}
}
digitalWrite(latchPin, HIGH);
T1_counter++;
if(T1_counter >= 2) T1_counter == 0;
delay(500);
}
}
0
Re: Pomoc s Arduinom
tak skúsil, som to. Funguje mi to, len: Prve stlačenie - DATA1 - OK, Druhe stlačenie - DATA2 - OK. Ale tretie stlačenie by malo odoslať znova DATA1, štvrte - DATA2, piate DATA1, šieste DATA2 ........
Teraz reaguje na prve, druhe, ale na dalšie už nie.
Teraz reaguje na prve, druhe, ale na dalšie už nie.
0
Re: Pomoc s Arduinom
Kód: Vybrať všetko
if(T1_counter >= 2) T1_counter == 0;
Kód: Vybrať všetko
if(T1_counter >= 2) T1_counter = 0;
0
Re: Pomoc s Arduinom
Takto to už ide ako ma. Diky.
Ale teraz by som to potreboval aplikovať na viacero tlačitiek.
Na začiatok som dal dve.
Pridal som:
byte T2_counter = 0;
byte DATA3[]
byte DATA4[]
premennu "j" som v premenoval na "b"
cely ten kod som skopíroval a poprepisoval na druhe tlačítko.
Prve tlačítko ide ako predtým, v poriadku. Ale druhe nereaguje
Nechápem tomu.
Ale teraz by som to potreboval aplikovať na viacero tlačitiek.
Na začiatok som dal dve.
Pridal som:
byte T2_counter = 0;
byte DATA3[]
byte DATA4[]
premennu "j" som v premenoval na "b"
cely ten kod som skopíroval a poprepisoval na druhe tlačítko.
Prve tlačítko ide ako predtým, v poriadku. Ale druhe nereaguje
Nechápem tomu.
0
Re: Pomoc s Arduinom
podla mna zbytocne zlozite riesenie cez countre. po kazdom stlaceni tlacidla spravit x = x*(-1) a potom vyhodnocovat podmienku x>0
za x dosadit premennu pre kazde tlacitko (typ int staci)
za x dosadit premennu pre kazde tlacitko (typ int staci)
0
Drink coffee. Do stupid things faster with more energy...
Re: Pomoc s Arduinom
Diky za koment.
už by som to radšej doriešil s tym "counter" to je už funkčne. už len to doriešiť na viac tlačitok.
už by som to radšej doriešil s tym "counter" to je už funkčne. už len to doriešiť na viac tlačitok.
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 9 Odpovedí
- 1270 Zobrazení
-
Posledný príspevok od používateľa jezevec
-
- 0 Odpovedí
- 1334 Zobrazení
-
Posledný príspevok od používateľa marekbe
-
- 0 Odpovedí
- 232 Zobrazení
-
Posledný príspevok od používateľa Ilija
-
- 0 Odpovedí
- 1344 Zobrazení
-
Posledný príspevok od používateľa boro
-
- 12 Odpovedí
- 1772 Zobrazení
-
Posledný príspevok od používateľa Zaky