Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Recomandare boiler indirect 2 sep...

Cargus Ship & Go - De la 1 Le...

Ce almanahuri citeați pe vremuri?

Cutremure in Turcia
 Stalp metalic

Fara adapost in caz de cutremur

Angajare fara adresa

Radio care primea semnal prin cab...
 Plan de situatie

BOR pierde 2,3 milioane de pravos...

Confort House Bucuresti - Militar...

Furtul de copii straini, pentru &...
 Pedometre, coliere pentru vaci pe...

Prajituri pt cafenele, calcul pre...

Masea cazuta

Inceput in dj
 

[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,091
  • Î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,176
  • Î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: 3
  • Î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

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

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