今日热门

7

回答

我们知道在ino里面可用直接引用.h文件,不需要特别指定路径,但实际上,在不同路径下可能有同名的文件,arduino编译的时候也会提示使用的是哪个,但似乎不可控,我使用的时候,发现这种情况一般是改掉其中一个的名字,但改多了,自己也忘记了,有什么好一点的控制方法吗?

9604a3b72d92b876 2019-01-20 阅读:405

1

回答

最近在做一个光调制电路,我的想法是几个发光二极管发射同频率,但是不同相位的波(方波或者正弦波,最近不是arduino出了一个新单片机,可以发射出正弦波嘛),然后接受端采用arduino接受这几个发射出来的不同相位的波,现在就只接受如何分辨出不同相位的波,这一块的程序没有头绪,还望大家指点一二,在这谢谢了!(我的想法是利用红外的原理,采用定时器来实时采样,或者是用12位的ADC接收然后处理)发射代码: for(int i=0; i<10; i++){    digitalWrite(8, HIGH);             digitalWrite(9, LOW);             delayMicroseconds(5);    digitalWrite(9, HIGH);             digitalWrite(8, LOW);              delayMicroseconds(5);  }

小狗吃大白菜 2018-04-03 阅读:650

3

回答

  问题: 如何让这两份arduino代码合成为一份且能达到两份分别独立工作的效果?我有的开发板:UNO,mega2560,Due.  项目描述:目前再做一个用arduino作为主控的正弦波逆变器,第一部分电路用arduino产生占空比互补的两路Pwm通过驱动电路给Mosfet经过变压器实现dc12v to dc350v的效果,第二部分电路dc350v输入到由另外两路互补sin码pwm控制H桥逆变逆变电路,经过变压器滤波后出来一个波形很好的正弦波。两部分电路经过两份Pwm产生的代码仿真结果均达到预期结果。  问题描述: 目前有两份代码,第一份是用定时器控制9,10引脚输出电平相反的pwm波。如图   第二份是用定时器控制5,6引脚输出通过频率计算sin数组的pwm波,经过H桥逆变成为正弦波,如图但是两份代码好像都用到了定时器1,当他们一起工作时仅仅只有第5脚输出了之前单独测试的波形,因为本人水平有限,没能搞清这两份代码之间具体的冲突细节在哪,想请各位能够帮忙修改一下代码,使两份能合成为一份能输出4路电路需要的pwm波从而使电路能够正常工作达到12v直流电逆变为220v50Hz正弦交流电的目的​,开发板可以从我有的三种里任选(如果UNO满足不了硬件需要的话),如果实在不能用一个处理器来完成这些事的话能否采用双处理器的方式来完成?第一份代码#include <TimerOne.h> //#include "TimerOne.h" // include TimerOne.h #define low_battery_voltage 10.2 // define high battery voltage limit as 14.2 #define high_battery_voltage 14.4 // define low battery voltage limit as 10.2 int dutycycle = 0; // Initailize duty cylce variable as integer data type int sense_value =0; // Initialize sense_value variable to capture the adc reading of battery voltage (range from 0 to 1023) float battery_voltage = 0.0; // Initialize battery_voltage variable as a float data type to convert sense_value to actual battery voltage void battery_voltage_measurement() // battery_voltage_measurement function starts { sense_value = (analogRead(A0)); // read battery voltage on pin A0 & capture that value in sense_value variable // {warning - arduino pin accept only upto 5v so don't forget to map upper // battery volatge i.e 14.2v to 5v using voltage divider resistor network} battery_voltage = sense_value * (14.4/1023.0); // convert sense_value (0 to 1023) to range (0 to 14.2) if(battery_voltage < 14.4 && battery_voltage > 10.2) // if battery voltage is under limit i.e between 10.2 and 14.2 then dutycycle will be 150 { dutycycle = 512; } else if(battery_voltage < 10.2 || battery_voltage > 14.4) // if battery voltage is below 10.2v or above 14.2v , { dutycycle = 512; //set the duty cycle to 0 and inverter will go in cutoff mode } } // battery_voltage_measurement function ends void setup() // Setup function { pinMode (1,OUTPUT); // set pin 9 as an output pin for pwm pinMode (1,OUTPUT); // set pin 10 as an output pin for pwm Timer1.initialize(20000); // Initailize timer1 time period as 20 milli second (50 Hz frequency) Timer1.attachInterrupt(battery_voltage_measurement); // battery_voltage_measurement function will be executed every 20 milli second using timer 1 overflow interrupt TCCR1A = (TCCR1A & 0x0F) | 0xB0 ; // set pin 10 inverted of pin 9 } void loop() // loop function starts { Timer1.pwm(9,dutycycle,20000); // Timer1.pwm function takes argument as (pin no. , dutycycle , time period) Timer1.pwm(10,1023-dutycycle,20000); } // loop function ends第二份代码int i=0; int x=0; int OK=0; int sinPWM[]={1,2,5,7,10,12,15,17,19,22,24,27,30,32,34,37,39,42, 44,47,49,52,54,57,59,61,64,66,69,71,73,76,78,80,83,85,88,90,92,94,97,99, 101,103,106,108,110,113,115,117,119,121,124,126,128,130,132,134,136,138,140,142,144,146, 148,150,152,154,156,158,160,162,164,166,168,169,171,173,175,177,178,180,182,184,185,187,188,190,192,193, 195,196,198,199,201,202,204,205,207,208,209,211,212,213,215,216,217,219,220,221,222,223,224,225,226,227, 228,229,230,231,232,233,234,235,236,237,237,238,239,240,240,241,242,242,243,243,244,244,245,245,246,246, 247,247,247,248,248,248,248,249,249,249,249,249,250,250,250,250,249,249,249,249,249,248, 248,248,248,247,247,247,246,246,245,245,244,244,243,243,242,242,241,240,240,239,238,237,237,236,235,234, 233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,217,216,215,213,212,211,209,208,207,205,204, 202,201,199,198,196,195,193,192,190,188,187,185,184,182,180,178,177,175,173,171,169,168,166,164,162,160, 158,156,154,152,150,148,146,144,142,140,138,136,134,132,130,128,126,124,121,119,117,115,113,110,108,106, 103,101,99,97,94,92,90,88,85,83,80,78,76,73,71,69,66,64,61,59,57,54,52,49,47,44,42,39,37,34,32,30, 27,24,22,19,17,15,12,10,7,5,2,1}; //First value is 1 because we want to reduce the dead time betwen half cycles of sine signal. //To write the duty cycles we will use OCR0A and OCR0B for timer 0(pins 5 and 6), that means for one half cycle OCR0A will be equal with every component of vector myPWM and for other half cycle OCR0B will do that-see the post with Timer 0. //With the program below we generate phase correct signal at a 31372 Hz and 100 duty cycle(is between 0 and 255 on Timer 0). void setup() { pinMode(5, OUTPUT); pinMode(6,OUTPUT); cli();// stop interrupts TCCR0A=0;//reset the value TCCR0B=0;//reset the value TCNT0=0;//reset the value //0b allow me to write bits in binary TCCR0A=0b10100001;//phase correct pwm mode TCCR0B=0b00000001; //no prescaler TCCR1A=0;//reset the value TCCR1B=0;//reset the value TCNT1=0;//reset the value OCR1A=509;// compare match value TCCR1B=0b00001001; //WGM12 bit is 1 and no prescaler TIMSK1 |=(1 << OCIE1A); sei();// enable interrupts } ISR(TIMER1_COMPA_vect){// interrupt when timer 1 match with OCR1A value if(i>313 && OK==0){// final value from vector for pin 6 i=0;// go to first value of vector OK=1;//enable pin 5 } if(i>313 && OK==1){// final value from vector for pin 5 i=0;//go to firs value of vector OK=0;//enable pin 6 } x=sinPWM[i];// x take the value from vector corresponding to position i(i is zero indexed) i=i+1;// go to the next position if(OK==0){ OCR0B=0;//make pin 5 0 OCR0A=128;//enable pin 6 to corresponding duty cycle } if(OK==1){ OCR0A=0;//make pin 6 0 OCR0B=128;//enable pin 5 to corresponding duty cycle } } void loop() { }

劳特伦 2017-08-08 阅读:1405

3

回答

我想在arduino编程中获得蓝牙此时的rssi值,然后赋给一个数,拿来调用完成相应的命令,怎么获取这个rssi值,有什么库文件吗?还是怎么办?谢谢啦

mingming 2017-07-18 阅读:1352

4

回答

有的话分享下吧

灵澈 2017-05-15 阅读:737

3

回答

 arduino nano驱动在哪里安装 

大老张1 2017-04-12 阅读:795

1

回答

 为什么Vortex每次都上传失败 

香龙十八 2017-04-10 阅读:407

1

回答

为什么Vortex固件更新不了

香龙十八 2017-04-10 阅读:486

2

回答

大家好,请问,用arduino怎样把十六进制的高低八位合并?(ps:能转换成十进制就更好了)

英雄本色 2017-04-10 阅读:1866

11

回答

各位下午好,请教一下,串口TTL通讯协议(9600,校验位,无,停止位,1位)数据传输周期:8s   我的串口监视器一直显示h,不知道问题是什么,请帮我看看

dalongge 2017-04-06 阅读:833

8

回答

 安装 wido驱动后提示:

英雄本色 2017-04-06 阅读:1055

3

回答

 请教,getAverageValue()需要加载什么库? 

晴川雨何 2017-04-06 阅读:513

4

回答

大神出来聊聊: RPLIDAR A2 360°激光雷达,能不能输出数据到arduino上?或者说arduino能跟得上吗?

8ado 2017-04-05 阅读:2004

5

回答

CurieIMU.h  这个库是Arduino自带的吗   为什么编译的时候显示没有这个库 

taiji 2017-04-05 阅读:2289

2

回答

 vortex为啥固件更新不了 

8ado 2017-03-27 阅读:561

0

回答

 有哪位大神知道ROS下,节点和arduino,pwm控制电机不 ,或者哪边有资料提供的,或者指点一两句的,我自己找没找到合适的。

meili 2017-01-09 阅读:631

3

回答

谁有sht11/5的程序,求大神们给我一份,最好附加库

wuhoudezhenyu 2016-06-12 阅读:817

0

回答

#include    //舵机控制库 #include DistanceSRF04 Dist; int distance; int EN2 = 14;   int EN3 = 15; int EN4 = 16; int EN5 = 17; int inputPin = 9;  // 定義超音波信號接收腳位 int outputPin =8;  // 定義超音波信號發射腳位 int EA = 3; int EB = 5; int lkf; Servo myservo;        // 設 myservo int directionn = 0;   // 前=8 後=2 左=4 右=6  int distanceL=0; int distanceF=0; int distanceR=0; int Fgo = 8;         // 前進 int Rgo = 6;         // 右轉 int Lgo = 4;         // 左轉 int Bgo = 2;         // 倒車 /////////////////////////////////////// void ting(void)         {           analogWrite(EA,0);           analogWrite(EB,0);            digitalWrite(EN2,LOW);              digitalWrite(EN3,LOW);           digitalWrite(EN4,LOW);              digitalWrite(EN5,LOW);                }          void qian(void)         {            analogWrite(EA,254);//调节参数可调速度(0-255)           analogWrite(EB,255);//调节参数可调速度(0-255)                digitalWrite(EN2,HIGH);           digitalWrite(EN3,LOW);           digitalWrite(EN4,HIGH);           digitalWrite(EN5,LOW);          } void hou(void)         {                   analogWrite(EA,255);//调节参数可调速度(0-255)           analogWrite(EB,255); //调节参数可调速度(0-255)            digitalWrite(EN2,LOW);           digitalWrite(EN3,HIGH);           digitalWrite(EN4,LOW);           digitalWrite(EN5,HIGH);                     } void zuo(void)         {                   analogWrite(EA,150);//调节参数可调速度(0-255)           analogWrite(EB,150); //调节参数可调速度(0-255)           digitalWrite(EN2,HIGH);           digitalWrite(EN3,LOW);           digitalWrite(EN4,LOW);           digitalWrite(EN5,HIGH);               }         void you(void)         {                   analogWrite(EA,150);//调节参数可调速度(0-255)           analogWrite(EB,150); //调节参数可调速度(0-255)           digitalWrite(EN2,LOW);           digitalWrite(EN3,HIGH);           digitalWrite(EN4,HIGH);           digitalWrite(EN5,LOW);         }   void ask_pin_F()   // 量出前方距離      {       myservo.write(90);       digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs       delayMicroseconds(2);       digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs       delayMicroseconds(10);       digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓       float Fdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間       Fdistance= Fdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)       Serial.print("F distance:");      //輸出距離(單位:公分)       Serial.println(Fdistance);         //顯示距離       distanceF= Fdistance;              // 將距離 讀入Fspeedd(前速)     }   void ask_pin_L()   // 量出左邊距離      {       myservo.write(5);       delay(100);       digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs       delayMicroseconds(2);       digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs       delayMicroseconds(10);       digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓       float Ldistance = pulseIn(inputPin, HIGH);  // 讀差相差時間       Ldistance= Ldistance/5.8/10;       // 將時間轉為距離距离(單位:公分)       Serial.print("L distance:");       //輸出距離(單位:公分)       Serial.println(Ldistance);         //顯示距離       distanceL = Ldistance;              // 將距離 讀入Lspeedd(左速)     }   void ask_pin_R()   // 量出右邊距離      {       myservo.write(177);       delay(100);       digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs       delayMicroseconds(2);       digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs       delayMicroseconds(10);       digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓       float Rdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間       Rdistance= Rdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)       Serial.print("R distance:");       //輸出距離(單位:公分)       Serial.println(Rdistance);         //顯示距離       distanceR = Rdistance;              // 將距離 讀入Rspeedd(右速)     }   void detection()        //測量3個角度(0.90.179)     {             int delay_time = 250;   // 伺服馬達轉向後的穩定時間       ask_pin_F();            // 讀取前方距離           if(distanceFdistanceR)   //假如 左邊距離大於右邊距離         {          directionn = Rgo;      //向右走         }                  if(distanceL

zjz000 2016-02-05 阅读:1726

8

回答

  买了一块因特尔伽利略板,据说这个板和ARDUINO很像 测试了一下眨眼,导入后板上的小灯根本不闪 然后直接用LED灯接地,连13数字接口也不闪;而且除了GND以外的接口,其他接口都是高电平输出?一接LED灯直接亮了,这事怎么回事呢?

GBL阿尔塞斯 2015-12-27 阅读:1611
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

问题达人换一批

本月问答

排名
用户名
问答积分
< 123 >