Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <Wire.h> // knihovna pro WIRE komunikaci
- #include <I2Cdev.h>
- #include <ros.h>
- #include <std_msgs/String.h>
- #include <ArduinoHardware.h>
- #include <SoftwareSerial.h> // knihovna pro seriovou linku
- #include <Adafruit_SSD1306.h> // knihovna pro OLED
- #include <gfxfont.h>
- #include <MPU6050_tockn.h> // knihovna pro GYRO
- #include <Adafruit_BMP280.h> // knihovna pro BMP280
- #define BMP280_ADRESA (0x76) // nastavení adresy senzoru tlaku
- #include <HCPCA9685.h> // knihovna pro
- #define I2CAdd 0x40 // nastaveni adresy SERVO SHIELDU PCA9685
- HCPCA9685 HCPCA9685(I2CAdd); // nastaveni adresy pca9685
- //#define SERVO_TRIM_MIN 10
- //#define SERVO_TRIM_MAX 330
- #define MPU6050_ADRESA (0x68) // nastavení adresy GYRA
- MPU6050 mpu6050(Wire);
- #define SCREEN_WIDTH 128 // OLED display delka, v pixelech
- #define SCREEN_HEIGHT 32 // OLED display vyska, v pixelech
- #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- #define SLAVE_ADDRESS 0x11
- int servo; // promenna pro servo
- int uhel; // promenna pro uhel
- int leduv2 = A2;
- int ledoci = A3;
- int leduv1 = A1;
- int laser = 4;
- int ledpasek = 3;
- int svetlo1 = 5;
- int svetlo2 = 6;
- int pTrig = 7; // pin pro připojení Trig z modulu HC-SR04
- int pEcho = 8; // pin pro připojení Echo z modulu HC-SR04
- int svetlo = 9;
- int led = 13;
- long odezva, vzdalenost; // inicializace proměnných, do kterých se uloží data
- byte data_to_echo = 0;
- void kroky() { // Q
- HCPCA9685.Servo(10, 150); delay(500);
- HCPCA9685.Servo(1, 300); delay(500);
- HCPCA9685.Servo(8, 190); delay(500);
- HCPCA9685.Servo(4, 180); delay(500);
- HCPCA9685.Servo(8, 170); delay(500);
- HCPCA9685.Servo(10, 180); delay(500);
- HCPCA9685.Servo(1, 20); delay(500);
- HCPCA9685.Servo(9, 200); delay(500);
- HCPCA9685.Servo(10, 150); delay(500);
- HCPCA9685.Servo(6, 140); delay(500);
- HCPCA9685.Servo(10, 190); delay(500);
- HCPCA9685.Servo(8, 110); delay(500);
- HCPCA9685.Servo(11, 170); delay(500);
- HCPCA9685.Servo(9, 140); delay(500);
- HCPCA9685.Servo(5, 130); delay(500);
- HCPCA9685.Servo(9, 220); delay(500);
- HCPCA9685.Servo(10, 170); delay(500);
- HCPCA9685.Servo(11, 120); delay(500);
- HCPCA9685.Servo(10, 210); delay(500);
- HCPCA9685.Servo(9, 170); delay(500);
- HCPCA9685.Servo(7, 210); delay(500);
- HCPCA9685.Servo(1, 340); delay(500);
- HCPCA9685.Servo(11, 110); delay(500);
- HCPCA9685.Servo(9, 150); delay(500);
- HCPCA9685.Servo(11, 190); delay(500);
- HCPCA9685.Servo(7, 200); delay(500);
- HCPCA9685.Servo(11, 140); delay(500);
- HCPCA9685.Servo(9, 200); delay(500);
- HCPCA9685.Servo(6, 90); delay(500);
- HCPCA9685.Servo(4, 250); delay(500);
- HCPCA9685.Servo(7, 270); delay(500);
- HCPCA9685.Servo(5, 80); delay(500);
- HCPCA9685.Servo(6, 90); delay(500);
- HCPCA9685.Servo(10, 170); delay(500);
- HCPCA9685.Servo(4, 240);
- HCPCA9685.Servo(5, 80); delay(500);
- HCPCA9685.Servo(6, 90);
- HCPCA9685.Servo(7, 250); delay(500);
- HCPCA9685.Servo(8, 140);
- HCPCA9685.Servo(9, 180); delay(500);
- HCPCA9685.Servo(10, 170);
- HCPCA9685.Servo(11, 170); delay(500);
- HCPCA9685.Servo(1, 340); delay(100);
- }
- void krok() { // K
- HCPCA9685.Servo(10, 140);
- HCPCA9685.Servo(11, 160); delay(500);
- HCPCA9685.Servo(8, 130);
- HCPCA9685.Servo(9, 180); delay(500);
- HCPCA9685.Servo(6, 90);
- HCPCA9685.Servo(7, 250); delay(500);
- HCPCA9685.Servo(4, 240);
- HCPCA9685.Servo(5, 80); delay(500);
- HCPCA9685.Servo(1, 200); delay(1000);
- HCPCA9685.Servo(8, 200);
- HCPCA9685.Servo(10, 110); delay(250);
- HCPCA9685.Servo(4, 200);
- HCPCA9685.Servo(6, 120); delay(300);
- HCPCA9685.Servo(8, 150);
- HCPCA9685.Servo(10, 170); delay(300);
- HCPCA9685.Servo(9, 130);
- HCPCA9685.Servo(11, 210); delay(250);
- HCPCA9685.Servo(5, 130);
- HCPCA9685.Servo(7, 200); delay(300);
- HCPCA9685.Servo(9, 150);
- HCPCA9685.Servo(11, 160); delay(200);
- HCPCA9685.Servo(10, 170);
- HCPCA9685.Servo(11, 160); delay(300);
- HCPCA9685.Servo(8, 140);
- HCPCA9685.Servo(9, 180); delay(300);
- HCPCA9685.Servo(6, 90);
- HCPCA9685.Servo(7, 250); delay(300);
- HCPCA9685.Servo(4, 240);
- HCPCA9685.Servo(5, 80); delay(300);
- HCPCA9685.Servo(1, 200); delay(100);
- }
- void postoj() { // P
- HCPCA9685.Servo(10, 210);
- HCPCA9685.Servo(11, 140); delay(500);
- HCPCA9685.Servo(8, 130);
- HCPCA9685.Servo(9, 200); delay(500);
- HCPCA9685.Servo(6, 100);
- HCPCA9685.Servo(7, 250); delay(500);
- HCPCA9685.Servo(4, 240);
- HCPCA9685.Servo(5, 80); delay(500);
- HCPCA9685.Servo(1, 200); delay(100);
- }
- void postoj2() { // O
- HCPCA9685.Servo(1, 200); // delay(200);
- HCPCA9685.Servo(4, 240);
- HCPCA9685.Servo(5, 80); delay(200);
- HCPCA9685.Servo(6, 90);
- HCPCA9685.Servo(7, 250); delay(200);
- HCPCA9685.Servo(8, 140);
- HCPCA9685.Servo(9, 180); delay(200);
- HCPCA9685.Servo(10, 170);
- HCPCA9685.Servo(11, 160); delay(200);
- HCPCA9685.Servo(1, 350); delay(100);
- HCPCA9685.Servo(4, 200);
- HCPCA9685.Servo(5, 120); delay(200);
- HCPCA9685.Servo(6, 120);
- HCPCA9685.Servo(7, 210); delay(200);
- HCPCA9685.Servo(8, 60);
- HCPCA9685.Servo(9, 270); delay(200);
- HCPCA9685.Servo(10, 240);
- HCPCA9685.Servo(11, 80); delay(200);
- }
- void vyskok() { // E
- HCPCA9685.Servo(4, 200);
- HCPCA9685.Servo(5, 120); delay(200);
- HCPCA9685.Servo(6, 120);
- HCPCA9685.Servo(7, 210); delay(200);
- HCPCA9685.Servo(8, 60);
- HCPCA9685.Servo(9, 270); delay(200);
- HCPCA9685.Servo(10, 240);
- HCPCA9685.Servo(11, 90); delay(200);
- HCPCA9685.Servo(11, 80);
- }
- void lehni() { // L
- HCPCA9685.Servo(1, 350); delay(100);
- HCPCA9685.Servo(10, 130);
- HCPCA9685.Servo(11, 200); delay(500);
- HCPCA9685.Servo(9, 80);
- HCPCA9685.Servo(8, 260); delay(500);
- HCPCA9685.Servo(10, 40);
- HCPCA9685.Servo(11, 300); delay(500);
- HCPCA9685.Servo(6, 30);
- HCPCA9685.Servo(7, 320); delay(500);
- HCPCA9685.Servo(9, 60);
- HCPCA9685.Servo(8, 250); delay(500);
- HCPCA9685.Servo(4, 290);
- HCPCA9685.Servo(5, 50); delay(500);
- }
- void ulozit() { // w
- HCPCA9685.Servo(1, 350); delay(100);
- HCPCA9685.Servo(9, 80);
- HCPCA9685.Servo(8, 230); delay(500);
- HCPCA9685.Servo(10, 10);
- HCPCA9685.Servo(11, 320); delay(500);
- HCPCA9685.Servo(6, 10);
- HCPCA9685.Servo(7, 330); delay(500);
- HCPCA9685.Servo(9, 30);
- HCPCA9685.Servo(8, 320); delay(500);
- HCPCA9685.Servo(4, 330);
- HCPCA9685.Servo(5, 10); delay(500);
- }
- void sedni() { // S
- HCPCA9685.Servo(1, 340); delay(100);
- HCPCA9685.Servo(10, 40);
- HCPCA9685.Servo(11, 300); delay(500);
- HCPCA9685.Servo(6, 10);
- HCPCA9685.Servo(7, 330); delay(500);
- HCPCA9685.Servo(4, 170);
- HCPCA9685.Servo(5, 140); delay(500);
- HCPCA9685.Servo(8, 100);
- HCPCA9685.Servo(9, 190); delay(500);
- }
- void cupnout() { // R
- HCPCA9685.Servo(1, 340); delay(100);
- HCPCA9685.Servo(8, 120);
- HCPCA9685.Servo(9, 180); delay(500);
- HCPCA9685.Servo(10, 160);
- HCPCA9685.Servo(11, 160); delay(500);
- HCPCA9685.Servo(4, 160);
- HCPCA9685.Servo(5, 160); delay(500);
- HCPCA9685.Servo(6, 160);
- HCPCA9685.Servo(7, 160); delay(500);
- }
- void vrteni() { // V
- HCPCA9685.Servo(1, 80); delay(100);
- HCPCA9685.Servo(1, 280); delay(100);
- HCPCA9685.Servo(1, 80); delay(100);
- HCPCA9685.Servo(1, 280); delay(100);
- HCPCA9685.Servo(1, 80); delay(100);
- HCPCA9685.Servo(1, 280); delay(100);
- HCPCA9685.Servo(1, 80); delay(100);
- HCPCA9685.Servo(1, 280); delay(100);
- HCPCA9685.Servo(1, 340); delay(100);
- }
- void mavani() { // M
- HCPCA9685.Servo(10, 150); delay(200);
- HCPCA9685.Servo(8, 200); delay(200);
- HCPCA9685.Servo(4, 160); delay(200);
- HCPCA9685.Servo(8, 160); delay(200);
- HCPCA9685.Servo(8, 200); delay(200);
- HCPCA9685.Servo(8, 160); delay(200);
- HCPCA9685.Servo(8, 200); delay(200);
- HCPCA9685.Servo(4, 240); delay(200);
- HCPCA9685.Servo(8, 140); delay(200);
- HCPCA9685.Servo(10, 170); delay(200);
- }
- void blikani() { // B
- digitalWrite(led, HIGH); delay (70);
- digitalWrite(led, LOW); delay (70);
- digitalWrite(led, HIGH); delay (70);
- digitalWrite(led, LOW); delay (70);
- digitalWrite(led, HIGH); delay (70);
- digitalWrite(led, LOW); delay (70);
- digitalWrite(led, HIGH); delay (70);
- digitalWrite(led, LOW); delay (70);
- digitalWrite(led, HIGH); delay (70);
- digitalWrite(led, LOW); delay (70);
- }
- void cas() { // A
- Serial.print("Cas od spusteni Rasse: ");
- Serial.print(millis() / 1000);
- Serial.println(" vterin.");
- }
- void setup() {
- Wire.begin(SLAVE_ADDRESS);
- Wire.onReceive(receiveData);
- Wire.onRequest(sendData);
- Serial.begin(115200);
- Serial.println(" sestavuji projekt ");
- HCPCA9685.Init(SERVO_MODE); // prepnuti pca9685 do modu-SERVO
- HCPCA9685.Sleep(false); // vypnout spanek PCA9685
- Serial.println(" nastavuji Servo shield ");
- lehni();
- display.begin();
- Serial.println(" nastavuji Oled ");
- pinMode(laser, OUTPUT);
- digitalWrite(laser, HIGH);
- display.clearDisplay(); // vycisteni displeje
- Serial.println(" nastavuji vystupni piny");
- pinMode(led, OUTPUT);
- pinMode(leduv2, OUTPUT);
- pinMode(ledoci, OUTPUT);
- pinMode(leduv1, OUTPUT);
- pinMode(pTrig, OUTPUT); // nastaveni Trig-pinu jako vystup
- pinMode(pEcho, INPUT); // nastaveni Echo-pinu jako vstup
- pinMode(ledpasek, OUTPUT); // nastaveni pinu pro ledpasek jako vystup
- pinMode(svetlo, OUTPUT); // nastaveni LED-pinu jako vystup
- pinMode(svetlo1, OUTPUT);
- pinMode(svetlo2, OUTPUT);
- digitalWrite(leduv2, HIGH); delay(300);
- digitalWrite(ledoci, HIGH); delay(300);
- digitalWrite(leduv1, HIGH); delay(400);
- digitalWrite(ledoci, LOW);
- digitalWrite(leduv2, LOW);
- digitalWrite(leduv1, LOW);
- Serial.println(" nastavuji vstupni piny");
- mpu6050.begin(); // zapnuti komunikace s GYROSKOPEM
- mpu6050.calcGyroOffsets(true); // kalibrace GYRA
- display.display();
- Serial.println(" vse nastaveno. .. ");
- Serial.println(" Pripraven : ");
- digitalWrite(laser, LOW);
- Serial.println(" Zadej povel ");
- }
- void loop() {
- if (Serial.available() > 3) { // pokud je na seriove lince buffer
- servo = Serial.readStringUntil('.').toInt(); // nacteni dat pred teckou do promenne
- uhel = Serial.readStringUntil('\n').toInt(); // nacteni dat za teckou s ukoncenim do promenne
- Serial.print(servo);
- Serial.print(" . ");
- Serial.println(uhel);
- HCPCA9685.Servo(servo, uhel); // provede nastaveni podle promennych
- } // konec cteni
- int x = Serial.available();
- if ( x == 2 )
- {
- char pismeno = Serial.read();
- Serial.println(pismeno);
- switch (pismeno)
- {
- case 'z':
- digitalWrite(leduv2, HIGH);
- digitalWrite(leduv1, HIGH);
- break;
- case 'x':
- digitalWrite(leduv2, LOW);
- digitalWrite(leduv1, LOW);
- break;
- case 'c':
- digitalWrite(ledoci, HIGH);
- break;
- case 'd':
- digitalWrite(ledoci, LOW);
- break;
- case 'f':
- digitalWrite(leduv1, HIGH);
- break;
- case 'g':
- digitalWrite(leduv1, LOW);
- break;
- case 'j':
- digitalWrite(laser, HIGH); // zapne laser
- break;
- case 'n':
- digitalWrite(laser, LOW); //vypne laser
- break;
- case 't':
- digitalWrite(ledpasek, HIGH);
- break;
- case 'y':
- digitalWrite(ledpasek, LOW);
- break;
- case 'q': // pohyb pro KROKY
- kroky();
- break;
- case 'o': // Postoj2
- postoj2();
- break;
- case 'b': // LED13 BLIKANI
- blikani();
- break;
- case 'v': // vrteni ocasem
- vrteni();
- break;
- case 'k': // jeden krok
- krok();
- break;
- case 's': // sedni
- sedni();
- break;
- case 'p': // postoj
- postoj();
- break;
- case 'l': // lehni
- lehni();
- break;
- case 'w': // lehni
- ulozit();
- break;
- case 'r': // povel CUPNOUT NA KOLENA
- cupnout();
- break;
- case 'm': // Mavani levou predni packou
- mavani();
- break;
- case 'e': // vyskok
- vyskok();
- break;
- case 'a': // v případě přejetí znaku 'a' vypíše čas od spuštění Arduina
- cas();
- break;
- /* case '\r': // přesun na začátek řádku - znak CR
- break;
- case '\n': // odřádkování - znak LF
- break;
- */
- case 10: // přesun na začátek řádku - znak CR
- break;
- case 13: // odřádkování - znak LF
- break;
- default:
- Serial.println(" Neznam prikaz ");
- }
- }
- display.clearDisplay(); // vycisteni displeje
- Adafruit_BMP280 bmp; // inicializace senzoru BME z knihovny
- bmp.begin(0x76); // Start the bmp
- float T = bmp.readTemperature(); // Read temperature in °C
- float P = bmp.readPressure() / 100; // Read Pressure in Pa and conversion to hPa
- float A = bmp.readAltitude(1013.26); // Calthe Altitude, the "1019.66" in (hPa)level at day in your region
- mpu6050.update(); // nacteni novych dat z gyroskopu
- digitalWrite(pTrig, LOW); // vypne Trig-pin
- delayMicroseconds(2); // nastaví na 2 mikrosekundy výstup na GND (pro jistotu)
- digitalWrite(pTrig, HIGH); // zapne Trig-pin
- delayMicroseconds(5); // nastaví na 5 mikrosekund výstup rovný napájení
- digitalWrite(pTrig, LOW); // vypne Trig-pin
- odezva = pulseIn(pEcho, HIGH); // pomocí funkce pulseIn získáme následně délku pulzu v mikrosekundách
- vzdalenost = odezva / 58.31; // přepočet získaného času na vzdálenost v cm
- if (vzdalenost > 10) digitalWrite(svetlo2, LOW);
- if (vzdalenost < 10) digitalWrite(svetlo2, HIGH); // pokud je vzdalenost min nez 10cm rozsviti led2 cervena
- if (vzdalenost > 15) digitalWrite(svetlo1, LOW);
- if (vzdalenost < 15) digitalWrite(svetlo1, HIGH); // pokud je vzdalenost min nez 15cm rozsviti led1 zluta
- if (vzdalenost > 20) digitalWrite(svetlo, LOW);
- if (vzdalenost < 20) digitalWrite(svetlo, HIGH); // pokud je vzdalenost min nez 20cm rozsviti led zelena
- display.setTextColor(WHITE); // nastavi OLED na bilou barvu
- display.setTextSize(2); // OLED display nastaveni velikosti pisma
- display.setCursor(0, 0); // OLED display nastaveni pozice
- display.print(T, 1); // OLED display vypis teploty
- display.setTextSize(1);
- display.setCursor(55, 0);
- display.print(P, 0);
- display.setCursor(100, 0);
- display.print(A, 0);
- display.setCursor(122, 0);
- display.print("m");
- display.setCursor(55, 8);
- display.print(mpu6050.getTemp(), 1);
- display.setCursor(90, 8);
- display.print(vzdalenost);
- display.setCursor(115, 10);
- display.print("cm");
- display.setCursor(0, 16);
- display.print(mpu6050.getGyroX(), 1);
- display.setCursor(40, 16);
- display.print(mpu6050.getGyroY(), 1);
- display.setCursor(90, 16);
- display.print(mpu6050.getGyroZ(), 1);
- display.setCursor(0, 24);
- display.print(mpu6050.getAngleX(), 1);
- display.setCursor(40, 24);
- display.print(mpu6050.getAngleY(), 1);
- display.setCursor(90, 24);
- display.print(mpu6050.getAngleZ(), 1);
- display.display();
- Serial.print(mpu6050.getTemp() , 1); Serial.print("-°C CORE MPU, ");
- Serial.print("\tgX "); Serial.print(mpu6050.getGyroX(), 1);
- Serial.print("\tgY "); Serial.print(mpu6050.getGyroY(), 1);
- Serial.print("\tgZ "); Serial.print(mpu6050.getGyroZ(), 1);
- Serial.print("\tAX "); Serial.print(mpu6050.getAngleX(), 1);
- Serial.print("\tAY "); Serial.print(mpu6050.getAngleY(), 1);
- Serial.print("\tAZ "); Serial.print(mpu6050.getAngleZ(), 1);
- Serial.print(" : ");
- Serial.print(T, 2); Serial.print(" °C, ");
- Serial.print(P, 2); Serial.print(" hPa, ");
- Serial.print(A, 0); Serial.print(" mnm, ");
- Serial.print(vzdalenost); Serial.println(" cm, ");
- delay(10);
- }
- void receiveData(int bytecount)
- {
- for (int i = 0; i < bytecount; i++) {
- data_to_echo = Wire.read();
- }
- }
- void sendData()
- {
- Wire.write(data_to_echo);
- }
Add Comment
Please, Sign In to add comment