论最秀的头文件-在树莓派小车上的应用

本文分享了两个头文件:CYSAC.h和CYSLC.h,前者用于通过输入洛谷题目编号解决题目并输出答案,后者包含控制树莓派小车按数字行走的代码。探讨了头文件的结合使用可能性及树莓派SD卡容量选择。

前几天,我写了几个头文件,觉得它们用起来实在是太方便了,现在就来分享一下。

头文件一:CYSAC.h,此头文件包含cysans()函数,可以只输入洛谷的题目编号,便帮你解决问题,输出答案。

头文件二:CYSLC.h,此头文件包含0~9 10个数字,可以方便地控制树莓派小车走出洛谷题的答案。

那现在可不可以将两个头文件综合一下呢?应该是可以的。考虑树莓派智能小车的SD卡大小,建议使用16GB,这样系统占了7.几G后还有足够的空间去存题库。考虑到系统上和语言上的差别,暂时作者便不同时使用两个头文件了。

现CYSAC.h的代码基本如下:

#ifndef __CYSAC_H__
#define __CYSAC_H__ 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void cysans(char *str)
{
	int c=sizeof(str);
	int i=0;
	char cc[100];
	for(i=0;i<c;i++)
	{
		cc[i]=str[i];
	}
	cc[c]='.';
	cc[c+1]='e';
	cc[c+2]='x';
	cc[c+3]='e';
	system(str);
	system("pause");
	return;
}
#endif

现CYSLC.h的代码基本如下:

#ifndef __CYSLC_H__
#define __CYSLC_H__

#include <stdio.h>
#include <stdlib.h>
#include <softPwm.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <time.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <wiringPi.h>


#define Trig	28
#define Echo	29
#define LEFT	11
#define RIGHT	10
#define BUFSIZE 512

#define MOTOR_GO_FORWARD   digitalWrite(28,HIGH);digitalWrite(29,LOW);digitalWrite(24,HIGH);digitalWrite(25,LOW)
#define MOTOR_GO_BACK	   digitalWrite(29,HIGH);digitalWrite(28,LOW);digitalWrite(25,HIGH);digitalWrite(24,LOW)
#define MOTOR_GO_RIGHT	   digitalWrite(28,HIGH);digitalWrite(29,LOW);digitalWrite(25,HIGH);digitalWrite(24,LOW)
#define MOTOR_GO_LEFT	   digitalWrite(29,HIGH);digitalWrite(28,LOW);digitalWrite(24,HIGH);digitalWrite(25,LOW)
#define MOTOR_GO_STOP	   digitalWrite(28, LOW);digitalWrite(29,LOW);digitalWrite(24, LOW);digitalWrite(25,LOW)


void run()     // 前进
{
    softPwmWrite(29,0); //左轮前进
	softPwmWrite(28,250); 
	softPwmWrite(25,0); //右轮前进
	softPwmWrite(24,250); 

}

int max(int a,int b)
{
	if(a>=b)
		return a;
	return b;
}

void brake(int time)         //刹车,停车
{
    softPwmWrite(28,0); //左轮stop
	softPwmWrite(29,0); 
	softPwmWrite(24,0); //stop
	softPwmWrite(25,0); 
    delay(time * 100);//执行时间,可以调整  
}

void left()         //左转()
{
    softPwmWrite(29,250); //左轮
	softPwmWrite(28,0); 
	softPwmWrite(25,0); //右轮前进
	softPwmWrite(24,250); 
	//delay(time * 300);
   // delay(time * 300);

}



void right()        //右转()
{
    softPwmWrite(29,0); //左轮前进
	softPwmWrite(28,250); 
	softPwmWrite(25,250); //右轮
	softPwmWrite(24,0); 
    //delay(time * 300);	//执行时间,可以调整
}



void back()          //后退
{
    softPwmWrite(29,250); //左轮back
	softPwmWrite(28,0); 
	softPwmWrite(25,250); //右轮back
  	softPwmWrite(24,0); 
    //delay(time *200);     //执行时间,可以调整
}
void cyswrite(char c)
{
	if(c>='0'&&c<='9')
	{
		if(c=='0')
		{
			run();
			delay(5000);
			left();
			delay(3000);
			run();
			delay(2000);
			left();
			delay(3000);
			run();
			delay(5000);
			left();
			delay(3000);
			run();
			delay(2000);
			//0
			right();
			delay(8000);
			run();
			delay(5000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='1')
		{
			run();
			delay(2000);
			//1
			left();
			delay(3000);
			run();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(8000);
			brake(1000);
			return;
		}
		else if(c=='2')
		{
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(5000);
			left();
			delay(3000);
			run();
			delay(5000);
			left();
			delay(8000);
			brake(1000);
			return;
		}
		else if(c=='3')
		{
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			back();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			left();
			delay(8000);
			run();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(6000);
			right();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='4')
		{
			right();
			delay(1500);
			run();
			delay(4243);
			left();
			delay(4500);
			run();
			delay(4243);
			back();
			delay(1243);
			right();
			delay(3000);
			run();
			delay(1500);
			back();
			delay(4500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='5')
		{
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			//go
			right();
			delay(8000);
			//back
			run();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='6')
		{
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='7')
		{
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(6000);
			back();
			delay(6000);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='8')
		{
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			back(2500);
			left(3000);
			brake(1000);
			run();
			delay(2000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
		else if(c=='9')
		{
			run();
			delay(2500);
			left();
			delay(3000);
			run();
			delay(3000);
			right();
			delay(3000);
			run();
			delay(2500);
			right();
			delay(3000);
			run();
			delay(3000);
			//go
			right();
			delay(8000);
			//back
			run();
			delay(3000);
			left();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			run();
			delay(5000);
			right();
			delay(3000);
			brake(1000);
			return;
		}
	}
	return;
}
#endif

转载请注明

<think>好的,用户的问题是关于如何将树莓派智能小车连接到电脑后,在终端中执行C语言代码文件。首先,我需要确认用户的使用场景和需求。用户可能是一个刚开始接触树莓派和C语言的开发者,想要通过编写程序控制智能小车。他们可能已经完成了硬件连接,但不太清楚如何在树莓派上运行代码。 接下来,我需要考虑用户可能遇到的一些问题。比如,如何将代码传输到树莓派?如何打开终端?如何编译和运行C程序?还有可能需要安装额外的库或工具链。用户可能没有提到这些细节,所以需要一步步引导他们完成整个过程。 首先,连接树莓派到电脑的方式可能有多种,比如通过SSH或者直接连接显示器。如果用户是通过SSH连接的,那么他们可能已经知道如何访问终端。如果用户是直接操作树莓派,那么需要指导他们打开浏览器后如何进入终端。比如在树莓派OS中,通常可以通过菜单中的终端应用打开。 然后是代码传输的问题。用户可能需要将编写好的C代码文件传输到树莓派上。这里可以建议几种方法,比如使用SCP命令、USB闪存盘,或者直接在树莓派上使用浏览器下载代码文件。如果用户使用的是树莓派自带的浏览器,可能已经可以通过下载或保存文件到指定目录。 接下来是编译C代码。用户需要确认是否安装了GCC编译器。如果没有安装,需要指导他们如何安装。然后使用gcc命令进行编译,生成可执行文件。这里可能会遇到库依赖的问题,特别是如果代码涉及到树莓派的GPIO控制或其他硬件接口,可能需要安装如wiringPi之类的库。需要提醒用户检查是否需要这些库,并指导如何安装。 后是运行程序。编译成功后,执行生成的可执行文件,可能需要使用sudo权限,特别是涉及硬件操作的时候。同时,用户需要注意代码是否正确处理了硬件控制,比如GPIO引脚的定义是否正确,是否有权限问题等。 用户可能遇到的常见错误包括:编译错误(语法错误、缺少头文件)、运行时权限不足、硬件连接不正确等。需要提醒用户检查这些方面,并给出相应的解决建议,比如使用sudo运行,检查接线,安装缺失的库等。 总结来说,步骤应该是:连接到树莓派终端 -> 传输代码文件 -> 安装必要的工具和库 -> 编译代码 -> 运行程序。同时需要给出具体的命令示例,确保用户能够一步步操作。此外,可能还需要提醒用户关于文件路径的问题,确保他们在正确的目录下执行命令。</think>将树莓派智能小车连接到电脑后,通过终端执行C语言代码文件的操作步骤如下: --- ### **步骤1:连接树莓派与终端** 1. **物理连接** - 通过USB数据线或SSH连接树莓派与电脑。 - 若使用SSH,在电脑终端输入: ```bash ssh pi@树莓派IP地址 # 默认密码通常是"raspberry" ``` 2. **进入终端界面** - 如果直接操作树莓派,打开桌面菜单中的终端(Terminal)。 --- ### **步骤2:准备C代码文件** 1. **代码存放位置** - 将C语言代码文件(如`car_control.c`)保存到树莓派的某个目录(例如`~/projects/`)。 - 可通过U盘、SCP命令或直接在树莓派浏览器中下载代码文件。 2. **验证文件路径** - 在终端中进入代码目录: ```bash cd ~/projects # 假设代码在projects目录 ``` - 查看文件是否存在: ```bash ls -l car_control.c ``` --- ### **步骤3:编译C代码** 1. **安装编译工具(如未安装)** - 若未安装GCC编译器,执行: ```bash sudo apt update && sudo apt install gcc ``` 2. **编译代码** - 使用`gcc`命令编译代码: ```bash gcc car_control.c -o car_control -lwiringPi # 假设依赖wiringPi库 ``` - **关键参数解释**: - `-o car_control`:指定输出文件名 - `-lwiringPi`:链接树莓派GPIO控制库(若代码涉及硬件控制) 3. **处理依赖问题** - 若提示缺少库(如`wiringPi`),安装依赖: ```bash sudo apt install wiringpi ``` --- ### **步骤4:执行程序** 1. **赋予执行权限(可选)** - 若需权限控制,执行: ```bash chmod +x car_control ``` 2. **运行程序** - 直接执行编译后的文件: ```bash sudo ./car_control # 使用sudo因涉及硬件操作 ``` --- ### **步骤5:调试与优化** 1. **常见问题排查** - **编译错误**:检查代码语法(如分号、括号匹配)和头文件路径。 - **权限问题**:确保使用`sudo`运行涉及硬件的程序。 - **硬件未响应**:验证GPIO引脚定义是否与接线一致。 2. **实时调试** - 使用`printf`输出调试信息,或通过`gdb`调试: ```bash gcc -g car_control.c -o car_control # 添加调试符号 gdb ./car_control ``` --- ### **补充说明** - **代码示例**(简单GPIO控制): ```c #include <wiringPi.h> int main() { wiringPiSetup(); pinMode(0, OUTPUT); // 设置GPIO0为输出 digitalWrite(0, HIGH); // 控制电机 delay(1000); return 0; } ``` - **文件传输替代方案**: 使用`scp`从电脑传输文件到树莓派: ```bash scp car_control.c pi@树莓派IP地址:~/projects/ ``` 通过以上步骤,你可以在树莓派终端中完成C语言代码的编译与执行,进而控制智能小车
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值