немогу разобраться с ошибками при компиляци
Offline
Зарегистрирован: 19.02.2016
Доброго времени суток. Только начал прользоваться ARDUINO.
Чтоб не сжечь плату я пробую все делать сперва на эмуляторе https://123d.circuits.io
Повторив несколько несложных схем, решил сдеать чтото свое. Но проблема при компилации выдает ошибки. Большую часть я исправил а вот с оставшимися не могу разобраться. привожу код ниже.
// библиотека с коммандами для сервоприводов #include <Servo.h> //описание библиотеки по ссылке - arduino.cc/en/Reference/Servo const int LED_GO = 7; //обьявляем константу для лампы движения и номер пина 7 const int LED_STOP = 6; //объявляем константу для лампы остановки и номер пина 6 const int knopka1 = 5; //Объявляем константу для кнопки и номер пина 5 Servo servo1; // объект сервопривод №1 Servo servo2; // серво привод №2 void setup() { pinMode(LED_GO, OUTPUT); pinMode(LED_STOP, OUTPUT); pinMode(knopka1, INPUT); servo2.attach(11); // Серво привод подключен к пину 11 servo1.attach(9); // Сервопривод подключен к цифровому выходу 9 //servo1.detach() для расслабления мотора сервопривода } void loop() { int knopkaStatus; knopkaStatus = digitalRead(knopka1); if (knopkaStatus == HIGT) { digitalWrite(LED_GO = HIGT); // Крутилка на полной скорости: servo1.write(90); // повернись на 90 град. delay(1000); // пауза чтобы он успел повернуться servo2.write(90); //второй серво привод поворот 90 град delay(1000); //пуза второго servo1.write(180); // повернись на 180 град. delay(1000); // пауза servo2.write(180); //поворот второго привода на 180 град delay(1000); //пауза второго servo1.write(0); // повернись до уровня 0 град. delay(1000); // пауза servo2.write(0); //поворот второго на 0 град delay(1000); //пауза второго } else { digitalWrite(LED_STOP = LOW); } }
Вот ошибки
In function 'void loop()': 24:22: error: 'HIGT' was not declared in this scope 43:26: error: assignment of read-only variable 'LED_STOP' 43:31: error: too few arguments to function 'void digitalWrite(uint8_t, uint8_t)' 1:0: 126:6: note: declared here
Схема ткая. Два сервопривода. Задан темп вращения. Два светодиода. Кнопка. итог. Жмешь кнопку серва приводы круятся в заданном темпе зеленый светодиод горит. Отпускаешь кнопку свето диод горит красный сервомоторы останавливаются.
-
имеется код
//pins for the LEDs:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;const int redPin2 = 9;
const int greenPin2 = 10;
const int bluePin2 = 11;#define REDPIN 3
#define GREENPIN 5
#define BLUEPIN 6#define FADESPEED 5
void setup() {
// initialize serial:
Serial.begin(9600);// make the pins outputs:
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);pinMode(redPin2, OUTPUT);
pinMode(greenPin2, OUTPUT);
pinMode(bluePin2, OUTPUT);Serial.print(«Arduino control RGB LEDs Connected OK ( Sent From Arduinno Board )»);
Serial.print(‘n’);
}void loop() {
// if there’s any serial available, read it:
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
int red = Serial.parseInt();
// do it again:
int green = Serial.parseInt();
// do it again:
int blue = Serial.parseInt();int red2 = Serial.parseInt();
// do it again:
int green2 = Serial.parseInt();
// do it again:
int blue2 = Serial.parseInt();// look for the newline. That’s the end of your
// sentence:
if (Serial.read() == ‘n’) {
// constrain the values to 0 — 255 and invert
// if you’re using a common-cathode LED, just use «constrain(color, 0, 255);»
// This is for COMMON ANODE
//red = 255 — constrain(red, 0, 255);
//green = 255 — constrain(green, 0, 255);
//blue = 255 — constrain(blue, 0, 255);
red = constrain(red, 0, 255);
green = constrain(green, 0, 255);
blue = constrain(blue, 0, 255);
red2 = constrain(red2, 0, 255);
green2 = constrain(green2, 0, 255);
blue2 = constrain(blue2, 0, 255);// fade the red, green, and blue legs of the LED:
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
analogWrite(redPin2, red2);
analogWrite(greenPin2, green2);
analogWrite(bluePin2, blue2);// print the three numbers in one string as hexadecimal:
Serial.print(«Data Response : «);
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}}
подключаю ардуино к смартфону по ЮСБ выбираю цвет РГБ светодиода. После отключения смартфона все сбивается. Возможно в коде можно что-то дописать чтобы значение сохранялось в памяти ардуино после отключения от смарта ?
-
Сохраните данные в EEPROM.
-
извините а можно более подробно ?
-
В начало скетча
#include <EEPROM.h>
В setup() после задания режима пиновred = EEPROM.read(1);
analogWrite(redPin, red);Поскольку значение 0-255 хватит и одной ячейки EEPROM для каждого цвета.
Для других цветов аналогично, только указать в качестве номера ячейки не 1, а что-то другое.В loop() после строки if (Serial.read() == ‘n’) {
т.е. когда ввод уже завершен.EEPROM.write(1, red);
Для других цветов аналогично, только указать в качестве номера ячейки не 1, а что-то другое.
С этим (с записью) надо осторожнее, чтобы не случилось непрерывной записи, а то быстро ресурс EEPROM уйдет в никуда (количество записей ограничено).
Есть альтернатива, только, мягко говоря, несколько избыточная в данном конкретном случае — запись в конфигурационный файл на SD карту.
-
#include <EEPROM.h>
//pins for the LEDs:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;const int redPin2 = 9;
const int greenPin2 = 10;
const int bluePin2 = 11;#define REDPIN 3
#define GREENPIN 5
#define BLUEPIN 6#define FADESPEED 5
void setup() {
// initialize serial:
Serial.begin(9600);// make the pins outputs:
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);redPin = EEPROM.read(1);
analogWrite(redPin, red)
greenPin = EEPROM.read(2);
analogWrite(greenPin, green)
bluePin = EEPROM.read(3);
analogWrite(bluePin, blue)pinMode(redPin2, OUTPUT);
pinMode(greenPin2, OUTPUT);
pinMode(bluePin2, OUTPUT);Serial.print(«Arduino control RGB LEDs Connected OK ( Sent From Arduinno Board )»);
Serial.print(‘n’);
}void loop() {
// if there’s any serial available, read it:
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
int red = Serial.parseInt();
// do it again:
int green = Serial.parseInt();
// do it again:
int blue = Serial.parseInt();int red2 = Serial.parseInt();
// do it again:
int green2 = Serial.parseInt();
// do it again:
int blue2 = Serial.parseInt();// look for the newline. That’s the end of your
// sentence:
if (Serial.read() == ‘n’)
EEPROM.write(1, red);
EEPROM.write(2, green);
EEPROM.write(3, blue);{
// constrain the values to 0 — 255 and invert
// if you’re using a common-cathode LED, just use «constrain(color, 0, 255);»
// This is for COMMON ANODE
//red = 255 — constrain(red, 0, 255);
//green = 255 — constrain(green, 0, 255);
//blue = 255 — constrain(blue, 0, 255);
red = constrain(red, 0, 255);
green = constrain(green, 0, 255);
blue = constrain(blue, 0, 255);
red2 = constrain(red2, 0, 255);
green2 = constrain(green2, 0, 255);
blue2 = constrain(blue2, 0, 255);// fade the red, green, and blue legs of the LED:
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
analogWrite(redPin2, red2);
analogWrite(greenPin2, green2);
analogWrite(bluePin2, blue2);// print the three numbers in one string as hexadecimal:
Serial.print(«Data Response : «);
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}}
Так Должно получится ? выдает ошибку
Arduino: 1.6.2 (Windows 7), Плата»Arduino Uno»sketch_jun04a.ino: In function ‘void setup()’:
sketch_jun04a.ino:23:8: error: assignment of read-only variable ‘redPin’
sketch_jun04a.ino:24:21: error: ‘red’ was not declared in this scope
sketch_jun04a.ino:26:1: error: expected ‘;’ before ‘pinMode’
sketch_jun04a.ino:30:10: error: assignment of read-only variable ‘greenPin’
sketch_jun04a.ino:31:23: error: ‘green’ was not declared in this scope
sketch_jun04a.ino:32:1: error: expected ‘;’ before ‘bluePin’
sketch_jun04a.ino:33:22: error: ‘blue’ was not declared in this scope
sketch_jun04a.ino:36:1: error: expected ‘;’ before ‘pinMode’
-
assignment of read-only variable ‘redPin’ — нельзя присвоить значение константной переменной.
‘red’ was not declared in this scope — переменная red не объявлена.
expected ‘;’ before ‘pinMode’ — пропущена ; перед ‘pinMode’.Напишите комментарии к своему коду и разберитесь, что в какой переменной должно лежать и при каких условиях можно считывать новые переменные из порта. А еще лучше нарисуйте алгоритм работы своей программы и перепишите код в соответствии с ним.
-
redPin = EEPROM.read(1); — это неправильно.
Во-первых redPin объявлена как const, т.е. не может меняться.
Во-вторых, по смыслу это совсем другая переменная (номер пина, а не переменная для уровня цвета).Выводы:
Первое, надо объявления переменных вынести перед loop
int red;
и т.д.
Второе, результат вызова EEPROM.read(…); присваивать не номерам пинов, а этим самым переменным.
Естественно, также придется убрать int перед переменной red внутри loop(), чтобы использовать ранее объявленное, а не объявлять в этом месте новое. -
Ребята вы меня ваще запутали. Если не сложно напишите как оно должно получится в итоге.
I’m very new to Arduino and experimenting with examples. I have a number of problems when using the following code:
#include <ctype.h>
#include <Arduino.h>
#include "Telegraph.h"
//#include <Telegraph.h>
char* LETTERS[] = {
".-", "-...", "-.-.", "-..", ".", // A-E
"..-.", "--.", "....", "..", ".---", // F-J
"-.-", ".-..", "--", "-.", "---", // K-O
".--.", "--.-", ".-.", "...", "-", // P-T
"..-", "...-", ".--", "-..-", "-.--", // U-Y
"--.." // Z
};
char* DIGITS[] = {
"-----", ".----", "..---", "...--", //0-3
"....-", ".....", "-....", "--...", //4-7
"---..", "----." //8-9
};
Telegraph::Telegraph(const int outputPin, const int ditLength){
_outputPin = outputPin;
_ditLength = ditLength;
_dahLength = dahLength;
pinMode(_outputPin, OUTPUT);
}
void Telegraph::outputCode(const char* code){
for(int i=0; i<strlen(code); i++){
if( code[i] == '.' )
dit();
else
dah();
}
}
void Telegraph::dit(){
Serial.print(".");
outputSymbol(_ditLength);
}
void Telegraph::dah(){
Serial.print("-");
outputSymbol(_dahLength);
}
void Telegraph::outputSymbol(const int length){
digitalWrite(_outputPin, HIGH);
delay(length);
digitalWrite(_outputPin, LOW);
delay(length);
}
void Telegraph::sendMessage(const char* message){
for(int i=0; i < strlen(message); i++){
const char currentChar = toupper(message[i]);
if( isalpha(currentChar) ){
outputCode(LETTERS[currentChar - 'A']);
delay(_dahLength);
}else if(isdigit(currentChar) ){
outputCode(DIGITS[currentChar - '0']);
delay(_dahLength);
}else if(currentChar = ' '){
Serial.print(" ");
delay(_ditLength * 7);
}
}
Serial.println();
}
I get the following errors:
Telegraph.cpp:6:15: error: two or more data types in declaration of ‘LETTERS’
Telegraph.cpp: In constructor ‘Telegraph::Telegraph(int, int)’:
Telegraph.cpp:24:18: error: ‘dahLength’ was not declared in this scope
Telegraph.cpp: In member function ‘void Telegraph::sendMessage(const char*)’:
Telegraph.cpp:58:18: error: ‘LETTERS’ was not declared in this scope
Telegraph.cpp:63:30: error: assignment of read-only variable ‘currentChar’
Sorry if this question is too general but as I mentioned, I’m very new and don’t entirely understand the code.
As is my wont, I’m going to provide a bit of background technical information into the whys and wherefores of this this error.
I’m going to inspect four different ways of initializing C strings and see what the differences between them are. These are the four ways in question:
char *text = "This is some text";
char text[] = "This is some text";
const char *text = "This is some text";
const char text[] = "This is some text";
Now for this I am going to want to change the third letter «i» into an «o» to make it «Thos is some text». That could, in all cases (you would think), be achieved by:
text[2] = 'o';
Now let’s look at what each way of declaring the string does and how that text[2] = 'o';
statement would affect things.
First the most commonly seen way: char *text = "This is some text";
. What does this literally mean? Well, in C, it literally means «Create a variable called text
which is a read-write pointer to this string literal which is held in read-only (code) space.». If you have the option -Wwrite-strings
turned on then you get a warning as seen in the question above.
Basically that means «Warning: You have tried to make a variable that is read-write point to an area you can’t write to». If you try and then set the third character to «o» you would in fact be trying to write to a read-only area and things won’t be nice. On a traditional PC with Linux that results in:
Segmentation Fault
Now the second one: char text[] = "This is some text";
. Literally, in C, that means «Create an array of type «char» and initialize it with the data «This is some text». The size of the array will be big enough to store the data». So that actually allocates RAM and copies the value «This is some text» into it at runtime. No warnings, no errors, perfectly valid. And the right way to do it if you want to be able to edit the data. Let’s try running the command text[2] = 'o'
:
Thos is some text
It worked, perfectly. Good.
Now the third way: const char *text = "This is some text";
. Again the literal meaning: «Create a variable called «text» that is a read only pointer to this data in read only memory.». Note that both the pointer and the data are now read-only. No errors, no warnings. What happens if we try and run our test command? Well, we can’t. The compiler is now intelligent and knows that we are trying to do something bad:
error: assignment of read-only location ‘*(text + 2u)’
It won’t even compile. Trying to write to read-only memory is now protected because we have told the compiler that our pointer is to read-only memory. Of course, it doesn’t have to be pointing to read-only memory, but if you point it to read-write memory (RAM) that memory will still be protected from being written to by the compiler.
Finally the last form: const char text[] = "This is some text";
. Again, like before with []
it allocates an array in RAM and copies the data into it. However, now this is a read-only array. You can’t write to it because the pointer to it is tagged as const
. Attempting to write to it results in:
error: assignment of read-only location ‘*(text + 2u)’
So, a quick summary of where we are:
This form is completely invalid and should be avoided at all costs. It opens the door to all sorts of bad things happening:
char *text = "This is some text";
This form is the right form if you are wanting to make the data editable:
char text[] = "This is some text";
This form is the right form if you want strings that won’t be edited:
const char *text = "This is some text";
This form seems wasteful of RAM but it does have its uses. Best forget it for now though.
const char text[] = "This is some text";
sssemil 4 / 4 / 0 Регистрация: 29.01.2013 Сообщений: 91 |
||||
1 |
||||
Ошибки при компиляции29.08.2013, 17:06. Показов 2740. Ответов 7 Метки нет (Все метки)
Привет. Помогите с ошибками разобратся:
g++ tes.cpp -o tes
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
29.08.2013, 17:06 |
7 |
alsav22 5493 / 4888 / 831 Регистрация: 04.06.2011 Сообщений: 13,587 |
||||
29.08.2013, 17:21 |
2 |
|||
1 |
4 / 4 / 0 Регистрация: 29.01.2013 Сообщений: 91 |
|
29.08.2013, 17:27 [ТС] |
3 |
alsav22, Премного благодарен)
0 |
alsav22 5493 / 4888 / 831 Регистрация: 04.06.2011 Сообщений: 13,587 |
||||
29.08.2013, 17:29 |
4 |
|||
Или так:
1 |
25 / 25 / 0 Регистрация: 10.03.2010 Сообщений: 206 |
|
29.08.2013, 17:36 |
5 |
const char log_path[249] элементы массива изменять нельзя
1 |
sssemil 4 / 4 / 0 Регистрация: 29.01.2013 Сообщений: 91 |
||||
29.08.2013, 18:15 [ТС] |
6 |
|||
Теперь немного другая проблема…почкму то лог в нужный фаил не идет, а на консоль выводится(хотя если написать эту команду в терминале то все норм робит)
0 |
347 / 292 / 37 Регистрация: 23.03.2012 Сообщений: 838 |
|
29.08.2013, 18:22 |
7 |
Теперь немного другая проблема…почкму то лог в нужный фаил не идет, а на консоль выводится(хотя если написать эту команду в терминале то все норм робит) А где файл вообще? Я не вижу открытия.
0 |
4 / 4 / 0 Регистрация: 29.01.2013 Сообщений: 91 |
|
29.08.2013, 18:23 [ТС] |
8 |
А где файл вообще? Я не вижу открытия. там запуск shell команды которая делает &> /log)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
29.08.2013, 18:23 |
Помогаю со студенческими работами здесь Ошибки при компиляции Ошибки при компиляции error: stray… Ошибки при компиляции Ошибки при компиляции #pragma package(smart_init) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |