Помогите со скетчем. Управление двигателем.
- Войдите на сайт для отправки комментариев
Пнд, 09/10/2017 - 23:25
Два датчика (оптический датчик) следят за смещением ленты, как только один из датчиков сработал включается двигатель и смещает ленту в противоположную сторону, когда лента выпрямилась, оба датчика в норме, двигатель в исходное положение (третий оптический датчик положения).
Был код изначально такой, без третьего положения.
[code]
[== C++ ==]
int photoPin1 = 10; // левый фоторезистор
int photoPin2 = 11; // правый фоторезистор
int motor1 = 8; // мотор влево
int motor2 = 9; // мотор вправо
int val1 = 0; // переменные для хранения значения входного напряжения
int val2 = 0; //
void setup()
{
Serial.begin(9600);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
}
void loop()
{
val1 = digitalRead(photoPin1); // считываем значение с фоторезисторов
val2 = digitalRead(photoPin2);
Serial.print("values: "); // выводим их в COM-порт
Serial.print(val1);
Serial.print(" : ");
Serial.println(val2);
val1 = val1; //
val2 = val2; //
if(val1==val2) // если равны - стоп двигатель
{
digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
Serial.println("waiting");
}
else
{
if(val1>val2)
{
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
Serial.println("left");
}
else
{
digitalWrite(motor2, HIGH);
digitalWrite(motor1, LOW);
Serial.println("right");
}
}
delay(500);
}
[/code]
Все было просто до этого "нулевого" положения, подскажите решение с новыми данными.
Для начала научитесь правильно постить код.
Спасибо за спроведливое замечание, но я был уверен что сайт построен по на той же платформе как и на другом сайте, с телефона у меня не видно подсветку синтаксиса((( и я просто скопировал с похожего форума. Там все красиво получилось)
Для начала научитесь правильно постить код.
А у вас есть решение?
разместите код, согласно правил данного форума
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
И вот даже не смотря на весь остальной код, подскажите, а что вы хотели реализовать следующими строками:
Чтоб код стартовал с параметром = 0
А по поводу размещения кода, к сожалению писал все с телефона. А там html редактора невидно.(
Я перепишу все с ноутбука, сразу после обеда!
А как вам в этом поможет то, что val1 останется тем же, каким был? У вас хоть капля логики есть? тут даже не надо уметь программировать. чтобы понять. что операция x=x; не делает абсолютно ничего.
тут даже не надо уметь программировать. чтобы понять. что операция x=x; не делает абсолютно ничего.
Так на то у нас и канпиляторы есть, у которых мозгов больше чем у пограммиста, выкинет
Согласен, удаляем)
Логика кода понятна Вам, так как это Вам интересно... а мне особо вникать не зачем, взял из уроков немного того, немного сего... все заработало и вот оно счастье! Но когда появилась необходимость третьего положения каретки, тут увы или все сначала, но времени нет снова читать литературу или просить помощи...)
А этот кусок кода не нарушает логики, компилятор пропустил...
с таким настроем не советую вам постить в форум. Если не хотите вникать и читать литературу, идите в раздел "Ищу исполнителя", платите деньги и вам все сделают. Тут помогают тем, кто хочет вникнуть сам. А над такими, кому "некогда читать" - жестоко глумятся.
Спасибо за совет, сижу вникаю))) так как понимаю что никому не интересно помогать или обьяснять. Сюда написал в надежде кто подскажет куда смотреть или концепцию иную подскажет...
Дак ты даже код правильно не вставил, что разбирать, как подсказывать? Ашыпка в хз какой строке? Или самому строки считать, водя бородавчатым пальцем, щурясь и шевеля губами?
Дак ты даже код правильно не вставил, что разбирать, как подсказывать? Ашыпка в хз какой строке? Или самому строки считать, водя бородавчатым пальцем, щурясь и шевеля губами?
Я думаю это выглядит немного жутковато со стороны... поэтому с работы попаду домой, сразу все подправлю!
int photoPin1 = 10; // левый фоторезистор int photoPin2 = 11; // правый фоторезистор int motor1 = 8; // мотор влево int motor2 = 9; // мотор вправо int val1 = 0; // переменные для хранения значения входного напряжения int val2 = 0; // void setup() { Serial.begin(9600); pinMode(motor1, OUTPUT); pinMode(motor2, OUTPUT); } void loop() { val1 = digitalRead(photoPin1); // считываем значение с фоторезисторов val2 = digitalRead(photoPin2); Serial.print("values: "); // выводим их в COM-порт Serial.print(val1); Serial.print(" : "); Serial.println(val2); if(val1==val2) // если равны - стоп двигатель { digitalWrite(motor1, LOW); digitalWrite(motor2, LOW); Serial.println("waiting"); } else { if(val1>val2) { digitalWrite(motor1, HIGH); digitalWrite(motor2, LOW); Serial.println("left"); } else { digitalWrite(motor2, HIGH); digitalWrite(motor1, LOW); Serial.println("right"); } } delay(500); }И делай надо убрать - он блокирует считывание с датчиков поэтому и не останавливается, хотя все зависит от скорости двигателя - если 1 мм в минуту или меньше догда да
Код в работе не проверял
/**/ unsigned long mill; typedef void (*handler)() ; //--------------------------------------------- class Cl_Motors { protected: const byte pin1; const byte pin2; public: Cl_Motors(byte _pin1, byte _pin2): pin1(_pin1), pin2(_pin2) {} void init() { pinMode(pin1, OUTPUT); //настраиваем пины на выход pinMode(pin2, OUTPUT); stop(); } void stop() { digitalWrite(pin1, LOW); digitalWrite(pin2, LOW); } void left() { digitalWrite(pin1, HIGH); digitalWrite(pin2, LOW); } void right() { digitalWrite(pin1, LOW); digitalWrite(pin2, HIGH); } }; //------------------------------------------- class Cl_Sens { protected: const byte pin1; const byte pin2; handler stop, left, right; bool val1, val2; unsigned long past = 0; public: Cl_Sens(byte _pin1, byte _pin2, handler _stop, handler _left, handler _right) : pin1(_pin1), pin2(_pin2), stop(_stop), left(_left), right(_right) {} void init() { pinMode(pin1, INPUT); //настрaиваем пины на вход pinMode(pin2, INPUT); } void run() { if (mill - past > 100) { past = mill; val1 = digitalRead(pin1); // считываем значение с фоторезисторов val2 = digitalRead(pin2); if (!val1 && !val2) { stop(); Serial.println("waiting"); } if (!val1 && val2) { left(); Serial.println("left"); } if (val1 && !val2) { right(); Serial.println("right"); } } } }; //-----компоновка--------------------------- Cl_Motors Motors(/*левый пин*/8,/*правый пин*/9); void stopSens() { Motors.stop(); } void leftSens() { Motors.left(); } void rightSens() { Motors.right(); } Cl_Sens Sens(/*левый пин*/10,/*правый пин*/11,/*обработчик*/&stopSens,/*обработчик*/&leftSens,/*обработчик*/&rightSens); //-------main()-------------------------------------- void setup() { Serial.begin(9600); Motors.init(); Sens.init(); } void loop() { mill = millis(); Sens.run(); } /* Скетч использует 2382 байт (7%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 224 байт (10%) динамической памяти, оставляя 1824 байт для локальных переменных. Максимум: 2048 байт. */Я бы хотел продолжить беседу в не сайта, обсудить ньюансы и закончить проект. Немного не то что я хотел.