查看: 303|回复: 9

ESP8266烧录后不运行 烧录示例示例程序没问题 20元有偿解决

[复制链接]

该用户从未签到

发表于 2019-7-29 09:05 | 显示全部楼层 |阅读模式



#include <stdlib.h>
#include <Wire.h>
#include "Adafruit_MCP23017.h"
#include <Servo.h>    // 声明调用舵机Servo.h库
#include <stdio.h>
#include <assert.h>
#define er 111
#define san 1
#define si 2
#define wu 3
#define liu 4
#define qi 5
#define ba 6
#define jiu 7



#define fuwei 88
#define qieguan 77
#define songliao 55
#define duoji 66
#define PUL 87//脉冲
#define latchPin 100
#define clockPin 101
#define dataPin 111 //这里定义移位寄存器三个脚
char DIR = 1;  //步进方向
int steps = 480               ; //步进次数
int weimiao = 5; //步进速度
unsigned char data = 0;//定义了一个字节用于IO扩展
int bushu=66;//步进电机拉料步数
int yuliaobushu = 3;//步进电机余料步数
int yuliaobushu2 = 10;//步进电机余料步数
char duanliao = 1;  //短料判断
char qiting = 0;   //启动/停止

long numdata[4]={0,0,0,0};  //record value
String recData = "";  //recording received data from upper machine
int mark = 0;
char dat[64]="";
int curSetData = 0;
double chuankou;
float  chuankou1 =22.22;
String ceshi = "456.1A3";
char* b="A12.34";
char* a;

Adafruit_MCP23017 mcp;
Servo myservo;        // 创建一个舵机对象
//int pos = 0;          // 变量pos用来存储舵机位置
int zhidingjiaodu = 100;          // 变量jiaodu用来指定舵机转动位置
int duojifuwei = 0;          // 舵机复位角度
int duojisudu = 10;          // 舵机速度


void setup ()
{


  Serial.begin(9600);
  //Wire.begin(4,5);
  myservo.attach(9);  // 将引脚9上的舵机与声明的舵机对象连接起来
//    pinMode(2, OUTPUT); //前推气夹
//    pinMode(3, OUTPUT); //主电机
//    pinMode(4, INPUT ); //步进电机复位接近开关
//    pinMode(5, OUTPUT); //拔料气缸
//    pinMode(6, OUTPUT); //步进电机脉冲引脚
//    pinMode(7, OUTPUT); //步进电机方向
//    pinMode(8, INPUT); //检测料接近开关
//    pinMode(9,OUTPUT); //舵机引脚  



// /*
  mcp.begin(); //使用默认地址0(第一个从站)
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT); //让三个脚都是输出状态
  pinMode(fuwei,INPUT);
  pinMode(53,OUTPUT);

  mcp.pinMode(0, OUTPUT); //前推气夹
  mcp.pinMode(san, OUTPUT); //主电机
  mcp.pinMode(si, INPUT ); //步进电机复位接近开关
  mcp.pullUp(si, HIGH);//在内部打开100K上拉
  mcp.pinMode(wu, OUTPUT); //拔料气缸
   mcp.pinMode(liu, OUTPUT); //步进电机脉冲引脚
  mcp.pinMode(qi, OUTPUT); //步进电机方向
  mcp.pinMode(ba, INPUT); //检测料接近开关
  mcp.pullUp(ba, HIGH);//在内部打开100K上拉
  mcp.pinMode(jiu,OUTPUT); //舵机引脚  

  //*/
  mcp.digitalWrite(san, HIGH);//停止电机
  mcp.digitalWrite(er, HIGH);
  mcp.digitalWrite(wu, HIGH);
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
//serial_get();
//if(qiting){
//zhuchengxu();
//}
delay(1000);

  mcp.digitalWrite(0, HIGH);
  digitalWrite(LED_BUILTIN, HIGH);

  delay(1000);
digitalWrite(LED_BUILTIN, LOW);
  mcp.digitalWrite(0, LOW);
}





void zhuchengxu(){
    duanliao = 0;
    if(!mcp.digitalRead(ba)) duanliao = 1;         //短料判断
        mcp.digitalWrite(er, LOW);//前推夹紧
        mcp.digitalWrite(wu,  HIGH);//压料气缸释放
        mcp.digitalWrite(san, LOW);//启动电机
    while(mcp.digitalRead(si)){
         duoji1();
         bujin(1);
      }

        mcp.digitalWrite(san, HIGH);//停止电机
        mcp.digitalWrite(wu, LOW);//压料气缸夹紧
        mcp.digitalWrite(er, HIGH);//前推释放
        for(int i=0;i<bushu;i++){               //

          if(!mcp.digitalRead(ba) && duanliao == 0) {

                  mcp.digitalWrite(er, LOW);//前推夹紧
                  mcp.digitalWrite(wu,  HIGH);//压料气缸释放
                  mcp.digitalWrite(san, LOW);//启动电机
              while(mcp.digitalRead(si)){
                   duoji1();
                   bujin(1);
                }

                  mcp.digitalWrite(san, HIGH);//停止电机
                  mcp.digitalWrite(wu, LOW);//压料气缸夹紧
                  mcp.digitalWrite(er, HIGH);//前推释放

            for(int i=0;i<yuliaobushu;i++){            
              bujin(0);
              }
            duanliao = 0;                        //短料复位
            break;
            }
     mcp.digitalWrite(qi, LOW);                              //控制步进电机方向
                //io(6,DIR);                              //控制步进电机方向
    for(int i=0;i<480;i++){                                   //steps代表走多少次细分(行程)
      mcp.digitalWrite(liu, HIGH);                              //逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
  //delay(1);                              //延时1毫秒
  delayMicroseconds(weimiao);
      mcp.digitalWrite(liu, LOW);
  //delay(1);                              //延时一毫秒
  //delayMicroseconds(weimiao);
        }

  }
             mcp.digitalWrite(er, LOW);//前推夹紧
             mcp.digitalWrite(wu,  HIGH);//压料气缸释放
  }






//将字符串转换为数字
void zhuanhuan(){                 
          for(int i = 1; i<recData.length(); i++){

                recData[i-1] = recData;

            }
  }





//串口接收并解析命令函数
void serial_get(){   
    while (Serial.available() > 0)
  {
    recData += char(Serial.read());
    delay(2);  
    mark = 1;
  }

if (mark == 1)
  {
      if (recData[0] == 'A')
        {

         Serial.println(chuankou1);
        chuankou1 =0;

            zhuanhuan();
            steps = 20*recData.toFloat();  //此处将mm单位转化为脉冲
            //Serial.println(recData);
            Serial.println(steps);
        }
     else if (recData[0] == 'B')
        {
           zhuanhuan();
            zhidingjiaodu = recData.toFloat();  //给舵机赋角度值
           // Serial.println(recData);
            Serial.println(zhidingjiaodu);

        }
      else if (recData[0] == 'C')
        {
            zhuanhuan();
            duojisudu = recData.toFloat();  //给舵机赋速度值
            //Serial.println(recData);
            Serial.println(duojisudu);
        }
      else if (recData[0] == 'D')
        {
            qiting = 1;
            Serial.println(qiting);
        }

      else if (recData[0] == 'E')
        {
            qiting = 0;
            Serial.println(qiting);
        }
  recData = String("");
    mark = 0;
      }
    }
/*
     if(comdata[0] == 'A')
      {

        Serial.println("判断成功");
        Abujin[0]=atoi(comdata[1]);

        Abujin[0]=(comdata[1] - '0');//在此把comdata转化成INT型数值,以备后续使用
        Serial.println(Abujin[0]);
        comdata = "";//  必须在此把comdata设为空字符,否则会导致前后字符串叠加
*/


void duoji1(){
   for(int pos = 0; pos < zhidingjiaodu; pos++){    // 舵机从0°转到180°,每次增加1°         
     myservo.write(pos);           // 给舵机写入角度   
      delay(duojisudu);  // 延时速度

      //if(qieguan==LOW) return;
    }
    myservo.write(0);//舵机的复位角度
}


  //void duoji1(){
//  for(pos = 0; pos < 270; pos += 1){    // 舵机从0°转到180°,每次增加1°         
// myservo.write(pos);           // 给舵机写入角度   
//delay(8);                    // 延时15ms让舵机转到指定位置
//if(qieguan==LOW) return;
//}
//}




void bujin(int DIR){
   mcp.digitalWrite(qi, DIR);                              //控制步进电机方向
                //io(6,DIR);                              //控制步进电机方向
    for(int i=0;i<steps;++i){                                   //steps代表走多少次细分(行程)
      mcp.digitalWrite(0, HIGH);                              //逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
  delay(100);                              //延时1毫秒
  //delayMicroseconds(20);
      mcp.digitalWrite(0, LOW);
  //delay(1);                              //延时一毫秒
  //delayMicroseconds(weimiao);
      }
}


//void bujin(int DIR){
//  io(6,DIR);//控制步进电机方向
//    for(int i=0;i<steps;++i){
//  digitalWrite(PUL,HIGH);//逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
//  delayMicroseconds(weimiao);
//  digitalWrite(PUL,LOW);
//  delayMicroseconds(weimiao);
//      }
//}

unsigned char bit_set(unsigned char *p_data, unsigned char position, int flag)
{
  if (flag == 1)
  {
    *p_data |= (1 << (position - 1));//0000 0010或0000 0001
  }                                   // 0000 0011
  else if (flag == 0)
  {
    *p_data &= ~(1 << (position - 1));//0000 0010&1111 1110
  }                                    // 0000 0010
  return *p_data;
}
void io(unsigned char position, int flag){
     digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
     shiftOut(dataPin,clockPin,MSBFIRST,bit_set(&data,position,flag));
     digitalWrite(latchPin,HIGH); //将ST_CP这个针脚恢复到高电平
}

// Serial.println(bit_set(&data,1,1));
  //  io(2,1);
/*
unsigned char bit_set(unsigned char *p_data, unsigned char position, int flag)
{
    int a = 1<<(position-1);
    if (flag)
    {
        *p_data |= a;
    }
    else
    {
        *p_data &= ~a;
    }
    return *p_data;
}
*/




/*
    while(mcp.digitalRead(2)){                  //步进电机复位

    bujin(LOW);
    if(!mcp.digitalRead(6)){
    mcp.digitalWrite(0, HIGH);//前推夹紧
    mcp.digitalWrite(1, HIGH);//启动电机
         for(int i=0;i<yuliaobushu;i++){
    duoji1();
    bujin(1);

      }
    mcp.digitalWrite(1, LOW);//停止电机
    mcp.digitalWrite(3, HIGH);//压料气缸夹紧
    mcp.digitalWrite(0, LOW);//前推释放

        for(int i=0;i<yuliaobushu2;i++){
    bujin(LOW);

      }
   }


}
*/



    /*
void zhuchengxu(){

    mcp.digitalWrite(0, HIGH);//前推夹紧

    mcp.digitalWrite(1, HIGH);//启动电机

    for(int i=0;i<bushu;i++){
    duoji1();
    bujin(1);
  }

    mcp.digitalWrite(1, LOW);//停止电机

    mcp.digitalWrite(3, HIGH);//压料气缸夹紧
    mcp.digitalWrite(0, LOW);//前推释放
    while(mcp.digitalRead(2)){                  //步进电机复位

    bujin(LOW);
    if(!mcp.digitalRead(6)){
    mcp.digitalWrite(0, HIGH);//前推夹紧
    mcp.digitalWrite(1, HIGH);//启动电机
         for(int i=0;i<yuliaobushu;i++){
    duoji1();
    bujin(1);

      }
    mcp.digitalWrite(1, LOW);//停止电机
    mcp.digitalWrite(3, HIGH);//压料气缸夹紧
    mcp.digitalWrite(0, LOW);//前推释放

        for(int i=0;i<yuliaobushu2;i++){
    bujin(LOW);

      }
   }


}





   // io(2,1);//前推夹紧
   // io(3,1);//启动电机
   // io(3,0);//停止电机
   // io(5,1);//压料气缸夹紧
   // io(2,0);//前推释放
   //while(fuwei!=LOW){
   //   bujin(0);
   //   }
   // io(2,1);//前推夹紧
   // io(5,0);//手指气缸释放


  }



  //串口接收并解析命令函数
void serial_get(){   
    while (Serial.available() > 0)
  {
    recData += char(Serial.read());
    delay(2);  
    mark = 1;
  }
         //     Serial.println(ceshi);
            //  Serial.println(chuankou1);
           //  chuankou1 = ceshi.toFloat();
           //  Serial.println(ceshi);
           //     Serial.println(chuankou1);
if (mark == 1)
  {
      if (recData[0] == 'A')
        {
//            Serial.println(ceshi);
//           chuankou1 = ceshi.toFloat();
//                Serial.println(a);
//                Serial.println("MCU:"+recData);
         // chuankou  = atof(recData);
//         chuankou1 = atof(b);
        //  changdu = 0;          //从新写入前归零

         Serial.println(chuankou1);
        chuankou1 =0;


          for(int i = 1; i<recData.length(); i++){

          //  AA = Abujin[5]*1000 + Abujin[4]*1000 + Abujin[3]*1000 + Abujin[2]*100 + Abujin[1]*10 + Abujin[0]*1;
              //changdu += recData;
             // changdu += (comdata[1] - '0');//在此把comdata转化成INT型数值,以备后续使用
            // Serial.println(chuankou1);
            // Serial.println(recData);
                // chuankou  = atof("123.12");
               // Serial.println(chuankou);

                recData[i-1] = recData;

            }
            steps = 20*recData.toFloat();  //此处将mm单位转化为脉冲
            Serial.println(recData);
            Serial.println(steps);
        }
     else if (recData[0] == 'B')
        {

        }
      else if (recData[0] == 'C')
        {

        }
      else if (recData[0] == 'D')
        {

        }
  recData = String("");
    mark = 0;
      }
    }
*/

  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-7-29 15:50 | 显示全部楼层

    回帖奖励 +1 金币

    有的端口是不存在的。请你了解8266引脚有哪些之后,再换一个使用。
    你今天的打赏,是我明天学习Arduino的动力!
  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-7-29 16:28 | 显示全部楼层
    IMG_20190729_162538.jpg
    esp8266只有这些端口可用:
    0,1,2,3,4,5,12,13,14
    你的程序调用了不存在的端口,所以才会导致程序无法运行
    你今天的打赏,是我明天学习Arduino的动力!

    该用户从未签到

     楼主| 发表于 2019-7-29 20:17 | 显示全部楼层
    Creeper666 发表于 2019-7-29 16:28
    esp8266只有这些端口可用:
    0,1,2,3,4,5,12,13,14
    你的程序调用了不存在的端口,所以才会导致程序无法运行 ...

    我并没有用ESP8266的引脚  我用的MCP23017 IO扩展芯片  看我的调用是mcp.digitalWrite(0, HIGH);
    同时也测试自带的引脚 发现没反应  用UNO板验证 正常运行

    该用户从未签到

     楼主| 发表于 2019-7-29 20:18 | 显示全部楼层
    Creeper666 发表于 2019-7-29 15:50
    有的端口是不存在的。请你了解8266引脚有哪些之后,再换一个使用。

    我并没有用ESP8266的引脚  我用的MCP23017 IO扩展芯片  看我的调用是mcp.digitalWrite(0, HIGH);
    同时也测试自带的引脚 发现没反应  用UNO板验证 正常运行
  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-7-29 21:24 | 显示全部楼层
    哦哦..
    那扩展芯片你连在哪个端口?
    最好拍一张照片
    你今天的打赏,是我明天学习Arduino的动力!

    该用户从未签到

     楼主| 发表于 2019-7-29 23:58 | 显示全部楼层
    Creeper666 发表于 2019-7-29 21:24
    哦哦..
    那扩展芯片你连在哪个端口?
    最好拍一张照片

    SCL连D1(gpio5)
    SDA连D2(gpio4)
    用NodeMCU和wemos D1开发板得到同样的结果不知道是不是寨板的原因 从新买的安信可官方店NodeMCU在路上

    该用户从未签到

     楼主| 发表于 2019-7-30 00:01 | 显示全部楼层
    Creeper666 发表于 2019-7-29 21:24
    哦哦..
    那扩展芯片你连在哪个端口?
    最好拍一张照片

    这里有一个坑  唯独ESP8266连接23017 的I2C需要都串上电阻才工作
  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-7-30 08:24 | 显示全部楼层
    你的舵机部分,

    myservo.attach(9);  

    这个是连到开发板的吧?
    开发板上没有9号端口哦
    你今天的打赏,是我明天学习Arduino的动力!

    该用户从未签到

     楼主| 发表于 2019-7-30 12:38 | 显示全部楼层
    Creeper666 发表于 2019-7-30 08:24
    你的舵机部分,

    myservo.attach(9);  

    这个是连UNO测试时用的 整个8266只用 23017的代码  现在的问题是8266没任何反应 我把不是8266的代码注释都没用  
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    一直显示'Serial' was not declared in this scope,求前辈解答谢谢
    一直显示'Serial'
    做了一个温控装置的蓝牙模块时遇到的问题,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(97)---0.96寸OLED液晶屏
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    教你让OLED动起来!多重字符串版!
    教你让OLED动起来!多重字
    大家都知道:arduino单片机是单线程的 而上次教程中的多段字符串的运行速度必须一致
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表