roboforum.ru

Технический форум по робототехнике.
Текущее время: 14 май 2025, 11:12

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 1366 ]  На страницу Пред.  1 ... 35, 36, 37, 38, 39, 40, 41 ... 92  След.
Автор Сообщение
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 16 май 2011, 16:58 
Не в сети

Зарегистрирован: 11 апр 2011, 12:53
Сообщения: 17
Откуда: Брянск
прог. языки: basic, С
ФИО: Алексей Смирнов
Нужна помощь по Си!!!

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

Датчики подсоединены к портам PD4 и PD3.

Кусок кода:

// если удар на всех бамперах. Т.е. и левом, и правом

if ((PIND.4)&(PIND.3)) { // Если лог. "1" на обоих портах PD4 и PD3

PORTC &= ~_BV(PC0); // Остановить ход!!!

_delay_ms(4000); // Ждем 4 сек.

PORTC |= _BV(PC0); // Включаем ход!
PORTC |= _BV(PC1); // назад реле левого двигателя
PORTC |= _BV(PC2); // назад реле правого двигателя

for (int i = 0; i < 1; i++)
{
_delay_ms(4000); // Робот отъезжает
}

// уходим влево
PORTC |= _BV(PC0); // лог "1" hod
PORTC |= _BV(PC1); // лог "1" lev
PORTC &= ~_BV(PC2); // лог "0" prav

}

И так далее...
Компилятору не нравится строчка с оператором IF. Видимо, что-то неправильно оформлено. Но что?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 16 май 2011, 17:19 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Что-то перед этой строчкой. К примеру классическая ошибка - точку с запятой зевнул. А вообще телепатию облегчает конкретный текст ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 16 май 2011, 17:40 
Не в сети

Зарегистрирован: 17 фев 2010, 11:39
Сообщения: 27
Откуда: Киев
прог. языки: PHP
ФИО: Сергей
вместо & надо &&


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 17 май 2011, 09:04 
Не в сети

Зарегистрирован: 11 апр 2011, 12:53
Сообщения: 17
Откуда: Брянск
прог. языки: basic, С
ФИО: Алексей Смирнов
Прошу прощения. Ошибка такая:

kirbi.c: In function 'main':
kirbi.c:19: error: expected ')' before numeric constant
kirbi.c:19: error: expected ')' before numeric constant
kirbi.c:45: error: expected ')' before numeric constant
kirbi.c:71: error: expected ')' before numeric constant

figley.migley: Поставил &&, но не помогло ((

Добавлено спустя 2 минуты 24 секунды:
Ошибка в строках 19, 45, 71. Это как раз строчка с IF


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 17 май 2011, 09:14 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Вы могли бы выложить либо содержимое файла полностью или прикрепить файл потому как по куску кода я точно не смогу найти эти строки а то может быть и библиотека какая нибудь не подключена

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 18 май 2011, 00:24 
Не в сети

Зарегистрирован: 11 апр 2011, 12:53
Сообщения: 17
Откуда: Брянск
прог. языки: basic, С
ФИО: Алексей Смирнов
Вот код целиком. Но в том-то и дело, что ничего особенного в нем нет :)
Пояснение - для управления двигателями использую три выхода атмеги. Логическая единица на PC0 включает реле хода. PC1 и PC2 управляют реле разворота - левого и правого двигателя. При логическом нуле двигатели работают "вперед". При единице - разворачиваются назад.

Код:
#define F_CPU 1000000UL  // 1 MHz
#include <avr/io.h>
#include <util/delay.h>

char x;

int main(void) // начало основной программы
{

DDRD = 0x00; // все выводы порта D сконфигурировать как входы

DDRC = 0xff; // все выводы порта C сконфигурировать как выходы

while (1) {  // Бесконечный цикл


// если удар на всех бамперах

if ((PIND.4)&&(PIND.3)) {

PORTC &= ~_BV(PC0); // hod stop!!!

_delay_ms(4000);   // Ждем 4 сек.

PORTC |= _BV(PC0); // hod!
PORTC |= _BV(PC1); // nazad leviy
PORTC |= _BV(PC2); // nazad praviy

           for (int i = 0; i < 1; i++)
           {
           _delay_ms(4000);   // Ждем 4 сек.
           }

// uhod vlevo
PORTC |= _BV(PC0); //  1 hod
PORTC |= _BV(PC1); //  1 lev
PORTC &= ~_BV(PC2); // 0 prav

}



// если удар на левом бампере

if (PIND.4) {

PORTC &= ~_BV(PC0); // hod stop!!!

_delay_ms(4000);   // Ждем .

PORTC |= _BV(PC0); // hod!
PORTC |= _BV(PC1); // nazad leviy
PORTC |= _BV(PC2); // nazad praviy

           for (int i = 0; i < 1; i++)
           {
           _delay_ms(4000);   // Ждем 4 сек.
           }


// уход вправо

PORTC |= _BV(PC0); //   1 на ход
PORTC &= ~_BV(PC1); //  0 на лево
PORTC |= _BV(PC2); //   1 на право

}

// если удар на правом бампере

if (PIND.3) {

PORTC &= ~_BV(PC0); // hod stop!!!

_delay_ms(4000);   // Ждем .

PORTC |= _BV(PC0); // hod!
PORTC |= _BV(PC1); // nazad leviy
PORTC |= _BV(PC2); // nazad praviy

           for (int i = 0; i < 1; i++)
           {
           _delay_ms(4000);   // Ждем 4 сек.
           }


// уход влево

PORTC |= _BV(PC0); //  1 hod
PORTC |= _BV(PC1); //  1 lev
PORTC &= ~_BV(PC2); // 0 pra

}

// если бамперы не включены, то едем вперед

PORTC |= _BV(PC0); //    1 на ход
PORTC &= ~_BV(PC1); //   0 на лево
PORTC &= ~_BV(PC2); //   0 на право

}
}


Последний раз редактировалось Dorry 19 май 2011, 00:21, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 18 май 2011, 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Ищите в хеадерах, как объявлено PIND.4
наверняка эта конструкция на чтение не работает.
А может и вообще не работает, вы откуда такое срисовали?
Что за компилятор?

И это... код в теги уберите


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 00:20 
Не в сети

Зарегистрирован: 11 апр 2011, 12:53
Сообщения: 17
Откуда: Брянск
прог. языки: basic, С
ФИО: Алексей Смирнов
"Конструкция не работает на чтение". Что это значит? Надо что-то объявить?

Взял отсюда. В конце страницы есть примеры с IF:
http://www.123avr.com/05a.htm

Компилятор WinAVR.

Убрал в теги :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 01:12 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Меньше читайте всякой ерунды. То что там описано не имеет к Си никакого отношения. Фокусы типа #asm("") или PINB.2 - это выкрутасы специфичные для компилятора.
Конкретно на той страничке описан компилятор CodeVisionAVR - наверное в нем это бы сработало.

Напишите по-человечески - на СТАНДАРТНОМ СИ, который все понимают:
(PINB & 0x04)
и не парьте мозг себе и окружающим :)

Книжки надо читать и документацию от производителя, а не форумы и сомнительные бложики. :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 08:53 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Вот не надо флейм разводить на ровном месте!

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 14:10 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Michael_K писал(а):
Напишите по-человечески - на СТАНДАРТНОМ СИ, который все понимают:
(PINB & 0x04)
и не парьте мозг себе и окружающим :)

Я что-то не нашел в спецификации Си ни оператора ни зарезервированного слова PINB. Плохо искал?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 14:27 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
В _спецификации_ Си также нет слова printf()
Потому что это не ключевое слово языка, а библиотечная функция.
Точно такая же, как и любая другая.

Ровно то же самое касается и PINB - оно определено дефайном в хеадере
и к языку не имеет никакого отношения.

А вот определить констукцию типа #asm или PINB.4 в стандартном Си невозможно.
Это синтаксически неверно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 14:51 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
я правильно понимаю, что можно сделать структуру, но поле в ней назвать "2" - нельзя?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 15:04 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2dccharacter: Как вариант - просто попробуйте написать, какая конструкция в стандартном Си даёт такую же штуку, как "PINC.4" в CvAVR. И всё будет ясно - либо у вас это не получилось и это уже не стандартный Си, либо у вас всё получилось и ваша конструкция есть доказательство вашей правоты.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пришло время убирать !!!
СообщениеДобавлено: 19 май 2011, 15:40 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
dccharacter писал(а):
я правильно понимаю, что можно сделать структуру, но поле в ней назвать "2" - нельзя?

Да, можно сделать структуру и, по-моему, даже упаковка битовых полей прописана в стандарте, начиная со С99, но поле нельзя назвать цифрой.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1366 ]  На страницу Пред.  1 ... 35, 36, 37, 38, 39, 40, 41 ... 92  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO