Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Despre compania de aministrare Sq...

Durere taietura deget dupa 2 luni

Dalți gravare lemn

Didgeridoo
 Motorola Edge 50 Ultra

Gaura perete apartament cu evitar...

Orientare antena prime focus

Problema conectare mail yahoo
 comisioane asociatie proprietari

Primul sistem de televiziune cu p...

Internetul este neutilizabil fara...

Eroare cloud burn icopy face id
 DermaRoller ce este ?

Articole limba Germana

Cum se imparte legal o mostenire ...

Avem sanse sa avem energie electr...
 

[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,547
  • Î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

Bun venit pe Forumul Softpedia!

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