помогите новичку

dimis
Offline
Зарегистрирован: 03.06.2013
добрый всем день. сразу к делу. никак не могу сообразить как сделать - написать программу для отсечки мотора,если перешел границу по току.
имеется :arduino uno ,блок реле , кнопка и датчик тока (ACS712) 
цель : при нажатой кнопке мотор работает , датчик считывает силу тока ( это я сделал)
а вот как сделать  , чтобы по достижении заданного значения силы тока мотор отключался , и не включался заново , пока я не отпущу кнопку и не нажму ее заново.
заранее благодарен
Дмитрий
toc
Offline
Зарегистрирован: 09.02.2013

Дмитрий, вставьте сюда ваш скетч. Будет проще вам помочь.

dimis
Offline
Зарегистрирован: 03.06.2013
 
int b1 = 6;
int b2 = 7;
 
int r1 = 10;
int r2 = 11;
 
int b1st = 0;
int b2st = 0;
 
int spin = A0;
 
 
void setup() 
{
  pinMode(b1, INPUT);
  pinMode(b2, INPUT);
  pinMode(r1, OUTPUT);
  pinMode(r2, OUTPUT); 
  
  Serial.begin(9600);
}
 
void loop()
{
  digitalWrite(r1, HIGH);  
  digitalWrite(r2, HIGH); 
  
  b1st = digitalRead(b1);
  b2st = digitalRead(b2);
  
  int spin = analogRead(A0);
  
  Serial.println(spin);
  delay(100); 
 
  
if ((b1st == HIGH) && (spin > 450))
{digitalWrite(r1, LOW); }
else
{digitalWrite(r1, HIGH); }
  
if ((b2st == HIGH) && (spin > 450))
{digitalWrite(r2, LOW); }
else
{digitalWrite(r2, HIGH); }  
 
}
dimis
Offline
Зарегистрирован: 03.06.2013

ja ne pisal komentarii, tak kak eto sketch dlja testov

 

neo4620
Offline
Зарегистрирован: 03.06.2013
int b1 = 6;
int b2 = 7;
int r1 = 10;
int r2 = 11;
int b1st = 0;
int b2st = 0;
int spin = A0;
void setup() 
{
  pinMode(b1, INPUT);
  pinMode(b2, INPUT);
  pinMode(r1, OUTPUT);
  pinMode(r2, OUTPUT); 
  
  Serial.begin(9600);
}
void loop()
{
  digitalWrite(r1, HIGH);  
  digitalWrite(r2, HIGH); 
  
  b1st = digitalRead(b1);
  b2st = digitalRead(b2);
  
  int spin = analogRead(A0);
  
  Serial.println(spin);
  delay(100); 
  
if ((b1st == HIGH) && (spin > 450))
{digitalWrite(r1, LOW); }
else
{digitalWrite(r1, HIGH); }
  
if ((b2st == HIGH) && (spin > 450))
{digitalWrite(r2, LOW); }
else
{digitalWrite(r2, HIGH); }  
}

У тебя привод реверсивный? Для этого два выхода и два входа? И убери в 25 строчке int он уже не нужен

dimis
Offline
Зарегистрирован: 03.06.2013

da dlja rele nuzhen negativnij triger, da dve knopki i dva rele

horosho uberu

neo4620
Offline
Зарегистрирован: 03.06.2013

dimis пишет:

da dlja rele nuzhen negativnij triger, da dve knopki i dva rele

horosho uberu

Тогда для ограничения тока что то типа

if (spin > "значение нужного тока") && ((b1st == HIGH) || (b2st == HIGH)))
{digitalWrite(r1, HIGH);
{digitalWrite(r2, HIGH);
или 
{digitalWrite(r1, LOW);
{digitalWrite(r2, LOW);
Зависит от того что используется для отключения привода

 

dimis
Offline
Зарегистрирован: 03.06.2013

u menja knopka b1 upravljaet rele r1  -  motor krutitsja v odnu storonu - otkrivaet dverj

knopka b2 upravljaet rele r2 - motor krutitsja v druguju storonu - dverj zakrivaetsja

esli vo vremja dvizhenija dveri 4to-to pomeshalo, to nado 4tobi motor ostanovilsja,dlja etogo ja ispoljzoval datchik toka,4tobi sledil za siloj toka motora.

toc
Offline
Зарегистрирован: 09.02.2013

можно добавить переменную bool есть_препятствие=false;

устанавливать её в true если ток превышен.

устанавливать её в false если кнопка отпущена.

учитывать значение при управлении мотором.

кажется, что у вас не реализована защита от дребезга контактов кнопки. Посмотрите библиотеку Debounce.  Хотя, возможно, это некритично в вашем случае.

 

dimis
Offline
Зарегистрирован: 03.06.2013

drebezg poka ne vazhno.

esli ne trudno , napishite kod kak on primerno dolzhen viglyadetj.

u menja 4em bolshe tok,tem menjshe zna4enie v moyom primere 450

bool (spin < 450 = false);  // 4to-to vrode etogo ???

sasha_programist
Offline
Зарегистрирован: 11.11.2013

дайте ссылку скачать Math.h