Помогите пожалуйста написать код на ардуино
Делаю стол с регулировкой высоты, пробовам сам, но получчается чушь какая-то.
Хочу управлять реле 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);
}
}
Это чат жпт сделал, но не рабоатет
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, он способен писать простенькие скрипты, и поидее должен создать подходящий код.
Да бред пишет, релюшка шёлкает как тварь
#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);
}