串口不工作? [英] Serial port not working?

查看:188
本文介绍了串口不工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了发送数据到我的Arduino检测什么被发送,然后转向正确的引脚上按什么键程序pressed。

在使用从我的Windows电脑软件的Arduino Arduino的素描作品很好,我可以通过发送使上下车每个引脚转折的W A S或ð。

在通过节点发送Arduino上闪烁RX轻,但没有什么事情发生。

谁能帮助?

Node.js的程序:

  VAR的httpserver =要求(HTTP)。createServer(功能(REQ,响应){/ *服务您的静态文件* /})
httpServer.listen(8080);VAR nowjs =要求(现在);
VAR大家= nowjs.initialize(HttpServer的);everyone.now.logStuff =函数(MSG){
    的console.log(味精);
}VAR的SerialPort =要求('serialport2')的SerialPort。
VAR断言=要求('断言');VAR PORTNAME;如果(process.platform =='的win32'){
  PORTNAME ='COM4';
}否则如果(process.platform =='达尔文'){
  PORTNAME ='/dev/cu.usbserial-A800eFN5';
}其他{
  PORTNAME ='的/ dev / ttyUSB0';
}VAR READDATA ='';
变种SP =新的SerialPort();sp.on(关闭,功能(错误){
  的console.log('端口关闭');
});sp.on('错误',函数(ERR){
  console.error(错误,错误);
});sp.on(开放,函数(){
  的console.log('口打开... preSS复位Arduino上。');
});sp.open(PORTNAME,{
  波特率:9600,
  数据位:8,
  奇偶:'无',
  停止位:1,
  流量控制:假的
});everyone.now.forward =功能(){
sp.write(W);
}everyone.now.back =功能(){
sp.write(S);
}everyone.now.left =功能(){
sp.write(一);
}everyone.now.right =功能(){
sp.write(D);
}sp.on(数据,功能(数据){
  的console.log(data.toString());
});

Arduino的程序:

 无效设置(){
  Serial.begin(9600);
  Serial.write(就绪);
  //设置我们需要输出引脚的所有引脚
  pinMode(8,输出);
  pinMode(9,输出);
  pinMode(10,输出);
  pinMode(11,输出);
}空隙环(){
  如果(Serial.available()大于0){    //读取串口一个字符
    焦炭SER = Serial.read();
    Serial.write(SER);
    //注意,因为串行读作字符,而不是INT,读值必须进行比较,以字符数
    //因此各地的数字引号中的case语句
    开关(SER){
      案W:
        移动(8);
        打破;
      案件的:
        移动(9);
        打破;
      案一:
        移动(10);
        打破;
      案例'Q':
        移动(10);
        移动(8);
        打破;
      案D:
        移动(11);
        打破;
      案例E:
        移动(11);
        移动(8);
        打破;
    }
  }
}无效移动(INT引脚){
  Serial.print(PIN);
  digitalWrite(针,HIGH);
  延迟(1);
  digitalWrite(针,LOW);
}


解决方案

我最近涉足到这个。当它接收来自除Arduino的IDE其他大部分事情串行通讯Arduino的自动复位。这就是为什么你可以从IDE发送但不能Node.js的

我有一个乌诺,把复位和Ground.Here的关于这个问题的一些好的信息页面之间的电容器。结果
祝你好运。 <一href=\"http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection\">http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

I made a program that sends out data to my arduino which detects what was sent and then turns on the correct pin according to what key is pressed.

When using the arduino software from my windows computer the arduino sketch works fine, I can make each pin turn on and off by sending either W A S Or D.

When sending via node the RX light on the arduino flashes but nothing else happens.

Can anyone help?

Node.js program:

var httpServer = require('http').createServer(function(req, response){ /* Serve your static files */ })
httpServer.listen(8080);

var nowjs = require("now");
var everyone = nowjs.initialize(httpServer);

everyone.now.logStuff = function(msg){
    console.log(msg);
}

var SerialPort = require('serialport2').SerialPort;
var assert = require('assert');

var portName;

if (process.platform == 'win32') {
  portName = 'COM4';
} else if (process.platform == 'darwin') {
  portName = '/dev/cu.usbserial-A800eFN5';
} else {
  portName = '/dev/ttyUSB0';
}

var readData = '';
var sp = new SerialPort();

sp.on('close', function (err) {
  console.log('port closed');
});

sp.on('error', function (err) {
  console.error("error", err);
});

sp.on('open', function () {
  console.log('port opened... Press reset on the Arduino.');
});

sp.open(portName, {
  baudRate: 9600,
  dataBits: 8,
  parity: 'none',
  stopBits: 1,
  flowControl: false
});

everyone.now.forward = function() {
sp.write("w");
}

everyone.now.back = function() {
sp.write("s");
}

everyone.now.left = function() {
sp.write("a");
}

everyone.now.right = function() {
sp.write("d");
}

sp.on('data', function(data) {
  console.log(data.toString());
});

Arduino Program:

void setup(){
  Serial.begin(9600);
  Serial.write("READY");
  //Set all the pins we need to output pins
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop (){
  if (Serial.available() > 0) {

    //read serial as a character
    char ser = Serial.read();
    Serial.write(ser);
    //NOTE because the serial is read as "char" and not "int", the read value must be compared to character numbers
    //hence the quotes around the numbers in the case statement
    switch (ser) {
      case 'w':
        move(8);
        break;
      case 's':
        move(9);
        break;
      case 'a':
        move(10);
        break;
      case 'q':
        move(10);
        move(8);        
        break;
      case 'd':
        move(11);
        break;
      case 'e':
        move(11);
        move(8);
        break;
    }
  }
}

void move(int pin){
  Serial.print(pin);  
  digitalWrite(pin, HIGH);
  delay(1);
  digitalWrite(pin, LOW);
}

解决方案

I recently dabbled into this. The Arduino automatically resets when it receives serial communication from most things other than the Arduino IDE. This is why you can send from the IDE but not node.js.

I have an Uno and put a capacitor between Reset and Ground.Here's a page with some good info on the subject.
Good luck. http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

这篇关于串口不工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆