查看: 1284|回复: 0

使用Wifiduino接受上位机数据,控制云台(内含测试用LCD1602)

[复制链接]
  • TA的每日心情
    开心
    2019-4-10 16:14
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2018-5-18 19:51 | 显示全部楼层 |阅读模式
    感谢奈何送的Wifiduino,因为一直比较忙,所以没有怎么用,直到昨日我可爱的Nano同学光荣牺牲,我又把魔爪伸向了可怜的Wifiduino,希望它能在暴力使用中撑得久一点吧。。。。
    程序主要用途是获取上位机按照XXX,XXX/n格式发送的坐标数据,控制二自由度云台运行,数据处理部分已在上位机完成,降低下位机压力,写的比较简单,用软件延时代替了delay,提高兼容性,还望各位大佬轻踩!(目前为有线连接测试阶段,下一步会改为无线传输,这个坑我保证尽快填)
    #include <Servo.h>
    #include <LiquidCrystal.h>

    #define NOP do { __asm__ __volatile__ ("nop"); } while (0)
    #define ulong unsigned long

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);      //构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,2

    int Sign = 0;//标志位为0时写入X为1时写入Y
    int Finish = 0;
    Servo myservo1;
    Servo myservo2;
    int val1 = 90;
    int val2 = 90;
    String inputString = "";         // 缓存字符串
    boolean stringComplete = false;  // 是否string已经完成缓存

    void Change() {
      String MouseX = "";
      String MouseY = "";
      int ch; char temp;
      ch = inputString.length();
      for (int i = 0; i < ch; i++) {
        temp = inputString.charAt(i);
        if (temp != '\n') {
          if (temp != ',') {
            if (Sign == 0) {
              MouseX += temp;
            }
            else {
              MouseY += temp;
            }
          }
          else {
            Sign = 1;
          }
        }
        else {
          //转换坐标系
          int x =  MouseX.toInt();
          int y =  MouseY.toInt();
          val1 = map(x, 0, 720, 0, 180) ;
          val2 = map(y, 10, 570, 0, 180);
          Sign = 0;//标志位归0
          break;
        }
      }
      myservo1.write(val1);
      delay_(500);
      myservo2.write(val2 );
      delay_(500);
      //lcd.setCursor(0, 0);          //设置液晶开始显示的指针位置,0列0行,人类理解的第一行
      //lcd.print(inputString);
      /*Serial.print( MouseX.toInt());
        delay(15);
        Serial.print('x');
        delay(15);
        Serial.println( MouseY.toInt());
        delay(15);*/
    }

    void setup() {
      // 初始化串口
      Serial.begin(9600);
      // 将inputString反转200个字符:
      inputString.reserve(200);
      myservo1.attach(9);
      myservo2.attach(6);
      //等待串口准备好
      while (!Serial);

       lcd.begin(16, 2);     //初始化LCD1602
       lcd.print("Welcome to use!"); //液晶显示Welcome to use!
       delay(1000);          //延时1000ms
       lcd.clear();          //液晶清屏
    }

    void loop() {

      // 如果缓存string接收完成:
      if (stringComplete) {
        // 清空String:
        inputString = "";
        stringComplete = false;
      }

        lcd.setCursor(0, 1);          //0列,1行,人类理解的第二行
        lcd.print("for LingShun Lab");
        delay_(1000);              //延时1000ms
        lcd.setCursor(0, 0);
        lcd.print("Good Job!   ");
        delay_(1000);                  //延时1000ms


    }

    /*
      SerialEvent在arduino板上的RX引脚收到数据时会被系统自动调用。在系统内部,它是在每次loop函数执行时连带执行的。因此如果再loop使用delay,serialEvent的调用也会被延迟,这样就有可能一次收到>=2个字符。
    */
    void serialEvent() {
      while (Serial.available()) {
        // 获取新的字符:
        char inChar = (char)Serial.read();
        if ((inChar < 48 || inChar > 57) && inChar != 10 && inChar != 44) {
          break;
        }
        // 将它加到inputString中:
        inputString += inChar;
        // 如果收到了换行符,就将变量设置为true
        if (inChar == '\n') {
          stringComplete = true;
          Change();
          inputString = "";
        }
      }
    }

    void delay_(int ms)//软件延时
    {
      for (int i = 0; i < ms; i++)
      {
        for (ulong j = 0; j < 1985; j++) NOP;
      }
    }


    订单号: 144382428888177774
    打赏作者鼓励一下!

    1人打赏

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

    本版积分规则

    热门推荐

    esp32作为智能主机使鱼缸内温度保持在28度种植水草
    esp32作为智能主机使鱼缸
    esp32作为智能主机使鱼缸内温度保持在28度种植水草, 设计原则, 一,使用我手上现有
    请大佬帮助如何分别控制两块pca9685上的舵机
    请大佬帮助如何分别控制两
    目前一块驱动板上的舵机可以分别控制分别是0到15号舵机,不清楚在级联的情况下如何分
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    [Arduino物联网开发实战4]天猫精灵控制1
    [Arduino物联网开发实战4]
    [md] 上一篇:(https://www.arduino.cn/thread-83175-1-1.html) blinker支持多种智
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表