mình mới sắm con mini2440 về tìm hiểu , đã tạo được ứng dụng điều khiển 4 con led bên trong kit và biên dịch lại nhân để thiết lập GPIO support nhưng mình lại không biết cách viết chưong trình điều khiển GPIO, xin mọi người chỉ giáo giúp( mò mãi vẫn không được), nếu có 1 ví dụ về tạo 1 ứng dụng đọc nút nhấn ở mạch ngoài thông qua GPIO rồi hiển thị trên màn hình( đọc input) đồng thời nhấn nút trên màn hình thì 1 led ở mạch bên ngoài sáng thông qua GPIO ( xuất output) thì càng tốt. Xin cám ơn mọi người
Thông báo
Collapse
No announcement yet.
cần giúp về GPIO của mini2440
Collapse
X
-
mọi người cho hỏi ở kit mini2440 thì mình khai báo và đọc trạng thái 1 chân gpio thì làm như thế nào, mình làm hoài mà ko được
ví dụ như chân số 9 là gpio160 đang ở mức 1 thì muốn để vào lệnh if( gpio160==1) để thực lệnh nào đó
nếu được thì cho mình xin code mẫu càng tốt, thank nhiều
Comment
-
của bạn đây, cái này mình viết từ hồi làm đồ án:
file gpio.h
Code:/**************************************************************************** ** ** Copyright (C) 2010 FPT University FUEMES group. ** All rights reserved. ** Contact: FPT University fpt.edu.vn | ** ** This file is part of the demonstration applications of the FUEMES mini2440 client ** ** $FUEMES_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: GNU Lesser General Public License v2.1 - GNU Project - Free Software Foundation. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: The GNU General Public License v3.0 - GNU Project - Free Software Foundation (FSF). ** ** If you have questions regarding the use of this file, please contact ** FUEMES group at fuemes@gmail.com. ** $FUEMES_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #include <qstring.h> #include <qobject.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> //Header pin number definitions #define PIN9 160 #define PIN10 161 #define PIN11 162 #define PIN12 163 #define PIN13 164 #define PIN14 165 #define PIN15 166 #define PIN16 192 #define PIN17 193 #define PIN18 195 #define PIN19 197 #define PIN20 198 #define PIN21 199 #define PIN22 201 #define PIN23 202 #define PIN24 203 #define PIN25 139 #define PIN26 140 #define PIN27 141 #define PIN28 194 #define PIN29 142 #define PIN30 143 #define PIN31 32 #define PIN32 33 #define PIN33 233 #define PIN34 234 class GPIO : public QObject { Q_OBJECT public: GPIO(int pin); //pin is the pin nuber on con4 of the FriendlyARM board ~GPIO(); enum Direction {In,Out,Err}; int openPin(); int closePin(); int setDirection(Direction direction); //set direction in/out. returns 0 if ok and -1 on error int getDirection(); //returns direction int setState(bool state); void setValue(bool value); bool getState(); public: private: Direction _direction; int _state; int _pinNumber; QString _directionString; QString _valueString; QString _strPin; }; #endif // SERIALPORT_H
Code:#include "mini2440Gpio.h" //-------------------------------------------------------------------------------------------------------- GPIO::GPIO(int pin) { _pinNumber = pin; _valueString = QString("/sys/class/gpio/gpio%1/value").arg(pin); _directionString = QString("/sys/class/gpio/gpio%1/direction").arg(pin); _strPin = QString("%1").arg(pin); } //-------------------------------------------------------------------------------------------------------- GPIO::~GPIO() { FILE * fp; //This will create the folder /sys/class/gpio/gpio37 if ((fp = fopen("/sys/class/gpio/unexport", "ab")) == NULL) return; rewind(fp); //Set pointer to begining of the file fwrite(_strPin.toLatin1(), sizeof(char),_strPin.length() , fp); fclose(fp); } //-------------------------------------------------------------------------------------------------------- int GPIO::openPin() { FILE * fp; //This will create the folder /sys/class/gpio/gpio37 if ((fp = fopen("/sys/class/gpio/export", "ab")) == NULL) return -1; rewind(fp);//Set pointer to begining of the file fwrite(_strPin.toLatin1(), sizeof(char),_strPin.length() , fp); fclose(fp); return 0; } //-------------------------------------------------------------------------------------------------------- int GPIO::closePin() { FILE * fp; //This will create the folder /sys/class/gpio/gpio37 if ((fp = fopen("/sys/class/gpio/unexport", "ab")) == NULL) return -1; rewind(fp);//Set pointer to begining of the file fwrite(_strPin.toLatin1(), sizeof(char),_strPin.length() , fp); fclose(fp); return 0; } //-------------------------------------------------------------------------------------------------------- int GPIO::setDirection(Direction direction) { //set direction in/out. returns 0 if ok and -1 on error FILE * fp; if ((fp = fopen(_directionString.toLatin1(), "rb+")) == NULL) return -1; rewind(fp);//Set pointer to begining of the file if(direction == In) fwrite("in", sizeof(char),2, fp); if(direction == Out) fwrite("out", sizeof(char),3, fp); fclose(fp); return 0; } //-------------------------------------------------------------------------------------------------------- /* int GPIO::getDirection() {//returns direction }*/ //-------------------------------------------------------------------------------------------------------- int GPIO::setState(bool state) {//state is 0 or 1. No effect if other value. returns the new state or -1 on error FILE * fp; if ((fp = fopen(_directionString.toLatin1(), "rb+")) == NULL) return -1; rewind(fp);//Set pointer to begining of the file if(state) fwrite("high", sizeof(char),4, fp); else fwrite("low", sizeof(char),3, fp); fclose(fp); return 0; } void GPIO::setValue(bool value) { char set_value[4]; FILE * fp; if ((fp = fopen("/sys/class/gpio/gpio33/value", "rb+")) == NULL) { printf("Cannot open value file.\n"); return; } //Set pointer to begining of the file rewind(fp); if (value) { //Write our value of "1" to the file strcpy(set_value,"1"); fwrite(&set_value, sizeof(char), 1, fp); fclose(fp); printf("...value set to 1...\n"); } else { //Set pointer to begining of the file rewind(fp); //Write our value of "0" to the file strcpy(set_value,"0"); fwrite(&set_value, sizeof(char), 1, fp); fclose(fp); printf("...value set to 0...\n"); } return; } //-------------------------------------------------------------------------------------------------------- bool GPIO::getState() { //returns 1 or 0 - the pin state. Returns -1 on error FILE * fp; char value; if ((fp = fopen(_valueString.toLatin1(), "rb+")) == NULL) return false; rewind(fp);//Set pointer to begining of the file fread(&value, sizeof(char),1, fp); fclose(fp); if(value=='1') return true; if(value=='0') return false; return false; } //--------------------------------------------------------------------------------------------------------
khởi tạo:
gpio = new GPIO(PIN20);
gpio ->openPin();
gpio ->setDirection(GPIO::Out);
hủy:
gpio ->closePin();
delete gpio ;
truy cập:
gpio ->setState(true);
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi nguyendinhvanTheo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
Cách đơn giản...-
Channel: Điện thanh
hôm nay, 00:04 -
-
bởi Ng.Phuong.5Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
Mấy con...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 22:44 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
-
Channel: Điện tử công suất
Hôm qua, 19:02 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi tuyennhanChủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
-
Channel: Điện tử công suất
Hôm qua, 15:43 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi tuyennhanLoa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
-
Channel: Điện thanh
Hôm qua, 15:28 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
-
Channel: Điện thanh
Hôm qua, 11:44 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi viettinhNó không phải cái loa rời. Chả nhẽ đèo thêm 2 con loa tép ngoài thì kỳ lắm....
-
Channel: Điện thanh
Hôm qua, 09:45 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ chú mua thêm loa tép nối tiếp qua con tụ rồi mắc vào cùng loa trung là được ạ...
-
Channel: Điện thanh
07-01-2025, 19:53 -
-
Trả lời cho Tìm datasheet linh kiện điện tử.bởi mèomướpDạ cháu hỏi bạn cháu thì bạn ấy trả lời như thế này ạ. Cháu cũng hông bít có đúng hông nữa ạ
Linh kiện điện tử với mã "943BA" và "W58BAL" là một loại cầu chì tự động (circuit breaker) do TE Connectivity sản...-
Channel: Điện tử dành cho người mới bắt đầu
07-01-2025, 19:50 -
-
bởi viettinhChuyện là mình mới đập hộp con loa kéo Sony SRS-XV900. Do khu vực mình k có sẵn hàng để trải nghiệm thực tế nên chỉ tham khảo các kênh revew online.
Mua về sử dụng thì thấy hơi buồn về chất âm, Mở max k to bằng cái loa kéo china, bass...-
Channel: Điện thanh
07-01-2025, 17:18 -
Comment