当前位置 博文首页 > 【欢迎关注,一起学习,共同进步!】:【嵌入式设计】实验 2

    【欢迎关注,一起学习,共同进步!】:【嵌入式设计】实验 2

    作者:[db:作者] 时间:2021-08-12 11:56

    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) 串口监视器实验中,