鱼C论坛

 找回密码
 立即注册
查看: 1177|回复: 7

[已解决]S1E12练习疑惑

[复制链接]
发表于 2020-3-18 23:17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C. 通过调用 digitalWrite() 函数为指定的数字引脚赋值高电平(HIGH)或低电平(LOW)来实现电机的运行或停止。比如 digitalWrite(8, HIGH); digitalWrite(9, LOW); 表示左电机前进。反之,digitalWrite(8, LOW); digitalWrite(9, HIGH); 表示左电机后退。

D. 程序使用一个字符变量 ch 来接收指令,'g' 表示前进;'b' 表示后退;'r' 表示右转;'l' 表示左转。

E. 要让小车左转,那么就是左轮不动,右轮前进。

F. 如果没有接收到控制信号,则什么事儿都不要做!

====================================
转向时候没有信号的轱辘  ,我不编写语句可以吗?不编写会有什么后果?

下面是习题里的正确答案,转向那部分是编写语句了的
====================================


#include <Servo.h>

// 为了方便调用,我们为控制左右电机
// 前进后退的数字引脚进行了宏定义
#define LEFT_MOTO_GO    8 
#define LEFT_MOTO_BACK    9
#define RIGHT_MOTO_GO    10
#define RIGHT_MOTO_BACK    11

// ...省略部分代码...

void loop()
{
    char ch; // 用于接受命令
    
    switch(ch)
    {
        case 'g':
            digitalWrite(LEFT_MOTO_GO, HIGH);
            digitalWrite(LEFT_MOTO_BACK, LOW);
            digitalWrite(RIGHT_MOTO_GO, HIGH);
            digitalWrite(RIGHT_MOTO_BACK, LOW);
            break;
        case 'b':
            digitalWrite(LEFT_MOTO_GO, LOW);
            digitalWrite(LEFT_MOTO_BACK, HIGH);
            digitalWrite(RIGHT_MOTO_GO, LOW);
            digitalWrite(RIGHT_MOTO_BACK, HIGH);
            break;
        case 'l':
            digitalWrite(LEFT_MOTO_GO, LOW);
            digitalWrite(LEFT_MOTO_BACK, LOW);
            digitalWrite(RIGHT_MOTO_GO, HIGH);
            digitalWrite(RIGHT_MOTO_BACK, LOW);
            break;
        case 'r':    
            digitalWrite(LEFT_MOTO_GO, HIGH);
            digitalWrite(LEFT_MOTO_BACK, LOW);
            digitalWrite(RIGHT_MOTO_GO, LOW);
            digitalWrite(RIGHT_MOTO_BACK, LOW);
            break;
        default:
            digitalWrite(LEFT_MOTO_GO, LOW);
            digitalWrite(LEFT_MOTO_BACK, LOW);
            digitalWrite(RIGHT_MOTO_GO, LOW);
            digitalWrite(RIGHT_MOTO_BACK, LOW);
            break;   
    }

    // ...省略部分代码...
}
最佳答案
2020-3-19 01:15:55
转向时候没有信号的轱辘  ,不编写语句不可以
如果前面的状态是停止的,你没编写可以实现转向的功能
但是如果前面的状态其他状态,那么可能导致转向功能失败。
比如:前一状态是前进,两个轮子电机都处于前进状态,
digitalWrite(LEFT_MOTO_GO, HIGH);
digitalWrite(LEFT_MOTO_BACK, LOW);
digitalWrite(RIGHT_MOTO_GO, HIGH);
digitalWrite(RIGHT_MOTO_BACK, LOW);

你现在给他一个转向信号,如果你不写全,只给有动的轮子编写语句
digitalWrite(RIGHT_MOTO_GO, HIGH);
digitalWrite(RIGHT_MOTO_BACK, LOW);

实际上原先那个轮子并不会停下来,还会按照最初的设定继续前进,也就无法达到转向的效果。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-19 01:15:55 | 显示全部楼层    本楼为最佳答案   
转向时候没有信号的轱辘  ,不编写语句不可以
如果前面的状态是停止的,你没编写可以实现转向的功能
但是如果前面的状态其他状态,那么可能导致转向功能失败。
比如:前一状态是前进,两个轮子电机都处于前进状态,
digitalWrite(LEFT_MOTO_GO, HIGH);
digitalWrite(LEFT_MOTO_BACK, LOW);
digitalWrite(RIGHT_MOTO_GO, HIGH);
digitalWrite(RIGHT_MOTO_BACK, LOW);

你现在给他一个转向信号,如果你不写全,只给有动的轮子编写语句
digitalWrite(RIGHT_MOTO_GO, HIGH);
digitalWrite(RIGHT_MOTO_BACK, LOW);

实际上原先那个轮子并不会停下来,还会按照最初的设定继续前进,也就无法达到转向的效果。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 16:17:56 | 显示全部楼层
转向前后要把它复位掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 17:25:08 | 显示全部楼层
小笨笨难得糊涂 发表于 2020-3-19 01:15
转向时候没有信号的轱辘  ,不编写语句不可以
如果前面的状态是停止的,你没编写可以实现转向的功能
但是 ...

太感谢了  解决了我的好奇心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 17:25:40 | 显示全部楼层
张冲。 发表于 2020-3-19 16:17
转向前后要把它复位掉

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 17:36:47 | 显示全部楼层
这个题我直接忽略了,看的头疼。正如我不喜欢 数学里的应用题一样,数学里的几何什么的还是蛮喜欢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 17:39:52 | 显示全部楼层
alex5153 发表于 2020-3-19 17:36
这个题我直接忽略了,看的头疼。正如我不喜欢 数学里的应用题一样,数学里的几何什么的还是蛮喜欢

我也不太喜欢数学  抽象的东西不喜欢   但是和实际应用能联系到一块的就喜欢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-20 12:21:16 | 显示全部楼层
拖延症大叔 发表于 2020-3-19 17:39
我也不太喜欢数学  抽象的东西不喜欢   但是和实际应用能联系到一块的就喜欢

我还是喜欢做这样的题。题目就一句话。自己去想流程
//输入三角形三边长度,判断此三角形类型
#include <stdio.h>
int main()
{
        int a, b, c;
        printf("请输入三角形三个边的长度\n");
        scanf("%d%d%d", &a, &b, &c);
        if (a + b <= c || b + c <= a || a + c <= b)/*任意两边之和小于或等于第三边则构不成三角形*/
        {
                printf("构不成三角形,请输入正确的值\n");
        }
        else if (a == b && b == c)
        {
                printf("这个三角形为等边三角形\n");
        }
        else if (a == b || b == c || a == c)
        {
                printf("这个三角形为等腰三角形\n");
        }
        else
        {
                printf("这个三角形为普通三角形\n");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表