Технический форум по робототехнике.
Angel71 » 29 янв 2014, 16:18
баба яга не против.

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);
}
}
Ошибка.
Но она же ничего возвращать не должна. Или я в ччм то ошибаюсь?
Angel71 » 29 янв 2014, 23:23
ложите плату в сторонку, запускаете на компьютере какую среду разработки, что бы на си можно было консольные приложения писать и учите азы языка. только стандартные библиотеки, чистый си, пару книжек с задачами. через несколько месяцев можно и с ардуинкой начинать играться

kirill92 » 29 янв 2014, 23:47
Я всеже постараюсь совместить узучение С с игрой с ардуино, чтобы не так скучно было. Я начал с 2х книг:
1) Белов А.В.Разработка устройств на микроконтроллерах AVR: шагаем от «чайника» до профи
2) Дэвид Гриффитс, Дон Гриффитс. Изучаем программирование на С.
+ сайт arduino.ru
Angel71 » 30 янв 2014, 04:28
пока результатом этих попыток является непонимание, что для чего нужно и как работает. это сейчас вы можете видеть, что что-то не работает или компилятор ошибки выдаёт и всё-равно даже не понимаете, что вы не понимаете. потом может быть намного забавней - у вас даже не будет подсказок. ещё фокус в том, что недостаточно зазубрить все эти конструкции языка и прочее, ещё нужно это всё правильно применять и научиться создавать алгоритмы, а на это уйдёт далеко не пара-тройка месяцев. одни могут схватиться сразу за всё и у них получается. другие тратят сумарно намного больше времени, чем если бы они по отдельности всё делали и в итоге могут на выходе получить очень посредственные знания/навыки.
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);
}
}
}
Angel71 » 10 июл 2014, 20:17
а как по вашему оно выйдет из цикла
- Код: Выделить всё • Развернуть
while(val == 1)
{
}

?
или вы там где-то видите, что val меняется? или как-то меняйте val или смотрите, что такое if
SSnick » 10 июл 2014, 22:18
конечно val меняется, я ее меняю посылая "2" через сериал на ардуино, которая потом присваивается к val.
Так почему жее val не изменяет свое значение (послали 1 - цикл запустился - все хорошо, послали 2 - val не изменяет свое значение 2 - почему ?)
Angel71 » 10 июл 2014, 22:46
1) из цикла
- Код: Выделить всё • Развернуть
while(val == 1){}
оно никогда не выходит, т.к. val в нём никогда не меняется
2) если не согласны, перейдите к п. 1
SSnick » 10 июл 2014, 22:53
Оно не выходит из цикла при условии если val всегда = 1.
И откуда вы из выражения сравнения решили, что оно никогда не меняется? я про весь код говорю, а не только про этот цикл
Я же пишу, что Я САМ ЧЕРЕЗ СЕРИАЛ ДЛЯ VAL даю значение 2, но оно его не принимает... почему?
Angel71 » 10 июл 2014, 23:06
При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...
присвоили единицу, зашло в вайл-цикл, в нём вал не меняется, т.е. всегда равен единице.

шифт не повышайте
SSnick » 10 июл 2014, 23:11
Angel71 писал(а): При отсылке "1" - процесс зацикливается в первом цикле и выйти из него уже не получается...
присвоили единицу, зашло в вайл-цикл, в нём вал не меняется, т.е. всегда равен единице.

шифт не повышайте
я знаю, что так оно и есть.
Я спрашиваю - почему когда я отсылаю двойку, val не принимает значение 2 и запущенный цикл (там где val =1) продолжает работать... почему?
Angel71 » 11 июл 2014, 00:21
предположим ежик телепортироваться не может. так вот, идёт он идёт и бац, упал в яму. что-то там карабкается, пытаеться выбраться. не получается. в общем сел он и думает, вот если через пять минут не выберусь, пойду домой за лестницей и тогда смогу выбраться из ямы.
а теперь подумайте, каким таким чудным образом ёжик выберится из ямы, что бы пойти за лестницей, что бы с её помощью выбраться из ямы.
SSnick » 11 июл 2014, 00:50
Разве это выражение не должно выполняться не смотря на то какое значение имеет val и вообще какой цикл крутится? Это же выражение не в цикле, отсылая 1 или 2 на ардуино - загорается RX- светодиод - то есть ардуино получила переданные данные. Тогда почему она не выходит из цикла и val не приобретает новое значение?
- Код: Выделить всё • Развернуть
int val = Serial.read() -'0';
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){}" выполняться не будет.

если и после этого вам что-то непонятно, значит или я не достаточно доходчиво объясняю или

в общем ограничимся вариантом, что плохо объясняю