Технический форум по робототехнике.
Павел_Сергеевич » 03 фев 2015, 23:48
всем доброе время суток. не нашел в какой раздел запихнуть. выложу сюда. подскажите где ошибка. при компиляции выдает ошибку но потом программа запускается и работает.
- Код: Выделить всё • Развернуть
#include<iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
char gh;
while(ch!='\r')
{
cout<<"vvedite signal datchika horizont (1/0)\2\n";
while(ch!='0')
{
ch=getche();
if(ch=='1')
cout<<"\nPovorot v pravo na 0.01s\n";
else
cout<<"\nPovorot v levo na 0.1s\n";
}
ch++;
while(gh!='0')
{
gh=getche();
if(gh=='1')
cout<<"\nPovorot v levo na 0.01s\n";
else
cout<<"\nPovorot v praqvo na 0.1s\n";
}
gh++;
}
return 0;
}
вот продолжение кода
- Код: Выделить всё • Развернуть
include<iostream>
#include <conio.h>
using namespace std;
int main()
{
int rh;
int lh;
int rv;
int lv;
while(rh!='\r')
{
cout<<"vvedite signal datchika horizont (1/2) i datchika vertikal (3/4) \2\n";
while(rh!='2' && rv!='4')
{
rh=getche();
rv=getche();
if(rh=='1' && rv=='3')
cout<<"\nPovorot v pravo na 0.01s, Povorot vniz na 0.01s\n";
else
if(rv=='3')
cout<<"\nPovorot vniz na 0.01s\n";
else
if(rh=='1')
cout<<"\nPovorot v pravo na 0.01s\n";
else
cout<<"\nPovorot v levo na 0.1s, Povorot vverh na 0.01s\n";
}
rh++; rv++;
while(lh!='2' && lv!='4')
{
lh=getche();
lv=getche();
if(lh=='1' && lv=='3')
cout<<"\nPovorot v levo na 0.01s, Povorot vverh na 0.01s\n";
else
if(lv=='3')
cout<<"\nPovorot vverh na 0.01s\n";
else
if(lh=='1')
cout<<"\nPovorot v levo na 0.01s\n";
else
cout<<"\nPovorot v pravo na 0.1s, Povorot vniz na 0.01s\n";
}
lh++; lv++;
}
return 0;
}
Последний раз редактировалось
Павел_Сергеевич 04 фев 2015, 00:21, всего редактировалось 1 раз.
holomrn » 03 фев 2015, 23:57
Наверное стоит написать какую ошибку. А то телепаты все в теплых краях.
Павел_Сергеевич » 04 фев 2015, 00:28
run-time check failure #3-the variable 'rh' is being used without being initialized.
holomrn » 04 фев 2015, 01:37
Ну и что непонятного? У вас в rh мусор (не инициализирована), а уже используется.
- Код: Выделить всё • Развернуть
include<iostream>
int main()
{
int rh;
while(rh!='\r')
так понятнее?
Павел_Сергеевич » 04 фев 2015, 10:44
хорошо. место ошибки найдено. но поскольку я далеко не профи, мне этого мало. пришлите исправленный вариант.
Добавлено спустя 1 час 11 минут 19 секунд:для чего все собственно и делается:
- Код: Выделить всё • Развернуть
#include<iostream>
#include <conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =8;
int PinF =7;
void setup()
{
pinMode(PinA, OUTPUT);
pinMode(PinB, OUTPUT);
pinMode(PinC, OUTPUT);
pinMode(PinD, OUTPUT);
pinMode(PinE, INPUT);
pinMode(PinF, INPUT);
}
void loop()
{
int main()
{
int ch=PinE;
int gh=PinE;
while(ch!='\r') //для бесконечного цыкла
{
while(ch=0, ch<500)
digitalWrite(PinA, HIGH);
delay(100);
digitalWrite(PinA, LOW);
delay(10);
{
if(ch>500)
digitalWrite(PinA, HIGH);
delay(10);
digitalWrite(PinA, LOW);
delay(2);
else
digitalWrite(PinB, HIGH);
delay(10);
digitalWrite(PinB, LOW);
delay(2);
}
while(ch=0, ch<500)
digitalWrite(PinA, HIGH);
delay(100);
digitalWrite(PinA, LOW);
delay(10);
{
if(ch>500)
digitalWrite(PinB, HIGH);
delay(10);
digitalWrite(PinB, LOW);
delay(2);
else
digitalWrite(PinA, HIGH);
delay(10);
digitalWrite(PinA, LOW);
delay(2);
}
}
}
}
тоже ошибку выдает но другую:
dance.ino: In function 'void loop()':
dance:23: error: a function-definition is not allowed here before '{' token
dance:64: error: expected `}' at end of input
Madf » 04 фев 2015, 11:59
Вы не профи - вам пофиг.
Говорите "спасибо".
Разбирайте ошибки.
Учите язык.
Больше практики...инет в помощь.
Romikgy » 04 фев 2015, 12:10
в loop не надо использовать main !
int rh=0;
Павел_Сергеевич » 04 фев 2015, 14:29
Romikgy писал(а):в loop не надо использовать main !
int rh=0;
с присвоением 0 получилось, огромное спасибо! четко и понятно.
А вот ардуино теперь ругается на else
- Код: Выделить всё • Развернуть
#include<iostream>
#include <conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =8;
int PinF =7;
void setup()
{
pinMode(PinA, OUTPUT);
pinMode(PinB, OUTPUT);
pinMode(PinC, OUTPUT);
pinMode(PinD, OUTPUT);
pinMode(PinE, INPUT);
pinMode(PinF, INPUT);
}
void loop()
{
int ch=PinE;
int gh=PinE;
while(ch!='\r') //для бесконечного цикла
{
while(ch=0, ch<500)
digitalWrite(PinA, HIGH);
delay(100);
digitalWrite(PinA, LOW);
delay(10);
{
if(ch>500)
digitalWrite(PinA, HIGH);
delay(10);
digitalWrite(PinA, LOW);
delay(2);
else
digitalWrite(PinB, HIGH);
delay(10);
digitalWrite(PinB, LOW);
delay(2);
}
while(ch=0, ch<500)
digitalWrite(PinA, HIGH);
delay(100);
digitalWrite(PinA, LOW);
delay(10);
{
if(ch>500)
digitalWrite(PinB, HIGH);
delay(10);
digitalWrite(PinB, LOW);
delay(2);
else
digitalWrite(PinA, HIGH);
delay(10);
digitalWrite(PinA, LOW);
delay(2);
}
}
}
Boidar_test.ino: In function 'void loop()':
Boidar_test:38: error: 'else' without a previous 'if'
Boidar_test:55: error: 'else' without a previous 'if'
RootAdmin » 04 фев 2015, 15:54
А скобки где?! "{" Надо хоть читать, что компилятор донести пытается. И перед программированием язык подучить.
Добавлено спустя 1 минуту 26 секунд:операторы после условия - заключаются в скобки.
Читаем.
http://arduino.ru/Reference/Else
Romikgy » 04 фев 2015, 15:54
все что хотите делать при условии if(ch>500) должно быть заключено в { }
после else также должно быть заключено в { }
holomrn » 04 фев 2015, 18:22
Павел_Сергеевич по языку читать букварь, а по ардуине посмотреть уроки на амперке. И только потом возвращайтесь с вопросами.
*букварь - K&R - Керниган, Ричи "Язык программирования С"
Павел_Сергеевич » 04 фев 2015, 21:28
Romikgy писал(а):все что хотите делать при условии if(ch>500) должно быть заключено в { }
после else также должно быть заключено в { }
Как всегда, все четко и понятно, при прогоне все работает. спасибо!
Добавлено спустя 4 минуты 38 секунд:holomrn писал(а):Павел_Сергеевич по языку читать букварь, а по ардуине посмотреть уроки на амперке. И только потом возвращайтесь с вопросами.
*букварь - K&R - Керниган, Ричи "Язык программирования С"
я читаю ооп лафоре, пока дошод до continue в циклах.
holomrn » 04 фев 2015, 22:03
До оопа надо хоть основы языка выучить. Чтобы не спрашивать куда делась фигурная скобка и почему компилятор ругается на использование неинициализированной переменной.
Павел_Сергеевич » 06 фев 2015, 00:23
не меняет направление вращения. завис на первом цикле и не переходит дальше. мониторинг порта показывпет при открытом экране между диодом и сенсором 902, про закрытом 180-200.
- Код: Выделить всё • Развернуть
#include<iostream>
#include<conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =0;
void setup()
{
Serial.begin(9600); //установка общение с компом в скобках скорость
pinMode(PinA, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinB, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinC, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinD, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinE, INPUT); //УСТАНОВКА КАК ВХОД
}
void loop()
{ //горизонталь
int ch=PinE;
while(ch!='\r')
{
digitalWrite(PinA, HIGH);
Serial.println(analogRead(ch));
delay(100); // первый импульс для приведения датчиков в чувства
digitalWrite(PinA, LOW);
delay(10); // остановка для запуска основной программы
if(ch>500)
{
digitalWrite(PinA, HIGH);
Serial.println(analogRead(ch));
delay(100);
digitalWrite(PinA, LOW);
delay(1);
}
else
{
digitalWrite(PinA, LOW);
delay(1);
}}
{
digitalWrite(PinB, HIGH);
Serial.println(analogRead(ch));
delay(10); // первый импульс для приведения датчиков в чувства
digitalWrite(PinB, LOW);
delay(1); // остановка для запуска основной программы
{
if(ch>500)
{
digitalWrite(PinB, HIGH);
Serial.println(analogRead(ch));
delay(10);
digitalWrite(PinB, LOW);
delay(2);
}
else
{
digitalWrite(PinB, LOW);
delay(2);
}
}}
}
я думаю else тут вообще лишнее. просто код в стадии эксперементов.
Angel71 » 06 фев 2015, 01:38
первый цикл бесконечный по определению. при входе во второй он становится бесконечным по факту и else к этому вообще не при чём. для начала или тренируйте внимательность и уменее считать хотя бы скобки или нормально код форматировать. а в общем вам пока лучше уделять побольше времени на изучение самого языка и поменьше на всякие ардуинки и потуги покодить ваши хотелки.
по текущему коду вообще мало что понятно, что хотели и где именно и как нужно переделывать. кусок после while цикла пока абсолютно не имеет смысла хотя бы по той причине, что он никогда не выполнится. в самом while тоже только телепатией заниматься. допустим смотря на "if(ch>500)". может вам еще разок нужно почитать про функции и присваивание значений? и т.д. по всему коду.
Последний раз редактировалось
Angel71 06 фев 2015, 02:20, всего редактировалось 1 раз.