ARDUINO проверить правильность кода

Ajiexandr

✩✩✩✩✩✩✩
4 Июл 2020
2
0
Приветствую, премногоуважаемые форумчане.
Появилась потребность , чтобы кто то грамотный в этом деле(написание скетчей Ардуино) ,посмотрел(хотя бы одним глазком) мой код и выдал заключение,будет ли он нормально работать...на практике уперся в то ,что код выполняется как будто один раз...может что-то напутал с условиями.
код приемника , который иногда должен отправлять свои показания на передатчик...
код:
#include <ServoSmooth.h>
ServoSmooth servo,rull;
#include <SPI.h>
#include "RF24.h"
#include "nRF24L01.h"
const int OFSET_MOTOR = 10; // С какого значения ШИМ включаем мотор

const uint64_t pipe[2] = {0xE8E8F0F0E1LL, 0xE8E8F0F0E2LL};
int data_in[3];
int data_out[3];
int a = 0;
// Define Trig and Echo pin:
#define trigPin 2
#define echoPin 3
long duration;
int distance;
unsigned long timer;

RF24 radio(8, 9);

void setup() {
    // Define inputs and outputs
    // Serial.begin(9600);
    // Sonar connect
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
    //Servo connect
  rull.attach(2);
  servo.attach(7);      // подключить
  servo.setSpeed(5);  // ограничить скорость
  servo.setAccel(0.01);    // установить ускорение (разгон и торможение)

   
  radio.begin();
  radio.setAutoAck(1);
  radio.setChannel(110);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_1MBPS);
  radio.openReadingPipe(1, pipe[0]);
  radio.openWritingPipe(pipe[1]);
  radio.startListening();
 }

void loop() {
  
     if ( radio.available() ) {
      radio.read( &data_in, sizeof(data_in));}
 
   int y = (data_in[0]);
   int x = map((data_in[1]),-145,145,0,180); 
   
  if ( y >-OFSET_MOTOR  &&  y < OFSET_MOTOR)
   { digitalWrite(10, LOW);
    digitalWrite(17, LOW);
    analogWrite(5, LOW);
    }

  if (y >= OFSET_MOTOR)
   { digitalWrite(10, HIGH);
    digitalWrite(17, LOW);
    analogWrite(5,y);
     }
 
  if( y <= -OFSET_MOTOR) 
   { digitalWrite(10, LOW);
    digitalWrite(17, HIGH);
    analogWrite(5, -y);
     }

  // rull
  
      rull.write(x);
      
  if ( x >-OFSET_MOTOR  &&  x < OFSET_MOTOR)
     {rull.write(90);
     }
     
  if ((data_in[2])>= 100) {
      servo.write(85);}
  else if ((data_in[2])<= 0) {
      servo.write(0);
     }

 
  if (millis() - timer >= 10000){ 
    timer = millis(); 
    
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  // Trigger the sensor by setting the trigPin high for 10 microseconds:
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Read the echoPin. pulseIn() returns the duration (length of the pulse) in microseconds:
  duration = pulseIn(echoPin, HIGH);
  // Calculate the distance:
  distance = duration/58;
  //distance = duration/13; //вода
     data_out[0] = analogRead(A7);
     data_out[1] = distance; 
     
    radio.stopListening();
    radio.write( &data_out, sizeof(data_out) );
    radio.startListening();
    }
    
    //Строки для файлсейва
    unsigned long started_waiting_at = millis();
    while ( ! radio.available() ){                             
      // FILESAVE
      if (millis() - started_waiting_at > 700 && millis() - started_waiting_at < 5000){   //если связь прерывается от 800мс до 5000мс происходит остановка мтора        
    data_in[0] = 0;
    data_in[1] = 0;
    data_in[2] = 0;
    servo.detach();
  }
 }
}
 
Изменено: