Работа с циклами циклы

Добрый день!
Пытаюсь сделать, чтобы на pin9 и pin10 было выведено 5 высоких сигнала, потом 5 низких.
Не пойму, почему программа не работает.


int pin10 = LOW; 
int pin9 = LOW;


void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT); pinMode(10, OUTPUT);
   }
  
  
void loop() {
     
   
for(int i =0; i<=5; i++)
{
pin10 == HIGH; digitalWrite (10, pin10);
pin9 == HIGH; digitalWrite (9, pin9); 
if (i == 5) break;
 }
  
for(int i =0; i<=5; i++)
{
pin10 == LOW; digitalWrite (10, pin10);
pin9 == LOW; digitalWrite (9, pin9); 
if (i == 5) break;
 }
  Serial.println(pin10);
}

надо не сравнивать а присваивать видимо:

pin10 = HIGH;

Посмотрите в букваре, как работает цикл for
Если вы задали цикл от 0 до пяти, он и так закончится когда переменная достигнет крайнего значения, строчка с break тут совершенно лишняя

Ну и просто замечание - старайтесь давать переменным значимые имена. Судя по логике кода, переменная pin10 содержит совсем не пин

а… и еще - приведенный выше цикл лишен всякого смысла. Вы шесть раз выводите высокий уровень на пины и ни разу не возвращаете низкий. В итоге у вас получается не шесть высоких сигналов, а один, шестикратной ширины.
Чтобы получить ШЕСТЬ сигналов, нужно между высокими уровнями давать низкий

Поправил.
Хочу чтобы выводились 5 единиц (из первого цикла), затем 5 нулей (из второго).
Но не получается (

int pin10 = LOW; 
int pin9 = LOW;

void setup() {
 Serial.begin(9600);
 pinMode(9, OUTPUT); pinMode(10, OUTPUT);
  }
 
 void loop() {
    
  for(int i =0; i<=5; i++)
{
pin10 = HIGH; digitalWrite (10, pin10);
pin9 = HIGH; digitalWrite (9, pin9); 
}

 for(int i =0; i<=5; i++)
{
pin10 = LOW; digitalWrite (10, pin10);
pin9 = LOW; digitalWrite (9, pin9); 
}
 Serial.println(pin10);
}

 

А Вы читаете, что Вам пишут?

Вот это видели?

Почему я не могу, чтобы для всех i<5 на выходе постоянно “висел” высокий сигнал ?

Идея в дальнейшем такая, чтобы в последовательности циклов на разных пинах (от 3-го до 11-го) была разная комбинация (HIGH и LOW)

i будет определять продолжительность каждого цикла

“постоянно высокий” и “пять высоких” - это две совершенно разные задачи, не находите?

Нарисуйте на бумажке как выглядят эти “5 низких сигналов”.

ХЗ, почему Вы не можете.

Цикл - это про управление потоком. Длительностью тоже можно управлять, но не так, как это делаете вы. Хотите управлять длительностью импульса - используйте delay() или millis(). Не нужно пин долбить много раз одним уровнем. Он с первого раза все понял.
Вы когда лифт вызываете, вы сколько раз кнопку вызова давите? А если 5 раз давите, сколько лифтов приезжает?

1 лайк

берёте бумагу в клеточку и рисуете сигналы на каждом пине, что именно хотите иначе понять полёт вашей фантазии совсем невозможно

В общем я так в итоге сделал (пока что):

int timeout; // задержка переключения фаз
int timeoutMin=100; // определяет максимальную частоту коммутации
int timeoutMax=2000; // определяет минимальную частоту коммутации

void setup() {
 Serial.begin(9600);
 pinMode(3, OUTPUT);pinMode(5, OUTPUT); pinMode(6, OUTPUT);pinMode(9, OUTPUT); pinMode(10, OUTPUT);pinMode(11, OUTPUT); 
  }


void loop() { 
 
int read_A0 = analogRead(A0);
float timeout = map(read_A0, 0, 1023, timeoutMax , timeoutMin); // преобразуем считаное значение в задержку перключения фаз
 
 
 // U-, W+
 digitalWrite(3, LOW);digitalWrite(5, LOW);digitalWrite(6, LOW); digitalWrite(11, LOW); // занрываем все транзисторы
 digitalWrite(10, HIGH); // (W+) сигнал на pin10, открываем транзистор М5
 digitalWrite(9, HIGH); // (U-) согнал на pin9, открываем транзистор М4  
 delay(timeout);                  

  // W+, V-
 digitalWrite(3, LOW);digitalWrite(5, LOW);digitalWrite(6, LOW); digitalWrite(9, LOW); // занрываем все транзисторы
 digitalWrite(10, HIGH); // (W+) сигнал на pin10, открываем транзистор М5
 digitalWrite(11, HIGH); // (V-) сигнал на pin11, открываем транзистор М6  
 delay(timeout);        

 
    // U+, V-
 digitalWrite(5, LOW);digitalWrite(6, LOW);digitalWrite(9, LOW); digitalWrite(10, LOW); // занрываем все транзисторы
 digitalWrite(3, HIGH); // (U+) сигнал на pin3, открываем транзистор М1
 digitalWrite(11, HIGH); // (V-) сигнал на pin11, открываем транзистор М6  
 delay(timeout); 

 
     // U+, W-
 digitalWrite(6, LOW);digitalWrite(9, LOW);digitalWrite(10, LOW); digitalWrite(11, LOW); // занрываем все транзисторы
 digitalWrite(3, HIGH); // (U+) сигнал на pin3, открываем транзистор М1
 digitalWrite(5, HIGH); // (W-) сигнал на pin5, открываем транзистор М2  
 delay(timeout); 
 
 
       // V+, W-
 digitalWrite(3, LOW);digitalWrite(9, LOW);digitalWrite(10, LOW); digitalWrite(11, LOW); // занрываем все транзисторы
 digitalWrite(6, HIGH); // (V+) сигнал на pin6, открываем транзистор М3
 digitalWrite(5, HIGH); // (W-) сигнал на pin5, открываем транзистор М2  
 delay(timeout);
 
       // U-, V+
 digitalWrite(3, LOW);digitalWrite(5, LOW);digitalWrite(10, LOW); digitalWrite(11, LOW); // занрываем все транзисторы
 digitalWrite(9, HIGH); // (U-) согнал на pin9, открываем транзистор М4
 digitalWrite(6, HIGH); // (V+) сигнал на pin6, открываем транзистор М3  
 delay(timeout);
 Serial.println(read_A0);
}

В этом коде больше половины команд digitalWrite() не нужны.

а вот интересно сделать вывод на последовательный ряд пинов для упрощения кода что мешает?

Имеешь в виду - в пределах одного порта?
Ну так для этого надо знать, что такое порт и как эти самые порты соотносятся с пинами.

проблема решена?

ну хотя бы просто последовательный ряд D3-D11, чтобы через циклы с ними работать

занимаюсь

открыл тему по сигналам с датчиков холла.