Помогите новичку, понятия не имею о программировании, начал только 2 дня назад
Как уже было сказано, отсутствие навыков программирования началось только 2 дня назад, когда появился Nano. Головы в клочья. Вот как далеко я продвинулся. Любая помощь очень ценится..
int EMagnetPin = 8;
int solenoidPin = 9;
int ReedPin = 13;
void setup()
{
pinMode(EMagnetPin, OUTPUT); // назначить
pinMode(solenoidPin, OUTPUT); // назначить
pinMode(ReedPin, INPUT); // назначить тип pin
Serial.begin(9600); // последовательный порт открыт
void loop()
{
Serial.print(digitalRead(ReedPin));
if (digital REad(ReeddPin)==0 ) {
digitalWrite(solenoidPin,HIGH);
// После того, как магнит приложен к геркону, активируется приведенное ниже
digitalWrite(EMagnetPin, low);
delay(11000);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(22500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(500); // Останавливает EMagnet
digitalWrite(solenoidPin, HIGH); //
delay(500);
digitalWrite(solenoidPin, low);
delay(500);
// Программа завершается
@Brian Lesko, 👍0
Обсуждение3 ответа
Я предполагаю, что у вас есть некоторые ошибки, например, такие:
/tmp/arduino_modified_sketch_836883/sketch_oct30a.ino: In function 'void setup()':
sketch_oct30a:13:3: error: a function-definition is not allowed here before '{' token
{
^
sketch_oct30a:37:17: error: expected '}' at end of input
delay(500);
^
exit status 1
a function-definition is not allowed here before '{' token
Вы должны их прочитать. В конце функции вам понадобится закрывающая фигурная скобка. Итак, настройка, например, будет выглядеть следующим образом:
void setup()
{
pinMode(EMagnetPin, OUTPUT); // назначить
pinMode(solenoidPin, OUTPUT); // назначить
pinMode(ReedPin, INPUT); // назначить тип pin
Serial.begin(9600); // последовательный порт открыт
} // <------- ДОБАВЬТЕ ЭТО
То же самое для функции конца цикла.
Следующая проблема заключается в этой строке:
if (digital REad(ReeddPin) == 0 ) {
Функция "digitalRead" пишется именно так, а не как два слова. Кроме того, вы неправильно написали "ReedPin" как "ReeddPin".
Вы должны внимательно изучить свой код, просмотреть сообщения об ошибках и исправить их одно за другим. C ++ чувствителен к регистру, вы не можете просто вставлять дополнительные пробелы в середине слов, и вы должны соответствовать именам ваших переменных (т.е. не опечатывайте их).
Я предлагаю вам сделать учебник по C ++ или найти учебник по Arduino. Это основные ошибки в программировании, допускаемые новичками. Немного попрактиковавшись и поработав с примерами, вы перестанете их создавать.
#include <Arduino.h>
int EMagnetPin = 8;
int solenoidPin = 9;
int ReedPin = 13;
void setup()
{
pinMode(EMagnetPin, OUTPUT); // назначить
pinMode(solenoidPin, OUTPUT); // назначить
pinMode(ReedPin, INPUT); // назначить тип pin
Serial.begin(9600); // последовательный порт открыт
}
void loop()
{
Serial.print(digitalRead(ReedPin));
if (digitalRead(ReedPin) == 0)//он известен как digitalRead
{
digitalWrite(solenoidPin, HIGH);
// После того, как магнит приложен к геркону, активируется приведенное ниже
digitalWrite(EMagnetPin, LOW);
delay(11000);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, LOW);
delay(500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, LOW);
delay(22500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, LOW);
delay(500); // Останавливает EMagnet
digitalWrite(solenoidPin, HIGH); //
delay(500);
digitalWrite(solenoidPin, LOW);
delay(500);
}
}// пожалуйста, закройте все циклы
// Программа завершается
пожалуйста, не забудьте закрыть все циклы, введите правильное написание
Я бы посоветовал вам взять учебник, а также использовать программу, такую как platformio или Arduino, на vscode, которая поможет вам написать код, поскольку он имеет автоматическое завершение кода, поэтому вы всегда будете указывать правильное имя для переменных, а также вводить правильные имена функций.
Надеюсь, это поможет.
Обратите внимание, что другие уже дали хорошие ответы; это просто способ сделать ваш код более элегантным.
Эта часть:
digitalWrite(EMagnetPin, low);
delay(11000);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(22500);
digitalWrite(EMagnetPin, HIGH);
delay(500);
digitalWrite(EMagnetPin, low);
delay(500); // Останавливает EMagnet
digitalWrite(solenoidPin, HIGH); //
delay(500);
digitalWrite(solenoidPin, low);
delay(500);
Вы видите, что существует большое дублирование (digitalWrite
плюс задержка
).
Единственное, что меняется, - это номер контакта, состояние контакта и время задержки (которое в основном составляет 500).
Вы можете создать для этого новую функцию, например digitalWriteWithDelay
:
void digitalWriteWithDelay(int pinNumber, int pinState, int delayTime = 500)
{
digitalWrite(pinNumber, pinState);
delay(delayTime);
}
Теперь вы можете переписать
digitalWrite(EMagnetPin, low);
delay(11000);
digitalWrite(EMagnetPin, HIGH);
delay(500);
Для
digitalWriteWithDelay(EMagneticPin, LOW, 11000);
digitalWriteWithDelay(EMagneticPin, HIGH);
и все последующие строки аналогично. Кстати, лучше всего использовать LOW и HIGH (следите за тем, чтобы капитализация оставалась неизменной). Как вы можете видеть в последней строке, 500 передавать не нужно, так как это значение по умолчанию.
- Объяснить функцию pulseIn с помощью arduino и ультразвукового датчика
- Как запрограммировать Esp8266 удаленно через Wi-Fi?
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
1) Правильно отформатируйте свой код, выбрав весь код и нажав значок "{}" в меню редактора. 2) В чем именно заключается ваш вопрос?, @hcheung
Какую ошибку вы получаете, что именно вам нужно, можете ли вы также объяснить идею своего проекта, @Maaz Sk
Я отформатировал ваш код (выделите его, Ctrl + K) и изменил бы вашу тему, чтобы она была более содержательной, но я понятия не имею, в чем проблема. Что вы хотите, чтобы он делал? Что ** делает ** он делает?, @Nick Gammon
Используйте
uint8_t
вместоint
для переменных, которые никогда не будут иметь значения выше 255. Вы сэкономите место в памяти, используя как можно меньший тип переменной., @steviebТы не задал ни одного вопроса. Что вы пытаетесь сделать, и почему ваш проект не достигает этой цели?, @Duncan C