#include <Adafruit_NeoPixel.h> // 声明调用灯带库
#include "WS2812_Definitions.h"
#define PIN 7
#define LED_COUNT 30
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
#include <Servo.h> // 声明调用Servo库
Servo myservo; // 创建一个舵机对象
int potpin = 0; // 连接到模拟口0
int val; //变量val用来存储从模拟口0读到的值
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
SoftwareSerial mp3SoftwareSerial(10, 11);
DFRobotDFPlayerMini myDFPlayer; //实例化对象
void setup() {
Serial.begin(9600); // 设置串口波特率为9600
pinMode(2,OUTPUT);//路线1
pinMode(3,OUTPUT);//路线2
pinMode(4,OUTPUT);//路线3
pinMode(5,OUTPUT); //路线4
pinMode(6,OUTPUT); //路线5
//控制罗盘灯的部分
leds.begin(); // Call this to start up the LED strip.
clearLEDs(); // This function, defined below, turns all LEDs off...
leds.show(); // ...but the LEDs don't actually update until you call this.
//控制舵机旋转部分
myservo.attach(9); // 将引脚9上的舵机与声明的舵机对象连接起来
pinMode(A0, INPUT);
mp3SoftwareSerial.begin(9600);
myDFPlayer.begin(mp3SoftwareSerial);
myDFPlayer.volume(30); //Set volume value. From 0 to 30
myDFPlayer.play(1);
delay(3 * 1000);
}
void loop() {
val = analogRead(potpin); //从模拟口0读值,并通过val记录
Serial.println(String("电位器返回")+analogRead(A0)); //将读取的A0模拟值输出到串口监视器
ledSensor();
val = map(val, 0, 1023, 0, 179); //通过map函数进行数值转换
myservo.write(val); // 给舵机写入角度
delay(15); // 延时15ms让舵机转到指定位置
//设定(1,70)是回家的部分,从50以后起航
if ((70< analogRead(A0)) && (analogRead(A0)< 225)) { //路线1
Serial.println(222);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
myDFPlayer.play(3); //俄罗斯
delay(23 * 1000); //时长21s
}
else if ((225< analogRead(A0)) && (analogRead(A0)< 425)) {//路线2
Serial.println(333);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
myDFPlayer.play(5); //地中海
delay(25 * 1000); //时长24s
}
else if ((425< analogRead(A0)) && (analogRead(A0)< 625)) {//路线3
Serial.println(444);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
myDFPlayer.play(7); //东南亚
delay(25 * 1000);//时长23s
}
else if ((625< analogRead(A0)) && (analogRead(A0)< 825)) {//路线4
Serial.println(555);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
myDFPlayer.play(9); //印度洋
delay(20 * 1000);//时长17s
}
else if ((825< analogRead(A0)) && (analogRead(A0)< 1023)) {//路线5
Serial.println(666);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
myDFPlayer.play(11); //南太平洋
delay(24 * 1000);//时长20s
}
}
void cylon(unsigned long color, int mm)
{
// weight determines how much lighter the outer "eye" colors are
const byte weight = 4;
byte red = (color & 0xFF0000) >> 16;
byte green = (color & 0x00FF00) >> 8;
byte blue = (color & 0x0000FF);
clearLEDs();
leds.setPixelColor(mm, red, green, blue); // Set the bright middle eye
// Now set two eyes to each side to get progressively dimmer
for (int j=1; j<=mm; j++)
{
if (mm-j >= 0)
leds.setPixelColor(mm-j, red/(weight*j), green/(weight*j), blue/(weight*j));
}
leds.show(); // Turn the LEDs on
// Now we go back to where we came. Do the same thing.
}
// Cascades a single direction. One time.
void clearLEDs()
{
for (int i=0; i<LED_COUNT; i++)
{
leds.setPixelColor(i, 0);
}
}
void ledSensor(){
int sensorValue = analogRead(A0);
int m=sensorValue/35;
cylon(INDIGO, m); // Indigo cylon eye!
}
Loading
cd74hc4067
cd74hc4067