Top.Mail.Ru
Ответы

Помогите пожалуйста написать код на ардуино

Делаю стол с регулировкой высоты, пробовам сам, но получчается чушь какая-то.
Хочу управлять реле 2х канальным с ардуино через 3х позиционный переключатель и 2ух кнопок. При использовании 3х позиционника ардуино подаёт сигнал на 11, 12 пин в зависимости от положения. А с кнопок сложнее, там будет стоять датчик расстояния. Будет 2 значения мин и макс. Ардуино измеряет расстояние до пола и переключает реле под пином 11, чтобы стол ехал вниз или 10, чтобы ехал вверх, в зависимотси от кнопок.

Дополнен

#include <NewPing.h>

// настройки датчика HC-SR04
#define TRIGGER_PIN 8
#define ECHO_PIN 7
#define MAX_DISTANCE 200

// настройки переключателя и реле
#define UP_PIN 11
#define DOWN_PIN 10
#define SWITCH_PIN_1 12
#define SWITCH_PIN_2 13

// переменные состояния
int switchState;
int prevSwitchState = HIGH;
int distance;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // инициализация объекта NewPing для датчика расстояния

void setup() {
pinMode(SWITCH_PIN_1, INPUT_PULLUP);
pinMode(SWITCH_PIN_2, INPUT_PULLUP);
pinMode(UP_PIN, OUTPUT);
pinMode(DOWN_PIN, OUTPUT);
digitalWrite(UP_PIN, LOW); // изначально отключаем реле
digitalWrite(DOWN_PIN, LOW);
}

void loop() {
// считываем состояние переключателя
switchState = digitalRead(SWITCH_PIN_1);
if (switchState != prevSwitchState) { // если состояние переключателя изменилось
prevSwitchState = switchState;
if (switchState == LOW) { // если переключатель в положении "вниз"
digitalWrite(DOWN_PIN, HIGH); // включаем реле "вниз"
digitalWrite(UP_PIN, LOW); // выключаем реле "вверх"
} else { // если переключатель в положении "вверх" или "средне"
digitalWrite(DOWN_PIN, LOW); // выключаем реле "вниз"
digitalWrite(UP_PIN, HIGH); // включаем реле "вверх"
}
}

// считываем расстояние до пола
distance = sonar.ping _cm();

// если расстояние меньше 10 см, переключаем реле на "вверх"
if (distance < 10) {
digitalWrite(DOWN_PIN, LOW);
digitalWrite(UP_PIN, HIGH);
}
// если расстояние больше 20 см, переключаем реле на "вниз"
else if (distance > 20) {
digitalWrite(DOWN_PIN, HIGH);
digitalWrite(UP_PIN, LOW);
}
}
Это чат жпт сделал, но не рабоатет

По дате
По рейтингу
Аватар пользователя
Мудрец
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
 const int relayPin1 = 11; 
const int relayPin2 = 12; 
const int switchPin = 2; 
const int button1Pin = 3; 
const int button2Pin = 4; 
const int distanceSensorPin = A0; 
 
int minDistance = 10; // минимальное расстояние 
int maxDistance = 20; // максимальное расстояние 
 
void setup() { 
  pinMode(relayPin1, OUTPUT); 
  pinMode(relayPin2, OUTPUT); 
  pinMode(switchPin, INPUT); 
  pinMode(button1Pin, INPUT); 
  pinMode(button2Pin, INPUT); 
} 
 
void loop() { 
  int switchState = digitalRead(switchPin); 
  int button1State = digitalRead(button1Pin); 
  int button2State = digitalRead(button2Pin); 
   
  if (switchState == HIGH) { 
    digitalWrite(relayPin1, HIGH); 
    digitalWrite(relayPin2, LOW); 
  } else if (switchState == LOW) { 
    digitalWrite(relayPin1, LOW); 
    digitalWrite(relayPin2, HIGH); 
  } else { 
    digitalWrite(relayPin1, LOW); 
    digitalWrite(relayPin2, LOW); 
     
    if (button1State == HIGH) { 
      int distance = analogRead(distanceSensorPin); 
      if (distance < minDistance) { 
        digitalWrite(relayPin1, HIGH); 
      } 
    } 
     
    if (button2State == HIGH) { 
      int distance = analogRead(distanceSensorPin); 
      if (distance > maxDistance) { 
        digitalWrite(relayPin2, HIGH); 
      } 
    } 
  } 
} 
 

Этот код управляет реле с помощью пинов relayPin1 и relayPin2, которые соответствуют пинам 11 и 12 на Arduino. Состояние переключателя считывается с пина switchPin, который соответствует пину 2 на Arduino. Состояния кнопок считываются с пинов button1Pin и button2Pin, которые соответствуют пинам 3 и 4 на Arduino. Датчик расстояния подключается к аналоговому пину distanceSensorPin, который соответствует аналоговому пину A0 на Arduino.

В зависимости от состояния переключателя и кнопок, код управляет реле для перемещения стола вверх или вниз. Вы можете изменить значения переменных minDistance и maxDistance для установки минимального и максимального расстояний.

Аватар пользователя
Ученик

Только там у реле 3 контакта. Земля и 2 пина

Аватар пользователя
Ученик

Попробуй воспользоваться ChatGPT, он способен писать простенькие скрипты, и поидее должен создать подходящий код.

Аватар пользователя
Ученик

Да бред пишет, релюшка шёлкает как тварь

123456789101112131415161718
 #include <NewPing.h> 
 
// настройки датчика HC-SR04 
#define TRIGGER_PIN 8 
#define ECHO_PIN 7 
#define MAX_DISTANCE 200 
 
// настройки переключателя и реле 
#define UP_PIN 11 
#define DOWN_PIN 10 
#define SWITCH_PIN_1 12 
#define SWITCH_PIN_2 13 
 
// переменные состояния 
int switchState; 
int prevSwitchState = HIGH; 
int distance; 
 
Аватар пользователя
Ученик

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // инициализация объекта NewPing для датчика расстояния

void setup() {
pinMode(SWITCH_PIN_1, INPUT_PULLUP);
pinMode(SWITCH_PIN_2, INPUT_PULLUP);
pinMode(UP_PIN, OUTPUT);
pinMode(DOWN_PIN, OUTPUT);
digitalWrite(UP_PIN, LOW); // изначально отключаем реле
digitalWrite(DOWN_PIN, LOW);
}



Видео по теме