ChatGPT 教程--生成代码

ChatGPT 变生产力工具

chatGPT是一种基于人工智能技术的自然语言处理模型,它使用了深度学习算法,可以对人类语言进行理解和生成。chatGPT可以用于对话系统、智能客服、问答系统等场景,能够实现自然、流畅的对话。

chatGPT的核心技术是基于GPT(Generative Pre-trained Transformer)模型,它是一种预训练语言模型,可以通过大规模的语料库进行训练,从而学习到语言的规律和特征。在实际应用中,chatGPT可以通过微调等方式进行定制化,以适应不同的应用场景和用户需求。

chatGPT的优点包括:

  1. 自然流畅:chatGPT可以生成自然、流畅的语言,使得对话更加真实。
  2. 智能化:chatGPT可以理解用户的意图和语境,从而提供更加智能化的回答。
  3. 定制化:chatGPT可以通过微调等方式进行定制化,以适应不同的应用场景和用户需求。
  4. 高效性:chatGPT可以实现快速的响应和处理,提高用户体验。

提示:chatGPT生成代码秒便生产力工具,Ctrl+'C' / Ctrl+'V'变得更容易。chatGPT 链接 [www.laicj.cn](https://laicj.cn)。


1. 变生产力过程

利用chatGPT对自然语言解析和庞大的知识库,实际使用中需求代码。

Created with Raphaël 2.2.0 chatGPT 描述需求 验证结果? 生产力(代码) yes no

本篇文章使用网络搜索到chatGPT工具生成代码

1.1 编写需求

运行环境:树莓派4B,Ubuntu20.04
数组包含4个连续GPIO,使用sysfs接口按照数组申请
主菜单包含申请GPIO选项和退出选项,选择gpio选项后进入子菜单;子菜单中包含控制GPIO高电平、低电平和退出选项,选择高电平选项控制GPIO高电平,选择低电平选项控制GPIO低电平,选择退出回到主菜单;主菜单可选择其他选项

1.2 生成代码

  • 本文执行环境为 Ubuntu20.04,选择 bash 脚本
  • 详细描述功能需求
  • 生成代码

genrator

以下是实现该功能的 Bash 代码:

#!/bin/bash

# 定义GPIO数组
gpio_array=(17 18 19 20)

# 申请GPIO
function request_gpio() {
    
    
  for gpio in ${gpio_array[@]}; do
    echo $gpio > /sys/class/gpio/export
  done
  echo "GPIO已申请"
}

# 控制GPIO高电平
function set_gpio_high() {
    
    
  echo "请输入要控制的GPIO编号(17-20):"
  read gpio_num
  if [[ $gpio_num -ge 17 && $gpio_num -le 20 ]]; then
    gpio_index=$(($gpio_num-17))
    echo "1" > /sys/class/gpio/gpio${gpio_array[$gpio_index]}/value
    echo "GPIO${gpio_num}已设置为高电平"
  else
    echo "输入的GPIO编号无效"
  fi
}

# 控制GPIO低电平
function set_gpio_low() {
    
    
  echo "请输入要控制的GPIO编号(17-20):"
  read gpio_num
  if [[ $gpio_num -ge 17 && $gpio_num -le 20 ]]; then
    gpio_index=$(($gpio_num-17))
    echo "0" > /sys/class/gpio/gpio${gpio_array[$gpio_index]}/value
    echo "GPIO${gpio_num}已设置为低电平"
  else
    echo "输入的GPIO编号无效"
  fi
}

# 释放GPIO
function release_gpio() {
    
    
  for gpio in ${gpio_array[@]}; do
    echo $gpio > /sys/class/gpio/unexport
  done
  echo "GPIO已释放"
}

# 主菜单
function main_menu() {
    
    
  while true; do
    echo "请选择操作:"
    echo "1. 申请GPIO"
    echo "2. 控制GPIO"
    echo "3. 释放GPIO"
    echo "4. 退出"
    read choice
    case $choice in
      1)
        request_gpio
        ;;
      2)
        gpio_menu
        ;;
      3)
        release_gpio
        ;;
      4)
        exit 0
        ;;
      *)
        echo "无效的选项"
        ;;
    esac
  done
}

# GPIO子菜单
function gpio_menu() {
    
    
  while true; do
    echo "请选择操作:"
    echo "1. 控制高电平"
    echo "2. 控制低电平"
    echo "3. 退出"
    read choice
    case $choice in
      1)
        set_gpio_high
        ;;
      2)
        set_gpio_low
        ;;
      3)
        break
        ;;
      *)
        echo "无效的选项"
        ;;
    esac
  done
}

# 运行主菜单
main_menu

在树莓派上运行该脚本,即可进入主菜单,选择申请GPIO选项后,程序会自动申请数组中定义的4个GPIO。选择控制GPIO选项后,进入子菜单,可以选择控制GPIO高电平、低电平或退出。选择退出后,回到主菜单,可以选择释放GPIO或退出程序。

1.3 验证代码

本文使用GPIO核对原理图后改为 GPIO2_A0-3,需要修改GPIO编号。
GPIO编号计算公式:32 x 组号 + 8 x 组别 + io号
以GPIO2_A1为例,GPIO2组号是2,A1组别是0(A为0 B为1 C为2 D为3) ,管脚偏移量是1
GPIO编号 = 32 x 2 + 8 x 0 + 1 = 65,然后计算出其它为 64 66 67。

#!/bin/bash^M
^M
# 定义GPIO数组^M
gpio_array=(64 65 66 67)^M
^M
# 申请GPIO^M
function request_gpio() {
    
    ^M
  for gpio in ${gpio_array[@]}; do^M
    echo $gpio > /sys/class/gpio/export^M
  done^M
  echo "GPIO已申请"^M
}^M
  1. Windows环境下验证代码
    右击 --> 文本文档 --> 重名 --> test.sh -->粘贴刚复制代码
    –> 导入到树莓派 --> 将 dos格式的 test.sh转为 unix下的文档
    –> 增加执行权限 --> 验证执行结果
dos2unix test.sh
chmod +x test.sh
sh test.sh
  1. Linux环境下验证代码
    编辑test.sh -->粘贴刚复制代码–> 增加执行权限 --> 验证执行结果
gedit test.sh
# 粘贴后保存
chmod +x test.sh

执行开启测试,本文使用Linux环境,可直接编辑直接执行。

. ./test.sh
arm@Ubuntu20:~$ ./test.sh 
请选择操作:
1. 申请GPIO
2. 控制GPIO
3. 释放GPIO
4. 退出
1
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
GPIO已申请
请选择操作:
1. 申请GPIO
2. 控制GPIO
3. 释放GPIO
4. 退出

核验执行结果并不是预想,对比需求描述与生成结果。发现描述有误,修改描述重新生成,喜提再来一次。

#!/bin/bash

# 定义GPIO数组
gpio_array=(64 65 66 67)

# 导出GPIO
for gpio in ${gpio_array[@]}; do
    echo $gpio > /sys/class/gpio/export
done

# 设置GPIO为输出模式
for gpio in ${gpio_array[@]}; do
    echo out > /sys/class/gpio/gpio$gpio/direction
done

# 定义菜单选项
menu_options=("GPIO ${gpio_array[0]}" "GPIO ${gpio_array[1]}" "GPIO ${gpio_array[2]}" "GPIO ${gpio_array[3]}" "退出")

# 定义控制选项
control_options=("高电平" "低电平" "退出")

# 定义函数:控制GPIO电平
function control_gpio() {
    
    
    gpio=$1
    control=$2
    if [ $control == "高电平" ]; then
        echo 1 > /sys/class/gpio/gpio$gpio/value
    elif [ $control == "低电平" ]; then
        echo 0 > /sys/class/gpio/gpio$gpio/value
    fi
}

# 主循环
while true; do
    # 显示菜单
    echo "请选择要控制的GPIO:"
    for i in ${!menu_options[@]}; do
        echo "$i. ${menu_options[$i]}"
    done

    # 读取用户输入
    read -p "请输入选项编号:" choice

    # 处理用户输入
    if [ $choice -ge 0 ] && [ $choice -lt ${#menu_options[@]} ]; then
        if [ $choice -eq $((${#menu_options[@]} - 1)) ]; then
            # 退出
            break
        else
            # 进入控制子菜单
            gpio=${gpio_array[$choice]}
            while true; do
                # 显示控制子菜单
                echo "请选择要进行的操作:"
                for i in ${!control_options[@]}; do
                    echo "$i. ${control_options[$i]}"
                done

                # 读取用户输入
                read -p "请输入选项编号:" control_choice

                # 处理用户输入
                if [ $control_choice -ge 0 ] && [ $control_choice -lt ${#control_options[@]} ]; then
                    if [ $control_choice -eq $((${#control_options[@]} - 1)) ]; then
                        # 退出控制子菜单
                        break
                    else
                        # 控制GPIO电平
                        control=${control_options[$control_choice]}
                        control_gpio $gpio $control
                    fi
                else
                    echo "无效的选项编号,请重新输入!"
                fi
            done
        fi
    else
        echo "无效的选项编号,请重新输入!"
    fi
done

# 取消导出GPIO
for gpio in ${gpio_array[@]}; do
    echo $gpio > /sys/class/gpio/unexport
done

该脚本使用sysfs接口控制GPIO,首先将需要使用的GPIO导出并设置为输出模式,然后进入主循环,显示菜单并读取用户输入,根据用户选择进入控制子菜单或退出程序。在控制子菜单中,显示控制选项并读取用户输入,根据用户选择控制对应GPIO的高低电平。最后取消导出GPIO。

测试后仍然没达到要求,再来一编。

Tips

  1. Windows下编辑文本文档为 dos环境在每行末尾会增加^M,执行时会引起报错;须手动清除再执行。
  2. Linux 执行时要确认执行文件路径
    . + /path/file 为绝对路径
    sh + path/file 为相对路劲

总结

科技改变生活。

猜你喜欢

转载自blog.csdn.net/weixin_35723192/article/details/130623284