Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

vvr
2020-11-29 10:13:45

выкинуть из программы весь ненужный мусор
разделить указание выводов и переменные
отформатировать код
правильно вставить его с нумерацией строк

Greatest
2020-11-28 23:50:18

Здравствуйте форумчане.

Очень долго мучаюсь с одним кодом

Вообщем задача следующая: Одна кнопка перемещает сервопривод по 3 положением, во время этого идёт индикация с помощью RBG, и есть управление сервоприводом с помощью потенциометра. И нужно сделать вторую кнопку, чтобы переключаться между режимами, имею ввиду нажал кнопку2 и идёт управление по 3 положением кнопкой1, ну а когда нажимаешь кнопку2 еще раз управляешь сервоприводом с помощью потенциометра.

Сейчас же это всё работает одновременно, но потенциометр поворачивается лишь когда нажмёшь на кнопку2(а нужно свободно)

Код:

#include <Servo.h>

Servo s1;

float a = 0.1759;
float k = 0.48816;
float b = - 49.76331;
int button_state = 0;
int button_pin = 10;
int servo_position = 0;
int PIN_LED_RED = 3;
int PIN_LED_GREEN = 2;
int PIN_LED_BLUE = 4;
int switch_button = 11;
const int switch_position = 0;
int switch_state = 0;
const int POT=5;
int valpot = 0;
int angleServo = 0;


void setup()
{
  s1.attach(6);
  Serial.begin(9600);
  pinMode(6,OUTPUT);
  pinMode(10,INPUT);
  pinMode(11,INPUT);
  pinMode(PIN_LED_RED,OUTPUT);
  pinMode(PIN_LED_GREEN,OUTPUT);
  pinMode(PIN_LED_BLUE,OUTPUT);
}


void loop()
{
  button_state = digitalRead(button_pin);
  switch_state = digitalRead(switch_button);
 
  if(switch_state == HIGH )
  {
valpot = analogRead(POT);
    {
angleServo=map(valpot,0,1023,0,180);
s1.write(angleServo);
delay(15);
    }
   }
 
  if (button_state == HIGH ){
  servo_position++;
  delay(500);
  if (servo_position == 3){
  servo_position = 0;

  }
 
  if (servo_position == 0){
  s1.write (50);
  digitalWrite(PIN_LED_BLUE, 0);
  digitalWrite(PIN_LED_GREEN, 1);
  digitalWrite(PIN_LED_RED, 0);

  }

  if (servo_position == 1){
  s1.write (90);
  digitalWrite(PIN_LED_BLUE, 1);
  digitalWrite(PIN_LED_GREEN, 0);
  digitalWrite(PIN_LED_RED, 0);
 
  }
 
  if (servo_position == 2){
  s1.write (130);
  digitalWrite(PIN_LED_BLUE, 0);
  digitalWrite(PIN_LED_GREEN, 0);
  digitalWrite(PIN_LED_RED, 1);

  }
  }
}

Підвал форуму