Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

[Embedded] Cum fac ca userul sa defineasca pinii

- - - - -
  • Please log in to reply
2 replies to this topic

#1
bogdan2011

bogdan2011

    Senior Member

  • Grup: Senior Members
  • Posts: 2,097
  • Înscris: 07.01.2011
Am scris o biblioteca pentru un ecran LCD in SDK-ul de la raspberry pi pico. In lcd.c am functiile care controleaza LCD-ul si care lucreaza cu GPIO (gpio_init, gpio_put etc). Tot acolo am definit si pinii folositi de aceste functii, dar as vrea ca userul sa poata defini proprii pini in main.c, fara sa editeze lcd.c.
Codul arata cam asa:

uint RS = 16;
uint EN = 17;
uint D4 = 18;
uint D5 = 19;
uint D6 = 20;
uint D7 = 21;

void lcd_setup() {
// initialize GPIO pins
gpio_init(RS);
gpio_init(EN);
gpio_init(D4);
gpio_init(D5);
gpio_init(D6);
gpio_init(D7);
// set direction of GPIO pins
gpio_set_dir(RS, GPIO_OUT);
gpio_set_dir(EN, GPIO_OUT);
gpio_set_dir(D4, GPIO_OUT);
gpio_set_dir(D5, GPIO_OUT);
gpio_set_dir(D6, GPIO_OUT);
gpio_set_dir(D7, GPIO_OUT);
//set all pins low
gpio_put(RS, 0);
gpio_put(EN, 0);
gpio_put(D4, 0);
gpio_put(D5, 0);
gpio_put(D6, 0);
gpio_put(D7, 0);
}


Ce am incercat pana acum:
- am definit variabilele pinilor in lcd.c fara a le da o valoare, apoi le-am dat-o in main.c dar compiler-ul s-a plans ca sunt dublu declarate
- am trecut pinii ca parametrii ai functiei, dar avand in vedere ca mai am si alte functii, devine prea complicat
- am creat un struct, dar dupa ce userul creaza propriul "obiect", nu stiu cum sa pasez pinii catre functii. Ceva de genul:

typedef struct LCD {
uint RS_Pin;
uint EN_Pin;
uint D4_Pin;
uint D5_Pin;
uint D6_Pin;
uint D7_Pin;
} LCD;

LCD lcd1;
lcd1.RS_Pin = 16;
lcd1.EN_Pin = 17;
etc...



#2
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,528
  • Înscris: 06.03.2016
Pasezi pinii ca parametri functiei lcd_setup() si ii stochezi in structura definita global.
Sau dai #define in lcd.h la fiecare pin o valoare implicita, apoi ii redefinesti in main.c, dupa caz. Header-ul bineinteles trebuie sa contina si prototipul functiilor.

Edited by red46, 01 December 2022 - 16:04.


#3
Gillphade

Gillphade

    New Member

  • Grup: Candidate Members
  • Posts: 5
  • Înscris: 06.01.2023
Puteți trece numerele PIN ca argumente de funcție în lcd.c și permiteți utilizatorului să le specifice în main.c atunci când apelează funcțiile. De exemplu, puteți modifica semnătura funcției gpio_init din lcd.c la:
void gpio_init(int pin)

Apoi, în main.c, utilizatorul poate specifica numărul PIN dorit atunci când apelează funcția gpio_init:
gpio_init(17);

În acest fel, utilizatorul poate alege ce pin să folosească fără a fi nevoie să modifice codul din lcd.c. Puteți aplica aceeași abordare și altor funcții care folosesc GPIO.

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

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