NANO遥控器

  • NANO引脚分配
  • LED指示灯
  • 遥控器外壳
  • 遥控器代码
  • 接收机代码

寒假无聊,在家里整了个航模遥控器。遥控器的代码大体算是完成了,但略显粗糙,计划写个蓝牙软件对这个遥控器进行调参,开学了,就没整软件。
接收机的代码写的也差不多了,我自己只试过无刷电调的单向驱动,还不错。双向电调家里边没有,所以双向电调的对中信号也没算出来。

NANO引脚分配

左遥杆 X轴Y轴 A0,A1
右遥杆 X轴Y轴 A2,A3
OLED屏幕 SDA SCL A4,A5
电位器1,2 A6,A7
电容触摸按键 2自锁2点动 D2,D3,D4,D5
指示灯LED PWM输出 D6
二段开关 D7,D8
NRF24L01P引脚 D9,D10,D11,D12,D13
蓝牙串口 RX0,TX1

LED指示灯

指示灯我用的是共阳极的三色LED,之前,我还不知道有2812这种好东西 o(0…0)o ,所以就自己整了个电路

由于NANO只剩一个6号io口,使用6号口的pwm,利用LM339电压比较器将电压分开,对LED分开控制;
下边是LM339接线图;
但实际接线过程中,不懂什么原理,1.2-2.5v那一栏是没有用的,而且直接用直流电源接输入端与用方波信号输入出现不同的结果,不知哪位大神能解答一下
但这些问题不影响使用,只用了两个状态

遥控器外壳






遥控器代码

遥控器的代码大体算完成,不改也能直接使用,但推荐按实际情况修改。

/*THE ZG NANO遥控器by 微风萧萧引脚分配:A0 A1 A2 A3 遥杆4通道 A5 A6 OLED液晶屏SCL SDAA7 A8 电位器1 电位器2D2 D3 D4 D5 4触摸按键 2自锁 2点动D6 PWM LED 输出D7 D8 二段开关 SW1 SW2nrf24l01p:CE  -> D9  CSN -> D10  MOSI -> D11   MISO -> D12SCK -> D13 IRQ -> \  VCC  -> 3.3V GND  -> GND*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <U8g2lib.h>
#include <Wire.h>U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);
static const unsigned char PROGMEM bitmap[] ={      //59*31
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x7F,0x00,0x00,0x7F,0x00,0x00,0x80,0xFF,0x7F,0x00,0xC0,0xFF,0x00,
0x00,0xF8,0xFF,0x7F,0x00,0xE0,0xFF,0x00,0x00,0xF8,0x7F,0xFC,0x00,0xF8,0xF7,0x00,
0x00,0xF8,0x01,0x7E,0x00,0xFC,0xE1,0x00,0x00,0x00,0x00,0x3F,0x00,0x7E,0x00,0x00,
0x00,0x00,0x80,0x1F,0x00,0x3F,0x00,0x00,0x00,0x00,0xC0,0x0F,0x80,0x0F,0x00,0x00,
0x00,0x00,0xE0,0x07,0xC0,0x07,0x00,0x00,0x00,0x00,0xF8,0x03,0xE0,0x03,0x00,0x00,
0x00,0x00,0xFC,0x00,0xE0,0x01,0xFC,0x00,0x00,0x00,0x7E,0x00,0xF0,0x81,0xFF,0x00,
0x00,0x00,0x3F,0x00,0xF0,0xF0,0xFF,0x01,0x00,0x00,0x1F,0x00,0x78,0xF8,0xFF,0x01,
0x00,0xC0,0x0F,0x00,0x78,0xF8,0xF3,0x00,0x00,0xE0,0x07,0x00,0x3C,0x78,0xF8,0x00,
0x00,0xF8,0x03,0x00,0x3C,0x00,0xF8,0x00,0x00,0xFC,0x00,0x00,0x3C,0x00,0x7C,0x00,
0x00,0x7E,0x00,0x3C,0x3C,0x00,0x3E,0x00,0x00,0x3F,0x00,0x3E,0x3C,0x00,0x3F,0x00,
0x80,0x1F,0x80,0x3F,0x7C,0x80,0x1F,0x00,0xC0,0x0F,0xF0,0x1F,0xFC,0xE0,0x0F,0x00,
0xE0,0xFF,0xFF,0x07,0xF8,0xF9,0x07,0x00,0xF0,0xFF,0xFF,0x03,0xF8,0xFF,0x01,0x00,
0xF0,0xFF,0x7F,0x00,0xF0,0xFF,0x00,0x00,0xF8,0xFF,0x07,0x00,0xC0,0x1F,0x00,0x00,
0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
static const unsigned char PROGMEM bitmapa[] ={0x0C,0x1D,0x27,0x36,0x1C,0x1C,0x36,0x27,0x1D,0x0C};   // 蓝牙图标6*9RF24 radio(9, 10); // CE, CSN
const byte address[6] = "zg111"; //定义通讯地址struct Signal {byte vlx;byte vly;byte vrx;byte vry;byte potentialA;      //电位器abyte potentialB;      //电位器bbyte switchA;         //开关a   ------>F->1001   B->1110byte switchB;          //开关b   ------>O->1011   X->1100byte touchA;          //触摸开关a  ------>NL->1010   LI->1000byte touchB;          //触摸开关b  ------>NL->1111   LI->0000
};
Signal data;int SWC1,SWC2,SWC3,SWC4;
int SW5,SW6;            //系统操作按键
int cont1,cont2,cont3,cont4;        //按键消抖中间变量
int mode;   //系统模式更换变量 mode=0 操作模式 mode=1设置模式
int ym;     //oled页面变量 ym=1,2,3
int Bluetooh;  //蓝牙开启,默认开启
char sreialData; // 储存蓝牙指令void page1() {u8g2.setFont(u8g2_font_timB18_tf);u8g2.setFontPosTop();u8g2.setCursor(2,2);u8g2.print("THE ZG");u8g2.drawHLine(1,21,126); //直线 (x,y,长度)u8g2.setFont(u8g2_font_helvR08_tf);u8g2.setFontPosTop();u8g2.drawFrame(1,23,78,22); //矩形框 (起点x,起点y,长,宽)u8g2.setCursor(2,24);u8g2.print("LX:");u8g2.setCursor(18,24);u8g2.print(data.vlx);u8g2.setCursor(40,24);u8g2.print("RX:");u8g2.setCursor(57,24);u8g2.print(data.vrx);u8g2.setCursor(2,34);u8g2.print("LY:");u8g2.setCursor(18,34);u8g2.print(data.vly);u8g2.setCursor(40,34);u8g2.print("RY:");u8g2.setCursor(57,34);u8g2.print(data.vry);u8g2.setCursor(2,45);u8g2.print("ReU:");u8g2.setCursor(26,45);u8g2.print(data.potentialA);u8g2.setCursor(48,45);u8g2.print("RxD:");u8g2.setCursor(73,45);u8g2.print(data.potentialB);u8g2.setCursor(85,24);u8g2.print("SW1:");     //-------------------------if (SWC1 == 1) {u8g2.setCursor(112,24);u8g2.print("F");} else {u8g2.setCursor(112,24);u8g2.print("B");}u8g2.setCursor(85,34);u8g2.print("SW2:");     //----------------------if (SWC2 == 1) {u8g2.setCursor(112,34);u8g2.print("X");} else {u8g2.setCursor(112,34);u8g2.print("O");}u8g2.setCursor(94,44);u8g2.print("S3:");      //----------------------if (SWC3 == 1) {u8g2.setCursor(112,44);u8g2.print("T");} else {u8g2.setCursor(112,44);u8g2.print("K");}u8g2.setCursor(94,54);u8g2.print("S4:");      //----------------------if (SWC4 == 1) {u8g2.setCursor(112,54);u8g2.print("R");} else {u8g2.setCursor(112,54);u8g2.print("C");}u8g2.setFont(u8g2_font_ncenR08_tf); u8g2.setFontPosTop();u8g2.setCursor(2,54);u8g2.print("[Back]");      //----------------------
}
void page2() {u8g2.drawXBMP(34, 2, 59, 31, bitmap);u8g2.setFont(u8g2_font_helvR08_tf);u8g2.setFontPosTop();if(Bluetooh ==1){ u8g2.drawXBMP(120, 2, 6, 10, bitmapa);}else{ u8g2.setCursor(120,2);u8g2.print("  ");}if(mode ==1){  u8g2.setCursor(2,42);u8g2.print("Setup"); }else if(mode ==0){ u8g2.setCursor(2,42);u8g2.print("Operation");}u8g2.setFont(u8g2_font_ncenR08_tf); u8g2.setFontPosTop();u8g2.setCursor(2,54);u8g2.print("[Select]"); u8g2.setCursor(80,54);u8g2.print("[DataSita]");
}
void page3() {u8g2.setFont(u8g2_font_timB18_tf);u8g2.setFontPosTop();u8g2.setCursor(2,2);u8g2.print("THE ZG");u8g2.drawHLine(1,21,126); //直线 (x,y,长度)u8g2.setFont(u8g2_font_helvR08_tf);u8g2.setFontPosTop();u8g2.setCursor(44,24);u8g2.print("Sorry,"); u8g2.setCursor(12,34);u8g2.print("no time,come out, OK"); u8g2.setCursor(5,44);u8g2.print(">"); if (Bluetooh ==1){u8g2.setCursor(12,44);u8g2.print("Turn off the Bluetooth?"); }else if(Bluetooh ==0 ){u8g2.setCursor(12,44);u8g2.print("Turn on the Bluetooth?");}u8g2.setFont(u8g2_font_ncenR08_tf); u8g2.setFontPosTop();u8g2.setCursor(2,54);u8g2.print("[Back]"); u8g2.setCursor(102,54);u8g2.print("[OK]");
}void setup(){radio.begin();radio.openWritingPipe(address);// 写入地址radio.setPALevel(RF24_PA_MIN); //小功率radio.stopListening();  //nrf24l01设为发射模式Serial.begin(9600);   //打开串口接收蓝牙数据u8g2.begin();u8g2.enableUTF8Print();pinMode(6, OUTPUT);     //led指示灯pinMode(7, INPUT);      //通道开关1pinMode(8, INPUT);       //通道开关2pinMode(2, INPUT);pinMode(3, INPUT);       //通道开关3pinMode(4, INPUT);pinMode(5, INPUT);        //通道开关4mode=0;ym=2;cont1 = HIGH;cont2 = HIGH;cont3 = HIGH;cont4 = HIGH;Bluetooh = 1;    //开启蓝牙  =0时关闭串口接收if (analogRead(A6)>20||analogRead(A7)>20){    //检测电位器初始值,不为零时led提示for(int i=0;i<3;i++){analogWrite(6,0);//led闪烁3次delay(500);analogWrite(6,250);delay(500);}} else{digitalWrite(6,0);//led闪烁1次delay(500);digitalWrite(6,250);}
}int chValue(int val, int lower, int middle, int upper)
{val = constrain(val, lower, upper);     //将val限制在lower~upper范围内if ( val < middle )val = map(val, lower, middle, 0, 127);elseval = map(val, middle, upper, 128, 255);return val;
}void loop(){SW5 = digitalRead(2);SW6 = digitalRead(4);if( Bluetooh == 1){if (Serial.available() > 0) {delay(5);sreialData = Serial.read();if (sreialData == 'S') {    //设置模式mode=1; digitalWrite(6,0);} else if (sreialData == 'P') { //操作模式mode = 0;digitalWrite(6,255);} else if (sreialData == 'M') {  //页面1ym=1;} else if (sreialData == 'U') {   //页面2ym=2;}else if (sreialData == 'N') {   //页面3ym=3;}delay(4);Serial.println(sreialData);}}if(SW5 == 1&&SW6 == 1&&cont3==HIGH){delay(5);if(mode==0){delay(10);mode = 1 ;digitalWrite(6,0);} else if(mode==1){delay(10);mode =0;digitalWrite(6,255);}}else if(SW5 == 0&&SW6 == 0&&cont3==LOW){delay(5);cont3 = !cont3;}if(mode ==0){SWC1 = digitalRead(7);SWC2 = digitalRead(8);SWC3 = digitalRead(3);SWC4 = digitalRead(5);data.vlx =255- chValue(analogRead(A0), 150, 478, 900);data.vly = chValue(analogRead(A1), 140, 505, 910);data.vrx = chValue(analogRead(A2), 160, 492, 900);data.vry =255- chValue(analogRead(A3), 140, 513, 910);data.potentialA = map(analogRead(A6),0, 1023, 0, 255); data.potentialB = map(analogRead(A7),0, 1023, 0, 255); if(SWC1 ==1){ data.switchA = 1001 ;}else{data.switchA = 1110 ;}if(SWC2 ==1){ data.switchB = 1100 ;}else{data.switchB = 1011 ;}if(SWC3 ==1){ data.touchA = 1000 ;}else{data.touchA = 1010 ;}if(SWC4 ==1){ data.touchB = 1101 ;}else{data.touchB = 1111 ;}radio.write(&data, sizeof(Signal));}else if(mode ==1){if(ym==1){if (SW6 == HIGH && cont2 == HIGH) {delay(5);ym =2;cont2 = !cont2;} else if (SW6 == LOW && cont2 == LOW) {delay(5);cont2 = !cont2;}}else if(ym==2){if (SW6 == HIGH && cont2 == HIGH) {delay(5);ym =3;cont2 = !cont2;} else if (SW6 == LOW && cont2 == LOW) {delay(5);cont2 = !cont2;}if (SW5 == HIGH && cont1 == HIGH) {delay(5);ym = 1;cont1 = !cont1;} else if (SW5 == LOW && cont1 == LOW) {delay(5);cont1 = !cont1;}}else if(ym ==3){if (SW6 == HIGH && cont2 == HIGH) {delay(5);ym =2;cont2 = !cont2;} else if (SW6 == LOW && cont2 == LOW) {delay(5);cont2 = !cont2;}if (SW5 == HIGH && cont1 == HIGH) {delay(5);if(Bluetooh == 1){delay(5);Bluetooh =0;}else if(Bluetooh ==0){delay(5);Bluetooh =1;}cont1 = !cont1;} else if (SW5 == LOW && cont1 == LOW) {delay(5);cont1 = !cont1;}}}//---u8g2.firstPage();do{if(ym==3){page3();}else if(ym==2){page2();}else if(ym==1){page1();}}while (u8g2.nextPage());
delay(50);
}

代码仅供参考,实际使用得根据实际情况改写

接收机代码

注意:接收机的24L01P 与nano的接口与遥控器的接法不同

//这是遥控器的
RF24 radio(9, 10 ); // CE, CSN
//这是接收机的
RF24 radio(7, 8);      // CE, CSN

模式1:接收机采用PCA9685模块扩展PWM接口;50Hz 无刷电调上升沿为1ms-2ms 对应值为187-373; 舵机上升沿102为0度 187为45度 280为90度 373为135度 510为180度模拟通道
数值算法:
0.05 X 4096 X 0.915 ~= 187 ;
0.1 X 4096 X 0.915 ~= 374 ;
以此类推。
模式2:接收机采用nano自带的3,5,6,9,10 PWM引脚输出。11脚被占用,用软件模拟的话会占用单片机资源,所以,只有五路PWM输出口。
模式3:自行定义~

/*
*      THE ZG 接收机主程序
*           BY:微风萧萧
*        nrf24l01p:CE  -> D07  CSN -> D08  MOSI -> D11   MISO -> D12SCK -> D13 IRQ -> \  VCC  -> 3.3V GND  -> GND
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#include <Wire.h>
#include <EEPROM.h>
#include "Adafruit_PWMServoDriver.h"Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);//  遥杆1 遥杆2  遥杆3  遥杆4 电位器A 电位器B
int cha1, cha2, cha3, cha4,  cha5, cha6;
// 开关A 开关B  开关R 开关L
int swA, swB,  swR, swL;
// 定义数据变量
int mode =0,Rexo,Reup,Redo,cont;
int addr;Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;struct Signal {byte vlx;byte vly;byte vrx;byte vry;byte potentialA;      //电位器abyte potentialB;      //电位器bbyte switchA;         //开关a   ------>F->1001   B->1110byte switchB;         //开关b   ------>O->1011   X->1100byte touchA;          //触摸开关a  ------>NL->1010   LI->1000byte touchB;          //触摸开关b  ------>NL->1111   LI->0000
};
Signal data;const byte address[6] = "zg111";
RF24 radio(7, 8);      // CE, CSN void setup() {ch1.attach(3);ch2.attach(5);ch3.attach(6);ch4.attach(9);ch5.attach(10);pwm.begin();         //PCA9685初始化pwm.setPWMFreq(50);  //50HZSerial.begin(9600);  //打开串口radio.begin();       //nrf24l01p 初始化radio.openReadingPipe(0, address);radio.setPALevel(RF24_PA_MIN);radio.startListening();pinMode(A0,INPUT);pinMode(A1,OUTPUT);pinMode(A2,OUTPUT);pinMode(A3,OUTPUT);mode =  EEPROM.read(addr);cont = HIGH;pinMode(LED_BUILTIN,OUTPUT);//LED推挽输出digitalWrite(LED_BUILTIN,HIGH);digitalWrite(A1,HIGH);digitalWrite(A2,HIGH);digitalWrite(A3,HIGH);
}
unsigned long lastRecvTime = 0;
void recvData(){while( radio.available() ) {radio.read(&data, sizeof(Signal));//接收数据lastRecvTime = millis();   //当前时间ms}
}
void loop() {recvData();unsigned long now = millis();if ( now - lastRecvTime > 500 ) {digitalWrite(LED_BUILTIN,HIGH);}else digitalWrite(LED_BUILTIN,LOW);Rexo = analogRead(A0);Reup = analogRead(A6);Redo = analogRead(A7);swA = data.switchA;swB = data.switchB;swR = data.touchA;swL = data.touchB;if(Rexo <= 20&&cont == HIGH){  //模式转换delay(4);mode++;if(mode >=4){mode =0;}cont =!cont;}else if(Rexo >=1000 &&cont ==LOW){delay(4);cont =!cont;}/*  if(Reup <= 20&&cont == HIGH){       //功能暂定delay(4);cont =!cont;}else if(Reup >=1000 &&cont ==LOW){delay(4);cont =!cont;}if(Redo <= 20&&cont == HIGH){        //功能暂定delay(4);cont =!cont;}else if(Redo >=1000 &&cont ==LOW){delay(4);cont =!cont;}*/if(mode==0){ digitalWrite(A1,1); digitalWrite(A2,1); digitalWrite(A3,1);}else if(mode==1){      //  蓝色  模式一cha1 = map(data.vlx, 0, 255, 1000, 2000);   // cha2 = map(data.vly, 0, 255, 185,370);      // cha3 = map(data.vrx, 0, 255, 1000, 2000);   // cha4 = map(data.vry, 0, 255, 1000, 2000);   // cha5 = map(data.potentialA, 0, 255, 185, 370);      //50Hz 无刷电调上升沿为1ms-2ms 对应值为187-373cha6 = map(data.potentialB, 0, 255, 185, 370);      //舵机上升沿102为0度 187为45度 280为90度 373为135度 510为180度 digitalWrite(A1,0);digitalWrite(A3,1);pwm.setPWM(12,0,cha5);pwm.setPWM(13,0,cha6);if(cha2<=310&&cha2>=245){pwm.setPWM(4,0,227);}else pwm.setPWM(4,0,cha2);} else if(mode==2){  //绿色   模式二cha1 = map(data.vlx, 0, 255, 950, 1900);   // cha2 = map(data.vly, 0, 255, 950, 1900);    // cha3 = map(data.vrx, 0, 255, 950, 1900);   // cha4 = map(data.vry, 0, 255, 950, 1900);   // cha5 = map(data.potentialA, 0, 255, 185, 370);    cha6 = map(data.potentialB, 0, 255, 185, 370);     digitalWrite(A1,1);digitalWrite(A2,0);ch1.writeMicroseconds(cha1);  // 3号引脚 lxch2.writeMicroseconds(cha2);  // 5号引脚 lych3.writeMicroseconds(cha3);  // 6号引脚 rxch4.writeMicroseconds(cha4);  // 9号引脚 ry//ch5.writeMicroseconds(cha2);  //1000 --2000 对应1ms-2ms}else if(mode==3){  //红色   模式三digitalWrite(A2,1);digitalWrite(A3,0);}EEPROM.write(addr, mode);  delay(50);
}

接收机代码未完整,仅供参考;
接收机可选三种模式,通过按键A0端口选取,使用EEPROM记录当前值保存;防止下次上电是模式复位。4个数字通道未定义;可以根据实际需要修改。

Arduino Nano 做的一个航模小遥控器相关推荐

  1. Arduino Nano做NB-IoT透传项目

    用Arduino Nano作控制器,实现NB-IoT透传项目 概述 NB-IOT模块 Arduino Nano 程序 总结 概述 当前利用NB-IoT作透传项目非常流行,Arduino Nano应该是 ...

  2. 分享自己做的一个词典小软件

    分享自己做的一个词典小软件 查词功能 词库管理 单词记忆学习 查词功能 模糊查询 历史查询记录 词库管理 分为单词和百科,单词未普通的单词,百科是可以自己任意调整格式的记录数据,如下面的静夜思 单词记 ...

  3. 为了撩妹用Python做了一个办公小工具,她说棒极了

    UI排版布局 主页通过分页栏来划分不同的界面,以及窗体最小化,最大化,关闭功能. 应用.网页直达页由简单的按钮组成,前后对正.左右标齐. 天气查询栏,有简单的"按钮.输入框.标签框" ...

  4. 最近做了一个iOS小应用,记录下遇到的问题以及解决方法

    经历一个半月的AppStore审核拉锯战,提交审核,拒绝,再提交,再拒绝,来回折腾4次,应用终于上架了! 期间不知骂了多少次狗日的Apple.inc,审核规则稍有不符即拒绝,折腾一次至少1周才能再次进 ...

  5. Python Day 70 利用Django框架做的一个bbs小项目

    ##项目开发流程 #1.项目需求分析产品经理+架构师+开发经理/组长 去到客户的公司谈需求(博弈的过程) #2.项目架构设计 架构师设计(数据库(主库:MySQL,从库:redis,mongodb), ...

  6. 【学习笔记】大三集中实训做的一个微信小程序之点餐系统(静态页面不包含java后台逻辑)

    点餐系统 注:大三集中实训的时候由于没有什么经验,只实现了静态页面,但微信小程序开发文档里面所有的功能差不多都实现(视频的上传与下载以及登录等等)所以在这里记录自己的学习笔记 目录 **点餐系统** ...

  7. 自己做的一个打字小游戏(汇编)

    源代码如下: DATA SEGMENT ;******** 控制类 ******** HANGID DB 5  ; 行号  POSITION DB 0  ; 字母出现的起始列数   WHICH DB ...

  8. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  9. 利用Arduino Nano 对于另外的Arduino控制板下载Bootloader

    简 介: 测试了利用Nano板对于基于MEGA328的Arduino的Bootloader下载,在此基础之上,利用了FT232TL的USB-TTL UART模块对测试MEGA328下载执行程序. 关键 ...

最新文章

  1. 冬奥闭幕式黑科技再次引爆全网,AR中国结、折柳寄情……还有212项科技藏在冬奥里...
  2. 数组是逻辑结构还是存储结构_数据结构之存储方式
  3. MySQL 系统架构 说明
  4. python:数据操作小技巧
  5. 电脑软件:5个实用的Windows软件,大幅度提高你的工作效率!
  6. ssh(Spring+Spring mvc+hibernate)——applicationContext-servlet.xml
  7. redis nginx session tomcat
  8. CV新赛事|常见天气分类
  9. 重磅上线|国内首个 Kubernetes SIG-Cloud-Provider 子项目揭秘
  10. python在线怎么发音-Python如何实现文本转语音
  11. 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
  12. 华为数通设备常用查询命令
  13. 饿了么神级UI组件库——Element-UI使用指南
  14. 1.北京理工大学Python与机器学习-绪论
  15. Python 实现多个Excel工作表绘制曲线图
  16. DELL笔记本E5400刷BIOS激活win7
  17. 金蝶系统登不上服务器270,电脑进不了金蝶软件,显示Automation错误270
  18. 全键盘 掌上 linux,拥有QWERTY打字体验手机秒变掌上电脑 OPPO全键盘保护壳专利曝光...
  19. 关于自己学习安卓的体会
  20. css 三角角标样式

热门文章

  1. Java定时任务调度工具之Timer
  2. python算法工程师的一天_算法工程师的一天!说的是你
  3. 达内推出内部员工购房计划最高可贷50万
  4. 工作和生活中,...
  5. java web电子商务网站_电子商务 javaweb b2b b2c o2o 平台
  6. https://docs.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022 安装 Visual
  7. JAVA开发之旅(十)###面向对象(其他)###
  8. 【TJOI 2015】弦论
  9. 华为交换机基本配置之Telnet和SSH方式远程登录
  10. break 跳出两层甚至多层 for 循环