鱼C论坛

 找回密码
 立即注册
查看: 1009|回复: 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. 如果没有接收到控制信号,则什么事儿都不要做!

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

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



  1. #include <Servo.h>

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

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

  9. void loop()
  10. {
  11.     char ch; // 用于接受命令
  12.    
  13.     switch(ch)
  14.     {
  15.         case 'g':
  16.             digitalWrite(LEFT_MOTO_GO, HIGH);
  17.             digitalWrite(LEFT_MOTO_BACK, LOW);
  18.             digitalWrite(RIGHT_MOTO_GO, HIGH);
  19.             digitalWrite(RIGHT_MOTO_BACK, LOW);
  20.             break;
  21.         case 'b':
  22.             digitalWrite(LEFT_MOTO_GO, LOW);
  23.             digitalWrite(LEFT_MOTO_BACK, HIGH);
  24.             digitalWrite(RIGHT_MOTO_GO, LOW);
  25.             digitalWrite(RIGHT_MOTO_BACK, HIGH);
  26.             break;
  27.         case 'l':
  28.             digitalWrite(LEFT_MOTO_GO, LOW);
  29.             digitalWrite(LEFT_MOTO_BACK, LOW);
  30.             digitalWrite(RIGHT_MOTO_GO, HIGH);
  31.             digitalWrite(RIGHT_MOTO_BACK, LOW);
  32.             break;
  33.         case 'r':   
  34.             digitalWrite(LEFT_MOTO_GO, HIGH);
  35.             digitalWrite(LEFT_MOTO_BACK, LOW);
  36.             digitalWrite(RIGHT_MOTO_GO, LOW);
  37.             digitalWrite(RIGHT_MOTO_BACK, LOW);
  38.             break;
  39.         default:
  40.             digitalWrite(LEFT_MOTO_GO, LOW);
  41.             digitalWrite(LEFT_MOTO_BACK, LOW);
  42.             digitalWrite(RIGHT_MOTO_GO, LOW);
  43.             digitalWrite(RIGHT_MOTO_BACK, LOW);
  44.             break;   
  45.     }

  46.     // ...省略部分代码...
  47. }
复制代码
最佳答案
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, 2024-5-24 18:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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