roboforum.ru

Технический форум по робототехнике.

Подскажите с кодом

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Подскажите с кодом

Сообщение Angel71 » 29 янв 2014, 16:18

баба яга не против. :)
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Подскажите с кодом

Сообщение kirill92 » 29 янв 2014, 22:49

Да, с таймерами я работать не умею пока что, надо разбираться.
Почитаю, подумаю, переделаю код, выложу.
Программирование на С начал изучать только.
Что делает 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);
  }
}

Ошибка.
Но она же ничего возвращать не должна. Или я в ччм то ошибаюсь?
kirill92
 
Сообщения: 8
Зарегистрирован: 01 окт 2013, 17:37

Re: Подскажите с кодом

Сообщение Angel71 » 29 янв 2014, 23:23

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

Re: Подскажите с кодом

Сообщение kirill92 » 29 янв 2014, 23:47

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

Re: Подскажите с кодом

Сообщение Angel71 » 30 янв 2014, 04:28

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

Re: Подскажите с кодом

Сообщение SSnick » 10 июл 2014, 19:12

Всем привет.
Разьясните ситуацию, пожалуйста.
Идея - отсылаем по сериалу на ардуину с компа "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);
         }   
    }
}
SSnick
 
Сообщения: 8
Зарегистрирован: 10 июл 2014, 19:00

Re: Подскажите с кодом

Сообщение Angel71 » 10 июл 2014, 20:17

а как по вашему оно выйдет из цикла
Код: Выделить всёРазвернуть
 while(val == 1)
{
}

:) ?
или вы там где-то видите, что val меняется? или как-то меняйте val или смотрите, что такое if
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Подскажите с кодом

Сообщение SSnick » 10 июл 2014, 22:18

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

Re: Подскажите с кодом

Сообщение Angel71 » 10 июл 2014, 22:46

1) из цикла
Код: Выделить всёРазвернуть
while(val == 1){}

оно никогда не выходит, т.к. val в нём никогда не меняется
2) если не согласны, перейдите к п. 1
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Подскажите с кодом

Сообщение SSnick » 10 июл 2014, 22:53

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

Re: Подскажите с кодом

Сообщение Angel71 » 10 июл 2014, 23:06

При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...

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

Re: Подскажите с кодом

Сообщение SSnick » 10 июл 2014, 23:11

Angel71 писал(а):
При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...

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

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

Re: Подскажите с кодом

Сообщение Angel71 » 11 июл 2014, 00:21

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

Re: Подскажите с кодом

Сообщение SSnick » 11 июл 2014, 00:50

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

Код: Выделить всёРазвернуть
int val = Serial.read() -'0';
SSnick
 
Сообщения: 8
Зарегистрирован: 10 июл 2014, 19:00

Re: Подскажите с кодом

Сообщение Angel71 » 11 июл 2014, 01:15

начинает выполняться 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){}" выполняться не будет.
:) если и после этого вам что-то непонятно, значит или я не достаточно доходчиво объясняю или :) в общем ограничимся вариантом, что плохо объясняю
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Пред.След.

Вернуться в Arduino и другие Xduino

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

Сейчас этот форум просматривают: Google [Bot] и гости: 10