выход из цикла

novichok
Offline
Зарегистрирован: 22.01.2014
#include <IRremote.h>

   int RECV_PIN = 8;
   IRrecv irrecv(RECV_PIN);
   decode_results results;
   int time = 4;
   int i;
 void setup()
   {
   Serial.begin(9600);
   irrecv.enableIRIn(); 
   pinMode(24, OUTPUT);
   pinMode(26, OUTPUT);
   pinMode(28, OUTPUT);
   pinMode(30, OUTPUT);
   }
 void loop() 
 {
   irrecv.decode(&results) ;
   Serial.println(results.value,HEX);   
     if (results.value==0xFF30CF) 
     {
     delay(time);
     digitalWrite(24, HIGH);
     digitalWrite(26, LOW);
     digitalWrite(28, LOW);
     digitalWrite(30, HIGH);
     delay(time);
     digitalWrite(24, HIGH);
     digitalWrite(26, HIGH);
     digitalWrite(28, LOW);
     digitalWrite(30, LOW);
     delay(time);
     digitalWrite(24, LOW);
     digitalWrite(26, HIGH);
     digitalWrite(28, HIGH);
     digitalWrite(30, LOW);
     delay(time);
     digitalWrite(24, LOW);
     digitalWrite(26, LOW);
     digitalWrite(28, HIGH);
     digitalWrite(30, HIGH);
     irrecv.decode(&results) ;
     Serial.println(results.value,HEX);
     }
 }

Помогите плиз сделать выход из цикла. К меге подключил ИК и шаговый двигатель, коды пульта считал. Требуется при нажатии кнопки с кодом FF30CF запустить шаговик, при нажатии кнопки с кодом FF25AD (или какой нибудь другой) остановить. Пока что получалось только одократное выполнение цикла или бесконечное.

 

maksim
Offline
Зарегистрирован: 12.02.2012
5 фев 2013 ... Прдключил шаговик через драйвер L293D. Пример ProportionalControl - работает. Подключаю через EASYDRIVER ( хочу использовать ...
arduino.ru/forum/.../biblioteka-accelstepper
 
18 фев 2013 ... Код на основе ProportionalControl из библиотеки AccelStepper. Кнопка 1 сохраняет положени. Кнопка 2 возвращает в сохранённое ...
arduino.ru/forum/.../biblioteka-accelstepper-0
 
1 сен 2012 ... Есть вот такой скеч - результат моего предыдущего топика:
arduino.ru/.../proshu-pomoch-so-menoi-napravleniya-na-accelstepper
 
5 авг 2012 ... Задача: Используя библиотеку AccelStepper повернуть ротор моего ШД на 360 градусов за X шагов (в моем случае за 4-е шага), затем ...
arduino.ru/.../strannye-veshchi-s-bibliotekoi-accelstepper
 
18 окт 2013 ... Ну всё попробовал. Помогите плз. Даубл, интерлэйтив, сингл - работают. разные режимы, библиотеки пробовал... не работает ...
arduino.ru/.../ne-mogu-nastroit-mikroshag-megashildafmotoraccelstepper
 
14 ноя 2013 ... Попробовал с другой библиотекой AccelStepper. тут уже параметра stepsPerRevolution нигде нету... за то значение maxSpeed ...
arduino.ru/.../pomogite-zastavit-shagovik-rabotat-kak-nado
 
12 мар 2013 ... Воспользуйтесь библиотекой AccelStepper, что бы не заниматься считанием шагов. На самом шаговике обычно пишут или количество ...
arduino.ru/.../kak-uznat-kol-vo-shagov-u-shagovogo-dvigatelya
 
7 сен 2013 ... Шаговый двигатель управляется кнопками (библиотека AccelStepper). Скорость и ускорение регулируются и всё работает отлично.
arduino.ru/forum/.../dzhoistik-vmesto-knopok
 
6 май 2013 ... Управляю дистанционно шаговым двигателем (пример из библиотеки AccelStepper). Получается только при мапировании значения ...
arduino.ru/.../peredacha-dannykh-s-pomoshchyu-apc-220
 
 

 

novichok
Offline
Зарегистрирован: 22.01.2014

Спасибо, но это все с использованием библиотеки AccelStepper, а я не хочу ее использовать.

maksim
Offline
Зарегистрирован: 12.02.2012

А, не хотите, ну тогда не используйте...

novichok
Offline
Зарегистрирован: 22.01.2014

дак, собственно, вопрос то остался...

maksim
Offline
Зарегистрирован: 12.02.2012

Да как это остался? Вы сами ответили на свой вопрос:

novichok пишет:

а я не хочу

novichok
Offline
Зарегистрирован: 22.01.2014

я всего лишь хотел обойтись без использования библиотеки, прописав цикл из  четырех шагов. Запускаться то он запускается, но не останавливается.

ivan_admin
Offline
Зарегистрирован: 09.01.2014

а где цикл?

novichok
Offline
Зарегистрирован: 22.01.2014


if (results.value==0xFF30CF)  
     {
     delay(time);
     digitalWrite(24, HIGH);
     digitalWrite(26, LOW);
     digitalWrite(28, LOW);
     digitalWrite(30, HIGH);
     delay(time);
     digitalWrite(24, HIGH);
     digitalWrite(26, HIGH);
     digitalWrite(28, LOW);
     digitalWrite(30, LOW);
     delay(time);
     digitalWrite(24, LOW);
     digitalWrite(26, HIGH);
     digitalWrite(28, HIGH);
     digitalWrite(30, LOW);
     delay(time);
     digitalWrite(24, LOW);
     digitalWrite(26, LOW);
     digitalWrite(28, HIGH);
     digitalWrite(30, HIGH);
     irrecv.decode(&results) ;
     Serial.println(results.value,HEX);
     }

novichok
Offline
Зарегистрирован: 22.01.2014

менял на while, результат тот же

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Это не цикл. Это условие по которому а вас мотор поворацивается на 1 шаг.

Хотите что бы мотор работал постоянно, вам надо указанные колманды вызывать по кругу.

Разберитесь сначало как 1) шаговиком управлять 2) вызывать команду в фоне (или прерывание по таймеру или delay без задержки)

Или ищите подходящую вам библиотеку, если вы не хотите разбираться.

 

ivan_admin
Offline
Зарегистрирован: 09.01.2014

может это поможет Мигаем светодиодом без delay()

ites
Offline
Зарегистрирован: 26.12.2013

ivan_admin пишет:

может это поможет Мигаем светодиодом без delay()

Интересно, сколько раз в день эта ссылка постится на форуме? :)

maksim
Offline
Зарегистрирован: 12.02.2012

Не, нельзя, ТС не хочет. В библиотеке как раз так и организовано:

boolean AccelStepper::runSpeed()
{
    unsigned long time = millis();
  
    if (time > _lastStepTime + _stepInterval)
    {
	if (_speed > 0)
	{
	    // Clockwise
	    _currentPos += 1;
	}
	else if (_speed < 0)
	{
	    // Anticlockwise  
	    _currentPos -= 1;
	}
	step(_currentPos & 0x3); // Bottom 2 bits (same as mod 4, but works with + and - numbers) 

	_lastStepTime = time;
	return true;
    }
    else
	return false;
}
void AccelStepper::step4(uint8_t step)
{
    switch (step)
    {
	case 0:    // 1010
	    digitalWrite(_pin1, HIGH);
	    digitalWrite(_pin2, LOW);
	    digitalWrite(_pin3, HIGH);
	    digitalWrite(_pin4, LOW);
	    break;

	case 1:    // 0110
	    digitalWrite(_pin1, LOW);
	    digitalWrite(_pin2, HIGH);
	    digitalWrite(_pin3, HIGH);
	    digitalWrite(_pin4, LOW);
	    break;

	case 2:    //0101
	    digitalWrite(_pin1, LOW);
	    digitalWrite(_pin2, HIGH);
	    digitalWrite(_pin3, LOW);
	    digitalWrite(_pin4, HIGH);
	    break;

	case 3:    //1001
	    digitalWrite(_pin1, HIGH);
	    digitalWrite(_pin2, LOW);
	    digitalWrite(_pin3, LOW);
	    digitalWrite(_pin4, HIGH);
	    break;
    }
}

 

novichok
Offline
Зарегистрирован: 22.01.2014

да не то что бы не хочу, думал малой кровью обойтись, потому как плохо пока разбираюсь