当前位置 博文首页 > 【欢迎关注,一起学习,共同进步!】:【嵌入式设计】实验 2
umount
fileIO.c:
#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <termios.h>
#include <unistd.h>
#define MAX_SIZE 1000
int fd_adc;
int fd_led;
int fd_bz;
char *adc = "/dev/adc";
char *leds = "/dev/leds";
char *buzzer = "/dev/buzzer_ctl";
char buffer[512];
int set_opt(int fd_uart, int nSpeed, int nBits, char nEvent, int nStop);
void getresist() {
memset(buffer, 0, sizeof(buffer));
if ((fd_adc = open(adc, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing ADC !\n");
return;
}
int len;
int i;
for (i = 0; i < 20; i++) {
len = read(fd_adc, buffer, 10);
printf("\033c"); // Clear screen
printf("content: %s\n", buffer);
sleep(1);
}
}
void ctrl_led(int times) {
if ((fd_led = open(leds, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing LEDs !\n");
return;
}
int i;
for (i = 0; i < times; i++) {
ioctl(fd_led, 0, 0);
ioctl(fd_led, 0, 1);
sleep(1);
ioctl(fd_led, 1, 0);
ioctl(fd_led, 1, 1);
sleep(1);
}
}
void ctrl_buzzer(int times) {
if ((fd_bz = open(buzzer, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing buzzer !\n");
return;
}
int i;
for (i = 0; i < times; i++) {
ioctl(fd_bz, 1);
sleep(1);
ioctl(fd_bz, 0);
sleep(1);
}
}
void resist_ctrl_led() {
memset(buffer, 0, sizeof(buffer));
if ((fd_adc = open(adc, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing ADC !\n");
return;
}
if ((fd_led = open(leds, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing LEDs !\n");
return;
}
if ((fd_bz = open(buzzer, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing buzzer !\n");
return;
}
int i;
int len;
int resist;
double period;
int beep = 0;
while (1) {
len = read(fd_adc, buffer, 10);
ioctl(fd_bz, 0);
// printf("\033c"); // Clear screen
resist = atoi(buffer);
resist *= 2.442; // 10000/4095
while (resist < 1000 || resist > 9000) {
if (!beep) {
ioctl(fd_bz, 1);
sleep(1);
ioctl(fd_bz, 0);
sleep(1);
beep = 1;
}
memset(buffer, 0, sizeof(buffer));
len = read(fd_adc, buffer, 10);
// printf("\033c"); // Clear screen
resist = atoi(buffer);
resist *= 2.442;
printf("Resist: %d\n", resist);
}
beep = 0;
// period = (10000 - resist) * 200;
period = (13.3 - log(resist) / log(2)) * 200000;
printf("Resist: %d\n", resist);
printf("Period: %lf\n", period);
ioctl(fd_led, 0, 0);
ioctl(fd_led, 0, 1);
usleep(period);
ioctl(fd_led, 1, 0);
ioctl(fd_led, 1, 1);
usleep(period);
}
}
int main(void) {
// getresist(buffer);
// ctrl_led(10);
// ctrl_buzzer(10);
if ((fd_adc = open(adc, O_RDWR | O_NOCTTY | O_NDELAY)) < 0) {
printf("Error initializing ADC !\n");
return -1;
}
int len;
int resist;
int fd_uart, fd_file, nByte;
char *uart3 = "/dev/ttySAC3";
char *IOtest = "/home/temp/data.txt";
char uart_out[50];
char resist_str[4];
char buffer_read[MAX_SIZE];
int byte = 0;
char *str_1 = "Resistance: ";
char *str_2 = " Ohm Alert: ";
char *str_alert;
// (2) 打开串口3,路径名指向指向终端设备
if ((fd_file = open(IOtest, O_RDWR, 0777)) < 0) {
printf("open %s failed!\n", IOtest);
return;
} else {
if ((fd_uart = open(uart3, O_RDWR | O_TRUNC, 0777)) < 0)
printf("open %s is failed", uart3);
else {
// (3) 预热实验中, 初始化串口3, 波特率9600, 8位数据位, 无校验,
// 1位停止位
// (4) 串口监视器实验中,