Помогите объединить два и более скетчей в один

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем CasperSimfer, 6 дек 2014.

  1. !@#$

    !@#$ Нерд

    Нет
     
  2. Airbus

    Airbus Радиохулиган Модератор

    А кто такой "Великий Дима?" только он .Других у нас на Форуме нет.
    Ясен пень он хочет чтоб сделали за него.Лови-не благодари.
    Код (C++):
    #include <car_bluetooth.h>
    #include <SoftwareSerial.h>   //Software Serial Port
    #include <String.h>
    #include "MotorDriver.h"
    #define RxD 2//D2 of Arduino should connect to TX of the Serial Bluetooth module
    #define TxD 4//D4 of Arduino should connect to RX of the Serial Bluetooth module
    //CarBluetooth bluetooth(RxD, TxD);
    #define CMD_INVALID     0XFF
    #define CMD_FORWARD     'F'
    #define CMD_RIGHT_FRONT 'R'
    #define CMD_BACKWARD    'B'
    #define CMD_LEFT_FRONT  'L'
    #define CMD_STOP        'S'
    #define SPEED_STEPS 20
    uint8_t speed0 = 100;
    #include <Ultrasonic.h>
    #include "TM1637.h"
    //module--- Arduino
    //VCC   --- 5V
    //GND   --- GND
    #define TRIGGER_PIN  5//connect Trip of the Ultrasonic Sensor moudle to D5 of Arduino
                          //and can be changed to other ports
    #define ECHO_PIN     3
    Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
    #define CLK A5//connect CLK of the 4-Digit Display to A5 of Arduino and can be changed to other ports
    #define DIO A4//
    TM1637 disp(CLK,DIO);


    void setup(){
      motordriver.init();
      motordriver.setSpeed(100,MOTORA);
      motordriver.setSpeed(100,MOTORB);
      bluetooth.waitConnected();
      disp.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
      disp.init();

    }
    uint8_t bt_command;

    #define CAR_STOP 0
    #define CAR_FORWARD 1
    #define CAR_BACK 2
    uint8_t car_status = CAR_STOP;
    uint8_t new_status = car_status;

    void loop(){
      bt_command = bluetooth.readByte();

      if(bt_command != CMD_INVALID){
      controlCar(bt_command);
      }

    }


    void controlCar(uint8_t cmd){
       switch(cmd)
      {
        case CMD_FORWARD:     motordriver.goForward();break;
      case CMD_RIGHT_FRONT:
      //  if(car_status != CAR_STOP)new_status = CAR_FORWARD;
        motordriver.goRight();
       // delay(200);
        break;
      case CMD_BACKWARD:    motordriver.goBackward(); break;
      case CMD_LEFT_FRONT:
        motordriver.goLeft();
       // delay(200);
        break;
      case CMD_STOP:        motordriver.stop();break;
      default: break;
      }
      if((cmd>='0')&&(cmd<='9'))
      {
          speed0 = cmd-0x30;
        Serial.print(speed0);
        Serial.print(">");
        speed0 = map(speed0, 0, 9, 0, 255);
        Serial.println(speed0);
        motordriver.setSpeed(speed0,MOTORA);
        motordriver.setSpeed(speed0,MOTORB);
      }
    }

    void speedUp(){
      if(speed0 < 236)speed0 += SPEED_STEPS;
      else speed0 = 255;
      motordriver.setSpeed(speed0,MOTORA);
      motordriver.setSpeed(speed0,MOTORB);
    }

    void speedDown(){
      if(speed0 > 70)speed0 -= SPEED_STEPS;
      else speed0 = 50;
       motordriver.setSpeed(speed0,MOTORA);
      motordriver.setSpeed(speed0,MOTORB);
    float cmMsec, inMsec;
      long microsec = ultrasonic.timing();

      cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
      inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
      disp.display((int16_t)cmMsec);//in centimeters
      delay(500);
    }
     
    Последнее редактирование: 26 май 2019
  3. !@#$

    !@#$ Нерд

    Ну тогда будь готов отвечать и на вопросы "а почему пишет ошибку про директории
    #include <car_bluetooth.h>
    #include <SoftwareSerial.h>
    #include <String.h>
    #include "MotorDriver.h"
    #include <Ultrasonic.h>
    #include "TM1637.h"

    Уверен ... потому, что у меня есть Хрустальный шар
     
  4. SergeiL

    SergeiL Гуру

    Культ личности или бот Димы? :)
    dima01.png dima02.png dima07.png dima09.png dima10.png
     
    Airbus нравится это.
  5. Max889900

    Max889900 Нуб

    Здравствуйте, помогите пожалуйста объединить два скетча

    Код для создания Ping:

    #include <SPI.h>

    #include <Ethernet.h>

    #include <ICMPPing.h>

    #include <Dns.h>

    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield

    byte ip[] = {192,168,0,177}; // ip address for ethernet shield

    IPAddress pingAddr(0,0,0,0); // ip address to ping

    SOCKET pingSocket = 0;

    char buffer [256];

    ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

    void setup()

    {

    // start Ethernet

    Ethernet.begin(mac, ip);

    Serial.begin(9600);

    DNSClient dns;

    dns.begin(Ethernet.dnsServerIP());

    dns.getHostByName("ya.ru",pingAddr); // at this point the function works

    }

    void loop()

    {

    ICMPEchoReply echoReply = ping(pingAddr, 4);

    if (echoReply.status == SUCCESS)

    {

    sprintf(buffer,

    "Reply[%d] from: %d.%d.%d.%d: bytes=%d time=%ldms TTL=%d",

    echoReply.data.seq,

    echoReply.addr[0],

    echoReply.addr[1],

    echoReply.addr[2],

    echoReply.addr[3],

    REQ_DATASIZE,

    millis() - echoReply.data.time,

    echoReply.ttl);

    }

    else

    {

    sprintf(buffer, "Echo request failed; %d", echoReply.status);

    }

    Serial.println(buffer);

    delay(500);

    }

    Код для отправки сообщения:

    #include <Dhcp.h>
    #include <Dns.h>
    #include <Ethernet.h>
    #include <EthernetClient.h>
    #include <EthernetServer.h>
    #include <EthernetUdp.h>

    #include <Base64.h>
    #include <SPI.h>
    #include <Dhcp.h>
    #include <Dns.h>
    #include <Ethernet.h>
    #include <EthernetClient.h>
    #include <EthernetServer.h>
    #include <EthernetUdp.h>
    #include <util.h>

    //структура для сообщения
    struct Message
    {
    String From;//адрес отправителя
    String To;// адрес получателя
    String Subject;// Тема письма
    String Body;// Текст письма
    };

    //mac адрес устройства (можно не менять)
    byte mac[] = {
    0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x05 };

    //IP адрес адруины (можно не менять)
    IPAddress ip(192,168,1,48);

    // IP smtp сервера
    IPAddress server(87,250,251,50);
    // IP других сереров можно найти в инете

    // логин и пароль к почтовому сервису
    char login[] = "A........@yandex.ru";//
    char password[] = "A.......";

    // создаем экземпляр клиента
    EthernetClient client;

    void setup(){
    Serial.begin(9600);// UART
    Ethernet.begin(mac,ip);// Запускаем шилд
    Serial.println("Start");
    }

    void loop(){
    while(Serial.available()){
    char inSerialChar = 0;
    inSerialChar = Serial.read();
    if(inSerialChar == 's'){
    SendMessage();// При отправке в дуину ‘s’, отправляем сообщение.
    }
    }
    }
    // метод подключения к серверу
    bool connectToServer(){
    if(client.connected()){
    }
    else{
    if(client.connect(server,25)){
    return true;
    }
    else{
    return false;
    }
    }
    }

    // метод отправки сообщения
    void SendMessage(){
    Serial.println("Please wite…");
    LogPass();
    Message message = {
    "A.......@yandex.ru",
    "B......@yandex.ru",
    "Проба пера",//тема
    "Огромный привет от Ардуино!!!!" };//само сообщение
    client.println("MAIL From:<"+message.From+">");
    delay(250);
    client.println("RCPT To:<"+message.To+">");
    delay(250);
    client.println("DATA");
    delay(250);
    client.println("From:"+message.From);
    client.println("To:"+message.To);
    client.println("Subject:"+message.Subject);
    delay(250);
    client.println(message.Body);
    delay(250);
    client.println(".");// поприходуточкисерверставитсообщениевочередь
    delay(250); // на отправку
    client.println("QUIT");// как только закрыли соединение, сообщение улетает
    delay(250);
    Serial.println("Message sending…");
    }

    // подключение к серверу и авторизация
    void LogPass(){
    char array[64];// массив для кодирования
    if(connectToServer()){
    client.println(F("helo 1.2.3.4"));
    delay(250);
    client.println(F("AUTH LOGIN"));
    delay(250);
    client.println(strToBase64(login));
    delay(250);
    client.println(strToBase64(password));
    delay(250);

    }
    else{
    Serial.println("Server not connected…");
    }

    }

    // кодировка Base64
    String strToBase64(char str[]){
    char charArray[64];
    base64_encode(charArray,str,strlen(str));
    String result = charArray;
    return result;
    }
     
  6. parovoZZ

    parovoZZ Гуру

    В обмен на помощь финансовую.
     
  7. Max889900

    Max889900 Нуб

    хорошо, сколько?
     
  8. b707

    b707 Гуру

    не тратьте деньги, отправка email с ардуины работает только если у вас есть свой собственный сервер - все публичные давно перешли на шифрование, которое ардуино-библиотеки не поддерживают
     
  9. Max889900

    Max889900 Нуб

    Скажите пожалуйста, что если использовать Gmail без SSl шифрования?
     
  10. parovoZZ

    parovoZZ Гуру

    а у них есть порт? Наши все уже позакрывали.
     
  11. jyuliii

    jyuliii Нуб

    Добрый день, помогите пожалуйста,у меня такая проблема нужно в скетч добавить фильтрацию.
    Мне нужно сделать программу для устройства ультразвукового дальномера(устройство для определения препятствий для слепых и слабовидящих)
    Я как бы уже добавила, но почему-то у меня график фильтрации идет не по центру первого графика, а сверху него, не знаю что делаю не так
    помогите пожалуйста разобраться
    Вот скетч с добавленным фильтром Калмана
    Код (C++):
    #define trigPin 7    //  ножка УЗД Trig на 7 Pin платы Arduino nano
    #define echoPin 8     //  ножка УЗД Echo на 8Pin платы Arduino nano
    #define vibro 11       //  вибромотор подключить на 11 Pin (другой провод на GND)
    const int sensorPin = A0;
    // переменные для Калмана
    float varVolt = 0.11;  // среднее отклонение
    float varProcess = 1; // скорость реакции на изменение (подбирается вручную)
    float Pc = 0.0;
    float G = 0.0;
    float P = 1.0;
    float Xp = 0.0;
    float Zp = 0.0;
    float Xe = 0.0;
    //подготовка, используется для установки режима портов
    void setup() {
      // открываем последовательный порт:
    Serial.begin (9600);        // задаем скорость обмена 9600
    // задаем входные и выходные контакты:
    pinMode(trigPin, OUTPUT);   // задаем trig как выход
    pinMode(echoPin, INPUT);    // задаем echo как вход
    pinMode(vibro, OUTPUT);    //  вибромотор  выход
    }
    //код, работающий постоянно
    void loop() {
    int var = analogRead (0); // c аналогового входа А0 считываем данные и обрабатываем
    long duration, distance;// используется для расчета расстояния
    // датчик запускается импульсом HIGH продолжительностью 10 мкс
    // или более; но перед этим нужно подать короткий импульс LOW,
    // чтобы Trig в конце концов получил четкий импульс HIGH:
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH); // чтобы начать измерения,
    delayMicroseconds(10);       // необходимо на вход trigPin подать высокий сигнал 5В на 10мкс
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH); // с выхода echoPin считывается как долго был открыт порт
    distance = (duration/2) / 29.1;    // преобразование полученного параметра в дистанцию
    int filtered_distance = filter(distance);//присвоение filtered_distance значений фильтрованных данных
    if (filtered_distance <= 300 && filtered_distance > 250) { // первое условие, если расстояние меньше либо равно 300 см и не больше 250 см,
    analogWrite(vibro, 70);   // вибромотор вибрирует 70
    }
      if (filtered_distance < 250 && filtered_distance > 200) { //если расстояние меньше 250 см и не больше 200 см,
           analogWrite(vibro, 100); //вибромотор вибрирует 100
    }
    if (filtered_distance < 200 && filtered_distance > 150) {  //если расстояние меньше 200 см и не больше 150 см,12
          analogWrite(vibro, 150);   //вибромотор вибрирует 150
    }
      if (filtered_distance < 150 && filtered_distance > 100) { //если расстояние меньше 150 см и не больше 100 см,
     
        analogWrite(vibro, 200);    //вибромотор вибрирует 200
    }
      if (filtered_distance < 100 && filtered_distance > 50) {   //если расстояние меньше 100 см и не больше 50 см,
        analogWrite(vibro, 250);   //вибромотор вибрирует 250
    }
      if (filtered_distance < 50 && filtered_distance > 0) { //если расстояние меньше 50 см и не больше 0 см,
        analogWrite(vibro, 255);   // вибромотор вибрирует 255 - максимальная вибрация
    }
      if (filtered_distance > 300 || filtered_distance <= 0){//если расстояние больше 300 см или меньше или равно 0                                                                                                      
        Serial.print(filtered_distance); // выводит расстояние в сантиметрах
        Serial.println(" cm");  // в мониторе последовательного порта
      }
      else {//иначе
        Serial.print(filtered_distance); // выводит расстояние в сантиметрах
        Serial.println(" cm");  // в мониторе последовательного порта
       // Serial.print(";");
        Serial.print(filtered_distance);
        //Serial.print(";");
      }
      delay(20); // задержка
    }
    float filter(float distance) {  //функция фильтрации
      Pc = P + varProcess; //
      G = Pc/(Pc + varVolt);  //усиление Калмана
      P = (1-G)*Pc;
      Xp = Xe;
      Zp = Xp;
      Xe = G*(distance-Zp)+Xp; // Xe - "фильтрованное" значение, distance -входное значение
      //return(Xe);
      Serial.print(distance,5);
      Serial.print(",");
      Serial.print(Xe,5);
      Serial.println();
    }
     
     
  12. parovoZZ

    parovoZZ Гуру

    К урологу
     
    DetSimen, Andrey12 и !@#$ нравится это.