Приветствую, премногоуважаемые форумчане.
Появилась потребность , чтобы кто то грамотный в этом деле(написание скетчей Ардуино) ,посмотрел(хотя бы одним глазком) мой код и выдал заключение,будет ли он нормально работать...на практике уперся в то ,что код выполняется как будто один раз...может что-то напутал с условиями.
код приемника , который иногда должен отправлять свои показания на передатчик...
Появилась потребность , чтобы кто то грамотный в этом деле(написание скетчей Ардуино) ,посмотрел(хотя бы одним глазком) мой код и выдал заключение,будет ли он нормально работать...на практике уперся в то ,что код выполняется как будто один раз...может что-то напутал с условиями.
код приемника , который иногда должен отправлять свои показания на передатчик...
код:
#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();
}
}
}
Изменено: