Data do řetězce
Data do řetězce
Zdravím, potřebuji uložit data do dvou skupin - max 2x 10 hodnot. Příklad :
mám číslo 123456 a stisknu tlačítko A a toto se uloží do Skupiny A
a to mohu opakovat víckrát s dalšími čísly. To samé se ale už podruhé neuloží.
A když stisknu tlačítko B, tak se to uloží do skupiny B. To je Akce Zápis.
A při čtení přijde nějaké číslo a já potřebuji napsat, jestli patří do skupiny A nebo B
anebo jestli nepatří nikam...
mám číslo 123456 a stisknu tlačítko A a toto se uloží do Skupiny A
a to mohu opakovat víckrát s dalšími čísly. To samé se ale už podruhé neuloží.
A když stisknu tlačítko B, tak se to uloží do skupiny B. To je Akce Zápis.
A při čtení přijde nějaké číslo a já potřebuji napsat, jestli patří do skupiny A nebo B
anebo jestli nepatří nikam...
Re: Data do řetězce
Chtělo by to nějak lépe specifikovat. Třeba jaký je rozsah čísel, jak přijdou (sériák, RFID, klávesnice...) a jak se zobrazují (displej, sériák ...), jestli je mezi nimi nějaký separátor, jak indikovat když je paměť zaplněná.
Re: Data do řetězce
Rozumím, ale přijdou jako proměnná z přečteného dálkového ovládače. Rozsah je Long.
Přijmu číslo - vloží se do proměnné a když ho chci, stisknu A nebo B tlačítko... Separátor není žádný.
Použiju třeba knihovnu RCswitch. Vezmu nějaké dálkové ovládání, (klíčenku), stisknu jeho tlačítko
a rozhodnu se, jestli ten kod uložím do skupiny A nebo B. Pak vezmu další dálkové ovládání
a to samé. Třeba z 5 klíčenek... To bude procedura Ukladání kodu. A pak když vezmu libovolnou
klíčenku a po stisku tlačítka se mi na monitoru napíše A nebo B anebo nic.
Přijmu číslo - vloží se do proměnné a když ho chci, stisknu A nebo B tlačítko... Separátor není žádný.
Použiju třeba knihovnu RCswitch. Vezmu nějaké dálkové ovládání, (klíčenku), stisknu jeho tlačítko
a rozhodnu se, jestli ten kod uložím do skupiny A nebo B. Pak vezmu další dálkové ovládání
a to samé. Třeba z 5 klíčenek... To bude procedura Ukladání kodu. A pak když vezmu libovolnou
klíčenku a po stisku tlačítka se mi na monitoru napíše A nebo B anebo nic.
Re: Data do řetězce
Dobře, a v čem je problém?
Vytvořil bych dvě pole, ke každému z nich index a inicializoval bych v nich nulové hodnoty. Když ti přijde číslo, nejdříve prohledej pole A od nuly do indexu, pak pole B. Když nebude hodnota nalezena, rozsviť LED "nová hodnota" a čekej na zmáčknutí tlačítka A nebo B nebo "Ignoruj". Při stisku A ulož do pole A na pozici kam ukazuje index a ten pak inkrementuj. Podobně při stisku B, ale s polem B. Při stisku "Ignoruj", neukládej, ale opakuj vše znovu. Nezapomeň hlídat indexy, aby nepřetekly přes maximální délku pole.
Program bych ti samozřejmě mohl napsat a dát sem, ale nejlíp se to učí, když se zkouší
Vytvořil bych dvě pole, ke každému z nich index a inicializoval bych v nich nulové hodnoty. Když ti přijde číslo, nejdříve prohledej pole A od nuly do indexu, pak pole B. Když nebude hodnota nalezena, rozsviť LED "nová hodnota" a čekej na zmáčknutí tlačítka A nebo B nebo "Ignoruj". Při stisku A ulož do pole A na pozici kam ukazuje index a ten pak inkrementuj. Podobně při stisku B, ale s polem B. Při stisku "Ignoruj", neukládej, ale opakuj vše znovu. Nezapomeň hlídat indexy, aby nepřetekly přes maximální délku pole.
Program bych ti samozřejmě mohl napsat a dát sem, ale nejlíp se to učí, když se zkouší
Re: Data do řetězce
Ondro, tak to asi nedokážu. Trápím se tu a nevím, jak začít
Hoď mi záchranné lano
Hoď mi záchranné lano
Re: Data do řetězce
OK Večer budu mít chvíli času.
Re: Data do řetězce
Tak snad je to, co jsi chtěl.
Po přečtení (já ho náhodně generuji) se zjistí jestli už je evidováno, pak je umožněno jeho uložení nebo ignorování a tak dokola.
Kód: Vybrat vše
#define TlA 4 // Tl jsou vstupy na tlacitka
#define TlB 5
#define TlIgnore 6
#define LEDA 7 //LED jsou vystupy na LED
#define LEDB 8
#define LEDNew 9
const byte MaxNum=10; //definice globalnich promennych
long A[MaxNum]={0};
long B[MaxNum]={0};
byte IdxA=0,IdxB=0;
void setup() {
pinMode(TlA,INPUT_PULLUP); //tlacitka jsou zapojena proti GND, pri stisknutem je na pinu LOW
pinMode(TlB,INPUT_PULLUP);
pinMode(TlIgnore,INPUT_PULLUP);
pinMode(LEDA,OUTPUT); // LED pres rezistor proti GND, sviti pri HIGH
pinMode(LEDB,OUTPUT);
pinMode(LEDNew,OUTPUT);
Serial.begin(9600); //otevreni ser. kanalu
}
void loop() {
long RecVal=0; //ctena hodnota
bool Found=false; //pomocna detekcni promenna
randomSeed(analogRead(A0));
while(true){ // hlavni cyklus programu se bude donekonecna opakovat
RecVal=random(-999999,999999); //tady si nactes hodnotu, ja si tam dam nahodne cislo
Found=false;
for(byte i=0;i<IdxA;i++){ // zjistime ada neni jiz ulozene v A
if(A[i]==RecVal){
Found=true;
digitalWrite(LEDA,HIGH);
Serial.println("Cislo je jiz ulozene v A");
break;
}
}
if(!Found){ // pokud nebylo nalezeno v A, prohlidneme i B
Found=false;
for(byte i=0;i<IdxB;i++){
if(B[i]==RecVal){
Found=true;
digitalWrite(LEDB,HIGH);
Serial.println("Cislo je jiz ulozene v B");
break;
}
}
}
if(!Found){ //neni v A ani v B
digitalWrite(LEDNew,HIGH);
Serial.print("Nove cislo: ");
Serial.println(RecVal);
Serial.println("Stiskni tlacitko ulozeni nebo Ignorovat.");
}
while(true){ //cyklus se opakuje do stisknuti nejakeho tlacitka
if(!Found){ // nove cislo, umoznime jeho ulozeni do A nebo B
if(digitalRead(TlA)==LOW){
if(IdxA<MaxNum){
A[IdxA]=RecVal;
IdxA++;
Serial.println("Ulozeno do A");
}else{
Serial.println("Pamet A zaplnena, neulozeno");
}
break;
}
if(digitalRead(TlB)==LOW){
if(IdxB<MaxNum){
B[IdxB]=RecVal;
IdxB++;
Serial.println("Ulozeno do B");
}else{
Serial.println("Pamet B zaplnena, neulozeno");
}
break;
}
}
if(digitalRead(TlIgnore)==LOW){ //volbu ignorovat muzeme pouzit i na nove cislo
break;
}
}
delay(100); //debounce interval tlacitek
while((digitalRead(TlA)==LOW)||(digitalRead(TlB)==LOW)||(digitalRead(TlIgnore)==LOW)){ //pockame na uvolneni stisku tlacitka
delay(1);
}
digitalWrite(LEDA,LOW); //zhasneme LED a jdeme do noveho kola
digitalWrite(LEDB,LOW);
digitalWrite(LEDNew,LOW);
}
}
Re: Data do řetězce
Ondro, Ty jsi blázen nebo Genius... Díky, zkusím a dám vědět...
Re: Data do řetězce
Tak klobouk dolů, šlape to. Nechápu, jak jsi to mohl tak rychle a přehledně stvořit.
Ještě zkusím potrápit svou hlavu, že bych přidal 4. tlačítko a vypsal obsah A a obsah B...
tak díky MOC.
Ještě zkusím potrápit svou hlavu, že bych přidal 4. tlačítko a vypsal obsah A a obsah B...
tak díky MOC.
Re: Data do řetězce
Díky, ani jsem to neladil, teď alespoň vím, že to bylo funkční
Asi nejdůležitější část programování je dekompozice. Velký problém, se rozdělí na více menších a ty zase na menší a tak dále, až je z toho hromádka cyklů a podmínek. Ono by se to dalo napsat ještě lépe a přehledněji se strukturami a funkcemi, ale to by bylo pro začátek spíš matoucí.
Asi nejdůležitější část programování je dekompozice. Velký problém, se rozdělí na více menších a ty zase na menší a tak dále, až je z toho hromádka cyklů a podmínek. Ono by se to dalo napsat ještě lépe a přehledněji se strukturami a funkcemi, ale to by bylo pro začátek spíš matoucí.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů