Arduino上输入数字,蓝牙里为啥返回的是字母?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino上输入数字,蓝牙里为啥返回的是字母?相关的知识,希望对你有一定的参考价值。

比如在电脑串口监视器输入96,手机蓝牙调试器返回是A7

众所周知,arduino是在全球火热的一个热门创客应用的开发板,由于其简单易学,即便不是电子工程专业的人也很容易上手在很短的时间内开发一个智能产品,所以倍受用户的热捧,本节即教大学怎么用arduino联接蓝牙进行通讯。


工具/原料

    arduino 开发板一块

    HC05或HC06蓝牙模块一个

    杜邦线若干根

    USB通讯线一根

    android手机一个

    方法/步骤

    在连接硬件之前,大家仔细看这块开发板的硬件连接说明。

    硬件连接,装备好一个ARDUINO板一个,USB线一根,这里USB线充当电源线,因为ARDUINO板电压为3.V-12V都可以用。准备好后按图连接。

    基本连接如下图所示。安全起见,加上二个电阻如果仅是低电压的测试也可以按图二连接测试 具体的接法,一定要注意开发板收发两个端的接法,如图三所示

    正确检查无误后连接USB上电会看到蓝牙模块有红色指示灯闪烁。这时,打开你的智能手机,以ANDROID手机为例。打开蓝牙开关并搜索找到相应的模块后如果是HC-06那么点击后连接配对,一般会要输入配对密码,一般为1234 或0000,输入后配对成功。便可以操作了。

    硬件连接后,连上电脑ARDUINO IDE 并上传相关代码测试。代码片断为:

    #include <SoftwareSerial.h>

    SoftwareSerial BT(10, 11); 

    // creates a "virtual" serial port/UART

    // connect BT module TX to D10

    // connect BT module RX to D11

    // connect BT Vcc to 5V, GND to GND

    void setup()  

    // set digital pin to control as an output

    pinMode(13, OUTPUT);

    // set the data rate for the SoftwareSerial port

    BT.begin(9600);

    // Send test message to other device

    BT.println("Hello from Arduino");

    char a; // stores incoming character from other device

    void loop() 

    if (BT.available())

    // if text arrived in from BT serial...

    a=(BT.read());

    if (a=='1')

    digitalWrite(13, HIGH);

    BT.println("LED on");

    if (a=='2')

    digitalWrite(13, LOW);

    BT.println("LED off");

    if (a=='?')

    BT.println("Send '1' to turn LED on");

    BT.println("Send '2' to turn LED on");

       

    // you can add more "if" statements with other characters to add more commands

    5

    把上图的代码上传至开发板后,用手机连上这块开发板的蓝牙后,可以通过手机发射指令来查看效果了。

参考技术A 蜗牛控制器作为智能终端的可编程控制器,完全兼容Arduino,通过内置智能蓝牙串口,实现与手机的无线连接和程序下载,借助5G的全球极速连接,快速拥抱万物互联时代。

蜗牛控制器兼容Arduino 无线程序下载

“Hello,Woniu”创意来源于“Hello,World”。 “Hello,World”作为绝大多数C语言学习者的第一个实例,伴随着C语言的盛行而闻名于世。蜗牛也希望借助此例,让未来更多的人们了解蜗牛、使用蜗牛,借助蜗牛打通与世界万物的沟通与交流。

本例中,通过手机编程的方法,让蜗牛控制器向用户手机发送“Hello,Woniu”,开启用户通过手机编程远程控制硬件的世界。

为啥“数字”类型的 html 输入允许在字段中输入字母“e”?

【中文标题】为啥“数字”类型的 html 输入允许在字段中输入字母“e”?【英文标题】:Why does the html input with type "number" allow the letter 'e' to be entered in the field?为什么“数字”类型的 html 输入允许在字段中输入字母“e”? 【发布时间】:2015-10-20 19:08:44 【问题描述】:

我有以下 html5 输入元素:

<input type="number">

为什么这个输入允许在输入字段中输入字符“e”?无法输入其他字母字符(如预期的那样)

使用 chrome v. 44.0.2403.107

下面的例子来看看我的意思。

&lt;input type="number"&gt;

【问题讨论】:

它还允许您在某些浏览器中多次输入+、-和. 【参考方案1】:
  <input type="number" onKeyDown=(e) =>["e", "E", "+", "-"].includes(e.key) && e.preventDefault() >

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?【参考方案2】:

简单标准的解决方案:在Angular/Js/Ts中你可以使用正则表达式来限制任何输入键。

HTML:&lt;input type="text" name="input1" (keypress)="numericOnly($event)" /&gt;

TS:

    numericPattern = /^[0-9]*$/;
    numericOnly(event)
       return this.numericPattern.test(event.key);
    

【讨论】:

【参考方案3】:

排除除整数之外的所有内容的简单解决方案

<input  
    type="number"
    min="1" 
    step="1"
    onkeypress="return event.keyCode === 8 || event.charCode >= 48 && event.charCode <= 57">

此解决方案不会阻止复制和粘贴(包括字母“e”)。

【讨论】:

智能解决方案 这个不错【参考方案4】:

E 代表指数,用于缩短长数字。由于输入是数学输入,而指数在数学中是为了缩短大数,所以这就是 E 的原因。

显示如下:4e.

链接:1 和 2

【讨论】:

【参考方案5】:

角度;带有 IDE keyCode 已弃用警告

功能与 rinku 的答案相同,但具有 IDE 警告预防功能

numericOnly(event): boolean 
    // noinspection JSDeprecatedSymbols
    const charCode = (event.which) ? event.which : event.key || event.keyCode;  // keyCode is deprecated but needed for some browsers
    return !(charCode === 101 || charCode === 69 || charCode === 45 || charCode === 43);

【讨论】:

【参考方案6】:

强制使用仅由数字组成的数字的最佳方法

<input type="number" onkeydown="javascript: return event.keyCode === 8 ||
event.keyCode === 46 ? true : !isNaN(Number(event.key))" />

这避免了'e'、'-'、'+'、'.' ...所有不是数字的字符!

只允许数字键:

isNaN(数字(event.key))

但接受 "Backspace" (keyCode: 8) 和 "Delete" (keyCode: 46) ...

【讨论】:

注意这里会接受空格:空格的key是' ',Number(' ')等于0 添加 && !event.key == ' ' 解决空格问题。【参考方案7】:

使用角度,你可以这样做来限制输入e,+,-,E

 <input type="number"  (keypress)="numericOnly($event)"/>


  numericOnly(event): boolean  // restrict e,+,-,E characters in  input type number
    debugger
    const charCode = (event.which) ? event.which : event.keyCode;
    if (charCode == 101 || charCode == 69 || charCode == 45 || charCode == 43) 
      return false;
    
    return true;

  

【讨论】:

这将限制用户输入该字符?? 感谢您的帮助,我一直在寻找相同的角度解决方案,但现在我知道该怎么做,我将创建指令并完成任务感谢您的帖子 您可以创建最佳实践指令。您也可以直接在组件的 .ts 文件中进行操作!【参考方案8】:

要隐藏字母 e 和减号 -,只需:

onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"

【讨论】:

【参考方案9】:

因为这正是the spec 所说的应该起作用的方式。数字输入可以接受floating-point numbers,包括负号和eE字符(其中指数为eE后面的数字):

一个浮点数由以下部分组成,确切地说 以下顺序:

    (可选)第一个字符可以是“-”字符。 “0—9”范围内的一个或多个字符。 (可选)以下部分,完全按照以下顺序:
      一个“.”字符 “0—9”范围内的一个或多个字符
    (可选)以下部分,完全按照以下顺序:
      一个“e”字符或“E”字符 (可选)“-”字符或“+”字符 “0—9”范围内的一个或多个字符。

【讨论】:

啊,谢谢。我在看wrong spec 对此我仍然感到困惑,首先我不是数学家,那么“e”在数字的上下文中代表什么?其次,我不明白为什么 input.value 是一个空字符串,只要你在其中写一个“e”,即使有数字并且允许该字符...... @Simon,使用e 对于压缩大量数字很有用,否则输入起来会很乏味。举个简单的例子,2e2 = 2*10^2 = 200 @Simon "只要我写了 e",嗯,是的,"4e" 不是一个数字,而例如 "4e+0" 是一个有效的数字( 4)。如果您有一些使用部分用户输入的“实时”客户端 javascript 代码,您必须给用户时间来完成他的输入编辑以提供完整的价值,并且不会干扰到编辑的中途。如果您有来自“4e+0”输入的“未定义”,请修复您的“to number”解析器。问题中的示例运行良好,将“4e+1”报告为错误,“4e+0”正确返回为“4e+0”(即 1 到 5 之间的数字)。 @Anthony No,e 代表指数。【参考方案10】:

我们可以让它变得像下面这样简单

&lt;input type="number"  onkeydown="javascript: return event.keyCode == 69 ? false : true" /&gt;

更新答案

我们可以像@88 MPG 建议的那样让它变得更简单

&lt;input type="number" onkeydown="return event.keyCode !== 69" /&gt;

【讨论】:

最好使用return event.keyCode !== 69,因为它避免了不必要的三元运算符。也不推荐内联。 这不会阻止在字段中复制粘贴 eE 是否有任何其他类似于eE 的实例,非数学家可能不知道可以添加到此条件检查中? @user1063287,这是本案唯一的例外 ? 最终代码:onkeydown="return event.keyCode !== 69 && event.keyCode !== 187 && event.keyCode !== 189" 这可以防止 e、+ 和 -。跨度> 【参考方案11】:

HTML 输入数字类型允许“e/E”,因为“e”代表指数,它是一个数字符号。

例子200000也可以写成2e5。我希望这有助于谢谢你的问题。

【讨论】:

【参考方案12】:
<input type="number" onkeydown="return FilterInput(event)" onpaste="handlePaste(event)"  >

function FilterInput(event) 
    var keyCode = ('which' in event) ? event.which : event.keyCode;

    isNotWanted = (keyCode == 69 || keyCode == 101);
    return !isNotWanted;
;
function handlePaste (e) 
    var clipboardData, pastedData;

    // Get pasted data via clipboard API
    clipboardData = e.clipboardData || window.clipboardData;
    pastedData = clipboardData.getData('Text').toUpperCase();

    if(pastedData.indexOf('E')>-1) 
        //alert('found an E');
        e.stopPropagation();
        e.preventDefault();
    
;

【讨论】:

您对这将防止插入带有复制和粘贴功能的“E”字符有多大信心? 刚刚检查,你是对的,复制粘贴输入无效。 你是对的@StephenKelzer。我添加了代码来处理它。

以上是关于Arduino上输入数字,蓝牙里为啥返回的是字母?的主要内容,如果未能解决你的问题,请参考以下文章

带有 Arduino 的字母数字电话键盘

unity在安卓手机上使用蓝牙连接arduino蓝牙模块

这个C语言程序输入字母会出现死循环,为啥?怎么办?

Arduino ESP32 BLE蓝牙串口通讯实验

为啥有的时候我的大小写字母在转换问题上会出错,我输入大写却变成了小写,小写变大写,过一会又好了

Arduino uno板上连接一个HC-05,设置后能与手机配对成功,但是无法连接?