roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 29 янв 2014, 16:18 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
баба яга не против. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 29 янв 2014, 22:49 
Не в сети

Зарегистрирован: 01 окт 2013, 17:37
Сообщения: 8
Да, с таймерами я работать не умею пока что, надо разбираться.
Почитаю, подумаю, переделаю код, выложу.
Программирование на С начал изучать только.
Что делает break и return я понимаю, но вот только без return ничего работать с таким кодом не хочет, хотя по мне там return и не нужен, и функции не int а void должны быть, ток у меня тогда компилятор ошибку выдает.
if (buttonState == HIGH)
int up = up_down1 ();

то если функция up_dovn1 () будет такой:
void up_down1 ()
{
  for(pos = 1; pos < 80; pos += 1) 
  {   
    ser1.write(pos);         
    delay(20);
  }
}

Ошибка.
Но она же ничего возвращать не должна. Или я в ччм то ошибаюсь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 29 янв 2014, 23:23 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
ложите плату в сторонку, запускаете на компьютере какую среду разработки, что бы на си можно было консольные приложения писать и учите азы языка. только стандартные библиотеки, чистый си, пару книжек с задачами. через несколько месяцев можно и с ардуинкой начинать играться :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 29 янв 2014, 23:47 
Не в сети

Зарегистрирован: 01 окт 2013, 17:37
Сообщения: 8
Я всеже постараюсь совместить узучение С с игрой с ардуино, чтобы не так скучно было. Я начал с 2х книг:
1) Белов А.В.Разработка устройств на микроконтроллерах AVR: шагаем от «чайника» до профи
2) Дэвид Гриффитс, Дон Гриффитс. Изучаем программирование на С.
+ сайт arduino.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 30 янв 2014, 04:28 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
пока результатом этих попыток является непонимание, что для чего нужно и как работает. это сейчас вы можете видеть, что что-то не работает или компилятор ошибки выдаёт и всё-равно даже не понимаете, что вы не понимаете. потом может быть намного забавней - у вас даже не будет подсказок. ещё фокус в том, что недостаточно зазубрить все эти конструкции языка и прочее, ещё нужно это всё правильно применять и научиться создавать алгоритмы, а на это уйдёт далеко не пара-тройка месяцев. одни могут схватиться сразу за всё и у них получается. другие тратят сумарно намного больше времени, чем если бы они по отдельности всё делали и в итоге могут на выходе получить очень посредственные знания/навыки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 19:12 
Не в сети

Зарегистрирован: 10 июл 2014, 19:00
Сообщения: 8
Всем привет.
Разьясните ситуацию, пожалуйста.
Идея - отсылаем по сериалу на ардуину с компа "1" - ардуино мигает в одной последоватиельности лампочек, отправляем "2" - в другой последовательности. Причем при отсылке на ардуино команды запуска функции перебора на компьютер обратно отсылается информация о принятой команде (1 или 2) и проверочная информация (это уже для себя как проверка) - какой именно массив, цикл работает. Но при работе, происходят сбои: При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается... даже при отсылке "2" - ардуино ее не воспринимает почему то... почему?

Код:

Код:
int pin13 =13;
int pin12 =12;
int pin11 =11;
int pin10 =10;
byte massive1[] ={13,12,11,10};
byte massive2[] ={10,11,12,13};

void setup()
{
    pinMode(pin13, OUTPUT);
    pinMode(pin12, OUTPUT);
    pinMode(pin11, OUTPUT);
    pinMode(pin10, OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    while(Serial.available()==0);
    int val = Serial.read() -'0';
   
    while(val == 1)
    {
        for(int i =0; i<4; i++)
          {
              Serial.println("Massive 1 is working ");
              Serial.println(massive1[i]);
              Serial.println(val);
              digitalWrite(massive1[i],HIGH);
              delay(5);
              digitalWrite(massive1[i],LOW);
              delay(400);
         }
    }
         
    while(val == 2)
    {
        for(int i =0; i<4; i++)
          {
              Serial.println("Massive 2 is working ");
              Serial.println(massive2[i]);
              Serial.println(val);
              digitalWrite(massive2[i],HIGH);
              delay(5);
              digitalWrite(massive2[i],LOW);
              delay(400);
         }   
    }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 20:17 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
а как по вашему оно выйдет из цикла
Код:
while(val == 1)
{
}

:) ?
или вы там где-то видите, что val меняется? или как-то меняйте val или смотрите, что такое if


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 22:18 
Не в сети

Зарегистрирован: 10 июл 2014, 19:00
Сообщения: 8
конечно val меняется, я ее меняю посылая "2" через сериал на ардуино, которая потом присваивается к val.
Так почему жее val не изменяет свое значение (послали 1 - цикл запустился - все хорошо, послали 2 - val не изменяет свое значение 2 - почему ?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 22:46 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
1) из цикла
Код:
while(val == 1){}

оно никогда не выходит, т.к. val в нём никогда не меняется
2) если не согласны, перейдите к п. 1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 22:53 
Не в сети

Зарегистрирован: 10 июл 2014, 19:00
Сообщения: 8
Оно не выходит из цикла при условии если val всегда = 1.
И откуда вы из выражения сравнения решили, что оно никогда не меняется? я про весь код говорю, а не только про этот цикл
Я же пишу, что Я САМ ЧЕРЕЗ СЕРИАЛ ДЛЯ VAL даю значение 2, но оно его не принимает... почему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 23:06 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
Цитата:
При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...

присвоили единицу, зашло в вайл-цикл, в нём вал не меняется, т.е. всегда равен единице. :) шифт не повышайте


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 10 июл 2014, 23:11 
Не в сети

Зарегистрирован: 10 июл 2014, 19:00
Сообщения: 8
Angel71 писал(а):
Цитата:
При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...

присвоили единицу, зашло в вайл-цикл, в нём вал не меняется, т.е. всегда равен единице. :) шифт не повышайте

я знаю, что так оно и есть.
Я спрашиваю - почему когда я отсылаю двойку, val не принимает значение 2 и запущенный цикл (там где val =1) продолжает работать... почему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 11 июл 2014, 00:21 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
предположим ежик телепортироваться не может. так вот, идёт он идёт и бац, упал в яму. что-то там карабкается, пытаеться выбраться. не получается. в общем сел он и думает, вот если через пять минут не выберусь, пойду домой за лестницей и тогда смогу выбраться из ямы.
а теперь подумайте, каким таким чудным образом ёжик выберится из ямы, что бы пойти за лестницей, что бы с её помощью выбраться из ямы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 11 июл 2014, 00:50 
Не в сети

Зарегистрирован: 10 июл 2014, 19:00
Сообщения: 8
Разве это выражение не должно выполняться не смотря на то какое значение имеет val и вообще какой цикл крутится? Это же выражение не в цикле, отсылая 1 или 2 на ардуино - загорается RX- светодиод - то есть ардуино получила переданные данные. Тогда почему она не выходит из цикла и val не приобретает новое значение?

Код:
int val = Serial.read() -'0';


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите с кодом
СообщениеДобавлено: 11 июл 2014, 01:15 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
начинает выполняться loop. в нём вайл выполняется, пока что-то в уарт не прилетит. прилетело. этой чудной строчкой
Цитата:
int val = Serial.read() -'0';

val`у присваивается некое непонятное число. что вы там в уарт отсылаете и что там val`у присваивается, вникать даже и пытаться не буду.
вариант первый: предположим, что val`у присвоено число 1. дальше выполнение переходит в этот while (val == 1) и выполняться этот цикл будет бесконечно, т.к. внутри этого цикла val`у значения нигде не присваивается, т.е. и значение никогда не меняется. а раз val никогда не поменяется, то и из цикла не выйдет.
вариант второй: val`у присвоено число 2. всё тоже самое, только застрянет в while (val == 1)
вариант третий: val`у присвоено число, отличное от 1 или 2. код циклов "while (val == 1){}" и "while (val == 2){}" выполняться не будет.
:) если и после этого вам что-то непонятно, значит или я не достаточно доходчиво объясняю или :) в общем ограничимся вариантом, что плохо объясняю


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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