Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik
 Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...

Crapaturi placa

cum imi accesez dosarul electroni...
 Momentul Aprilie 1964

Sursa noua - zgomot ?

A fost lansat Ubuntu 24.04 LTS

Pareri apartament in zona Berceni?
 Free streaming SkyShowtime de la ...

Skoda Fabia 1.0 TSI (110 CP)- 19 ...

Mezina familiei, Merida BigNine

The Tattooist of Auschwitz (2024)
 

Arduino - automatizare DIY

* * * * * 2 votes
  • Please log in to reply
1573 replies to this topic

#973
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008
Am citit azi noapte o gramada despre string asta si m-am tot chinuit, dar nu am reusit sa fac nimic. Peste tot am gasit exemple cu ceasul, exact ca si exemplul tau Posted Image  M-am tot chinuit cu ce sa trec la char in paranteza aia drepata si la formatul ala "%2u:u:u" , unde eu am trecut de fapt "%2dl"

Da-mi te rog un exemplu mai concret.  Eu am asa:
lcd.setCursor(8,0);
lcd.print(Pozitie);

Unde Pozitie ar fi:
1 - un numar de la 00 la 20.
2 - sau de la -20 la 20 (aici cred ca corect ar fi de la -20 la 020 .... sau se poate -20 la +20 ? Adica sa afiseze si plusul ? )

(ma multumesc cu un ajutor pentru cazul 1 Posted Image )

Edited by florin71_skoda, 25 March 2017 - 13:56.


#974
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
Ala cu ceasul l-am conceput fara ca sa stiu ca sunt exemple.
Asa mi s-a potrivit mie.
Incearca "%3d" pentru o variabila integer.
Chiar acum nu pot sa fac teste.
P.S. ma supara Tapatalk deoarece strege/inlocuieste procente cu alte chestii.
Am explicat in comentariu.

Semnul plus nu e afisat. Dardaca variabila e negativa, minusul e afisat.
Trebuie sa faci niste trucuri suplimentare acolo.
Transformi variabila in modul (pierzi semnul) si apoi o faci string de 2 caractere.
Apoi faci niste if-uri ca sa faci print la semnul minus si plus in functie de variabila originala.
Daca e 0 printezi un spatiu gol.

Pseudocode
Char volume_sign[1]
If variabila_volum_sunet< 0
  Volume_sign="-"
  Else
     If variabila_volum_sunet>0
     Volume_sign="+"
     Else
        Volume_sign=" "

Edited by radurus, 25 March 2017 - 14:22.


#975
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
Schimba variabila_volum_sunet cu pozitie in postul anterior.

Char string_pozitie[2]
Modul_pozitie = abs(pozitie)
sprintf (string_pozitie,%2d,Modul_pozitie)
Set.cursor ......
Lcd.print volume_sign
Lcd.print string_pozitie

Treaba cu modul_pozitie ar putea fi eliminata daca iti accepta
sprintf (string_pozitie,%2d,abs(pozitie))

Edited by radurus, 25 March 2017 - 14:45.


#976
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008
Intre timp am descoperit o chestie timpit de simpla, care culmea ca si functioneaza:

Varianta A
if (Pozitie<100) lcd.print('0');
if (Pozitie<10) lcd.print('0');
lcd.print(Pozitie);

Varianta B
if (Pozitie<100) lcd.print(' ');
if (Pozitie<10) lcd.print(' ');
lcd.print(Pozitie);

Numai ca nu merge la numerele negative.

-----------
Am incercat ultimul tau exemplu, dar deocamdata da eroare

Spoiler

Edited by florin71_skoda, 25 March 2017 - 15:02.


#977
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
Credeam ca verifici tu sintaxa.
Nu da copy-paste.
Veeifica la sprintf in paranteza, chestia aia cu procente sa fie in ghilimele.
Nu exista set.cursor ci lcd.setCursor.
Vetifica unde trebuie (, ), {, }, ;.

Edited by radurus, 25 March 2017 - 15:05.


#978
raduk

raduk

    Instalatorul de Iași

  • Grup: Senior Members
  • Posts: 7,330
  • Înscris: 30.09.2007

 florin71_skoda, on 25 martie 2017 - 13:54, said:

[...] sa afiseze si plusul? [...]
Eu zic că „DA”. Încearcă cu
lcd.print((char)43);
Posted Image

 florin71_skoda, on 25 martie 2017 - 13:01, said:

[...] daca trec de 10 si dupaia ma intorc inapoi la 9, pe afisaj ramine "coada" ca nu-si face clear si-mi afiseaza 90 in loc de 9. Cum as putea rezolva problema? [...]
Nu promit nimic, dar dacă te rezolv, te lipsești de-o bere din cele peste 100 pe care am să ți le dau? Posted Image Dacă „NU”, vezi că-ți fac report că m-ai ademenit la colaborare direct de pe forum. Posted Image

#979
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
char string_pozitie[2] trebuie sa mearga
Lipseste ; inainte de el sau ceva paranteze.

#980
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008

 radurus, on 25 martie 2017 - 15:02, said:

Credeam ca verifici tu sintaxa.

Pai cum suparare sa o verific daca nu stiu deloc programare ? :D

 raduk, on 25 martie 2017 - 15:13, said:

lcd.print((char)43);
Posted Image
Merge plusul  :D

Te scutesc de mai multe beri cind treci prin Alba, ca oricum nu putem bea atita :P

#981
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
... merge plusul...
Dar daca foloseai
Lcd.print("+");
Cum era?

#982
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008

 radurus, on 25 martie 2017 - 15:14, said:

char string_pozitie[2] trebuie sa mearga

char era scris cu litera mare ... Char ... acum merge si am trecut la urmatoarea eroare Posted Image

----------
Am eroarea:
'volume_sign' was not declared in this scope
lcd.print (volume_sign) ;
exit status 1
'volume_sign' was not declared in this scope
-------
Asa ca am renuntat la lcd.print (volume_sign) ;

Bingo .... Merge ....

--------------
Doar la numerele negative vad ca face figuri, cind ajung la -10 , ca-mi pastreaza dupaia zeroul de la final
Am schimbat "%2d" in "%3d" si sa rezolvat si problema asta. Acum o sa am probleme cind trec de 99 sau scad sub -99 Posted Image

-----
Codul functional:

  char string_pozitie[2];
  sprintf (string_pozitie, "%3d", Pozitie);
  lcd.setCursor (8,0);
  lcd.print (string_pozitie);

Edited by florin71_skoda, 25 March 2017 - 15:44.


#983
raduk

raduk

    Instalatorul de Iași

  • Grup: Senior Members
  • Posts: 7,330
  • Înscris: 30.09.2007
Deci ai rezolvat și problema cu „coada”? Posted Image  Ca să știu dacă să mă mai zbat pentru amărîta aia de bere. Posted Image

#984
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
Dar din dar se face...
Berea vine la mine.
Insa trebuie sa scoata alcoolul din ea...
(joking)

Edited by radurus, 25 March 2017 - 15:38.


#985
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006

 florin71_skoda, on 25 martie 2017 - 15:24, said:


char era scris cu litera mare ... Char ... acum merge si am trecut la urmatoarea eroare Posted Image

----------
Am eroarea:
'volume_sign' was not declared in this scope
lcd.print (volume_sign) ;
exit status 1
'volume_sign' was not declared in this scope
-------
Asa ca am renuntat la lcd.print (volume_sign) ;

Bingo .... Merge ....

--------------
Doar la numerele negative vad ca face figuri, cind ajung la -10 , ca-mi pastreaza dupaia zeroul de la final
Am schimbat "-" in "=" si sa rezolvat si problema asta. Acum o sa am probleme cind trec de 99 sau scad sub -99 Posted Image

-----
Codul functional:

  char string_pozitie[2];
  sprintf (string_pozitie, "=", Pozitie);
  lcd.setCursor (8,0);
  lcd.print (string_pozitie);

Daca ai ales sa printezi 3 caractere pentru variabila aia (semn+numar), atunci trebuie sa faci char string_pozitie[3].

De fapt, pe unde am mai citit, se recomanda sa se faca un string cu un caracter mai mult decat ceea ce vrei sa printezi. Apar probleme la memorie si iti poate printa mizerii.

Edited by radurus, 25 March 2017 - 17:02.


#986
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008
La mine merge perfect cu char[2] si "%3d"

Daca las "%2d"
Am setat lcd.setCursor (8,0);
Drept urmare prima data afiseaza 0 in coloana 9
Daca merg spre plus, cind ajung la 10, o sa am 0 tot la 9 si 1 este afisat la 8, cu o coloana in fata, adica la aia setata.

Dar daca ma duc spre minus, in prima faza afiseaza -1, -2, etc.
Am - in coloana 8 si cifrele in coloana 9
Dar cind ajung la -10, acel 0 de la final zboara in coloana 10
Cind revin la -9, acel 0 ramine si am afisat -90
Si daca ma duc la plus, acel 0 tot ramine.

--------
Daca modific doar "%2d" in "%3d", primul 0 este afisat in coloana 10, chiar daca eu am setat sa fie la 8
Drept urmare am 8 si 9 goale, ca si spatiu de manevra.
Cind ajung la -10, acel 0 de la final ramine tot in coloana 10 cu - si 9 se umple coloanele 8 si 9

Daca as merge pina la 100, as avea iar o problema.

------
Am incercat acum si cu char[1] si "%3d" si merge perfect.
Probleme am doar cind ajung la -100

---------
Am tot sapat netul sa rezolv si problema cu Lcd.print volume_sign , dar nu am gasit nimic. Am incercat sa tot modific si sa pun si in alte parti acel sing, dar tot nu afiseaza +

Edited by florin71_skoda, 25 March 2017 - 17:11.


#987
gmartau

gmartau

    Member

  • Grup: Members
  • Posts: 639
  • Înscris: 30.04.2008
- Hotaraste cate caractere ai nevoie sa aloci pe display 3 sau 4. Sa zicem 4 pentru a afisa valori de la -999 pana la +999.
- Aloci un bufer cu unu in plus pentru zero terminal adica char string_pozitie[5],  daca nu, o sa trebuiasca sa scoti din priza din cand in cand ca se blocheaza softul sau o sa afiseze din cand in cand prostii.
- Ca sa formatezi un numar intreg la valoarea afisata care sa includa semnul plus,  formatul este urmatorul "%+4d". Daca vrei spatiu pentru numere pozitive in loc de semn, formatul este "%4d"
- Valoarea afisata este aliniata la dreapta, de aceea pentru numere mici in fata vor fi spatii. Daca nu iti place si vrei valoarea aliniata la stanga, formatul este "%-+4d" (va fi afisat cu plus in fata) sau "%-4d" daca nu vrei cu semnul plus pentru numere pozitive.

  char string_pozitie[5];
  sprintf (string_pozitie, "%+4d", Pozitie);

  lcd.setCursor(6,0); // sa fie spatiu sa incapa pe acelasi rand 4 caractere.
  lcd.print(
string_pozitie);

#988
florin71_skoda

florin71_skoda

    Guru Member

  • Grup: Banned
  • Posts: 18,070
  • Înscris: 02.01.2008
Mersi pentru ajutor Posted Image

#989
raduk

raduk

    Instalatorul de Iași

  • Grup: Senior Members
  • Posts: 7,330
  • Înscris: 30.09.2007

 Fane, on 15 iunie 2015 - 19:30, said:

era un topic mai devreme cu cineva care ii era frica de inundatie. ma gandeam ca ar putea rezolva problema cu brelocuri RFID la cheile fiecaruia din casa si un cititor RFID sub un bol in care sa-si puna fiecare cheile cand intra in casa. cat cititorul vede vreunul din brelocuri tine electrovalva generala deschisa, cand nu mai e nici un breloc in bol taie apa. [...]
Aș încerca să fac ceva pe baza ideii de mai sus. Mă interesează dacă printre voi este cineva care are experiență cu RFID-urile, pentru că, înainte de a mă arunca, aș avea nevoie de o clarificare la nedumerire: nu cred că cititoarele astea știu să citească mai multe carduri o dată. Greșesc? sau se poate face vreo șmecherie? Posted Image
Varianta cu breloc RFID la cheie mi se pare foarte bună, am și locul potrivit (în poza atașată), doar că trebuie să mă apuc de „săpat” ca să văd cum se poate realiza, pentru că nu mi se pare chiar așa de simplă pentru nivelul meu de cunoștințe în acest domeniu. Ar mai fi și alte idei/variante de recunoaștere a prezenței în casă? O dau la o parte (deocamdată) pe cea cu mai multe cititoare RFID, precum și pe cea cu senzori de prezență.

Attached Files


Edited by raduk, 01 April 2017 - 11:49.


#990
radurus

radurus

    Senior Member

  • Grup: Senior Members
  • Posts: 8,023
  • Înscris: 16.06.2006
Era un sistem inteligent prezentat intr-o cladire.
Persoana purta o bratara rfid la mana.
Luminile si climatizarea se reglau in incaperea in care se afla.
Nu stiu daca avem acces la cititoare rfid cu raza de 10m si care sa coste putin.

Totusi, ce faci dac unul din familie isi uita cheile acasa? (nema protectie)
Dar ce se intampla daca nu pui cheile la locul lor, nu primesti apa?
E cam periculos sa iti conditionezi disponibilitatea resurselor (apa in cazul acesta) de ezistenta unui semnal rfid.
Trebuie sa combini cu alti senzori.

Solutia pentru inundatii ar fi senzori plasati in spatiile cu sursele de apa.
Se poate merge doar pe alarmare sau impreuna cu intreruperea circuitului de apa.

Mai ramane logica de functionare a electrovalvei: deschis cand e alimentat sau nealimentat cu tensiune.

Daca mergi pe varianta deschis-alimentat, ce faci cand ai pana de curent, nu ai apa?
Pe varianta cealalta deschis - nealimentat nu e safe, adica daca intervine o pana de curent impreuna cu o problema la apa, nu ai nici o protectie.

Cea mai buna solutie penttu avarie ar fi o valva de genul celor de la gaz. Este armata (cu arc) iar in caz de probleme, primeste un impuls care trage piedica pentru scurt timp si circuitul ramane intrerupt pana la rearmare manuala.

Daca instalatia e bine facuta, scade riscul inundatiei.
Mie mi se pare putin cam inutila aplicatia deoarece apa nu e periculoasa. Gazul si curentul pot provoca daune serioase.

Edited by radurus, 01 April 2017 - 12:36.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate