Помогите новичку, понятия не имею о программировании, начал только 2 дня назад

programming programming-sequence

Как уже было сказано, отсутствие навыков программирования началось только 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); 
                    // Программа завершается 

, 👍0

Обсуждение

1) Правильно отформатируйте свой код, выбрав весь код и нажав значок "{}" в меню редактора. 2) В чем именно заключается ваш вопрос?, @hcheung

Какую ошибку вы получаете, что именно вам нужно, можете ли вы также объяснить идею своего проекта, @Maaz Sk

Я отформатировал ваш код (выделите его, Ctrl + K) и изменил бы вашу тему, чтобы она была более содержательной, но я понятия не имею, в чем проблема. Что вы хотите, чтобы он делал? Что ** делает ** он делает?, @Nick Gammon

Используйте uint8_t вместо int для переменных, которые никогда не будут иметь значения выше 255. Вы сэкономите место в памяти, используя как можно меньший тип переменной., @stevieb

Ты не задал ни одного вопроса. Что вы пытаетесь сделать, и почему ваш проект не достигает этой цели?, @Duncan C


3 ответа


1

Я предполагаю, что у вас есть некоторые ошибки, например, такие:

/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. Это основные ошибки в программировании, допускаемые новичками. Немного попрактиковавшись и поработав с примерами, вы перестанете их создавать.

,

1
#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, которая поможет вам написать код, поскольку он имеет автоматическое завершение кода, поэтому вы всегда будете указывать правильное имя для переменных, а также вводить правильные имена функций.

Надеюсь, это поможет.

,

1

Обратите внимание, что другие уже дали хорошие ответы; это просто способ сделать ваш код более элегантным.

Эта часть:

  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 передавать не нужно, так как это значение по умолчанию.

,