Что нового

Как правильно считать полжение входных и выход пинов с Arduino.

Jan-Jak

Новичок
Сообщения
45
Репутация
1
По многочисленным советам участников этого форума я приобрел Arduino Mega 2560 и вот теперь встал в ступоре как прикрутить это чудо к моей лампочкеhttp://autoit-script.ru/index.php/topic,14102.0.html и скрипт от мистера MnM
Код:
#include <GUIConstantsEx.au3>
Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",1500);Каждую полторы сек будет вызыватся эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            RegDelete("HKEY_CURRENT_USER\Software\Houm\image\$image")
            RegWrite( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'On')

        Case "Off"
            RegDelete("HKEY_CURRENT_USER\Software\Houm\image\$image")
            RegWrite( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'Off')
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=RegRead("HKEY_CURRENT_USER\Software\Houm\image\$image","$image1")
    If $KeyRegister="on" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="off" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc

Пытаюсь взять за отправную точку пример разобранный на сайте http://digitalwrite.net/?p=637
sketch
Код:
#define led1 10
#define led2 11

// variabile che conterrà il carattere ricevuto attraverso la seriale
int ricevuto = ' '; 

void setup() {
   Serial.begin(9600);     // apre la porta seriale e la setta a 9600 bps
   pinMode(led1, OUTPUT);  // definisce il pin sul quale è collegato il led1
   pinMode(led2, OUTPUT);  // definisce il pin sul quale è collegato il led2
}

void loop() {
   if (Serial.available() > 0) { // se il buffer seriale contiene dei dati
      ricevuto = Serial.read();     // leggo il dato ricevuto
      switch (ricevuto){ // interpreto il dato ricevuto e mi comporto di conseguenza
         case '0':
            digitalWrite(led1,LOW); // se ricevo 0 spengo il led1
            Serial.print("1OFF");
            break;
         case '1':
            digitalWrite(led1,HIGH); // se ricevo 1 accendo il led1
            Serial.print("1ON");
            break;
         case '2':
            digitalWrite(led2,LOW); // se ricevo 2 spengo il led2
            Serial.print("2OFF");
            break;
         case '3':
            digitalWrite(led2,HIGH); // se ricevo 3 accendo il led2
            Serial.print("2ON");
            break;
       }}}
Ну а я сам на воял примерно вот так. Но мой скрипт не возвращает команду на лампочку.
Код:
#include <GUIConstantsEx.au3>

#include 'CommMG.au3'
Global $Com_Port = 3
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",500);Каждую полторы сек будет вызыватся эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            _CommSendString("1")

        Case "Off"
            _CommSendString("0")
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="1" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="0" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Jan-Jak
Вы пробовали смотреть что возвращает команда _CommGetString() может быть в условии не совсем то стоит
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Возможно и напутал чего сейчас перепроверю. Возможно один из первых своих тестов выложил сюда, так как воял уже под утро. много чего потерял и не помню в каких папках сохранялся. Оригинальный скрипт с сайта автора выглядит так
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#include 'CommMG.au3'

;~  dicharare le variabli $Rosso e $Verde per una
;~  questione di comodità di lettura del codice
Global $Rosso = 0xFF0000
Global $Verde = 0x00FF00

#Region ### START Koda GUI section ### Form=
;~  creazione della Gui principale
$Form1 = GUICreate("www.digitalwrite.net", 402, 120, 389, 341)

;~  creazione del cerchio abbinato al led1
;~  il cerchio lo associamo alla grafica denominata $Led1
;~  la grafica $Led1 ha dimensioni 30 px per 30px
$Led1 = GUICtrlCreateGraphic(122, 80, 30, 30)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $Rosso, $Rosso)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, 30, 30)

;~  creazione del cerchio abbinato al led2
;~  il cerchio lo associamo alla grafica denominata $Led2
;~  la grafica $Led2 ha dimensioni 30 px per 30px
$Led2 = GUICtrlCreateGraphic(313, 80, 30, 30)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $Rosso, $Rosso)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 0, 30, 30)

;~  creazione dei 3 bottoni
$Button1 = GUICtrlCreateButton("Led 1 - ON", 16, 16, 113, 57)
$Button2 = GUICtrlCreateButton("Led 1 - OFF", 144, 16, 113, 57)
$Button3 = GUICtrlCreateButton("Led 2 ON-OFF", 272, 16, 113, 57)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $Com_Port = 7
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Global $Button3_premuto = True

;~  dichiarazione della variabile $BS_PUSHBUTTON per la gestione dei bottoni
Global $BS_PUSHBUTTON

While 1
	$ReceivedFromCom = _CommGetString()
	Sleep(20)
;~ 	ConsoleWrite("Ricevuto = " & $ReceivedFromCom & @CRLF)
	Switch $ReceivedFromCom
	   Case "1ON"
		GUICtrlSetGraphic($Led1, $GUI_GR_COLOR, $Verde, $Verde)
		GUICtrlSetGraphic($Led1, $GUI_GR_ELLIPSE, 0, 0, 30, 30)
		GUICtrlSetGraphic($Led1, $GUI_GR_REFRESH)
	   Case "1OFF"
		GUICtrlSetGraphic($Led1, $GUI_GR_COLOR, $Rosso, $Rosso)
		GUICtrlSetGraphic($Led1, $GUI_GR_ELLIPSE, 0, 0, 30, 30)
		GUICtrlSetGraphic($Led1, $GUI_GR_REFRESH)
	   Case "2ON"
		GUICtrlSetGraphic($Led2, $GUI_GR_COLOR, $Verde, $Verde)
		GUICtrlSetGraphic($Led2, $GUI_GR_ELLIPSE, 0, 0, 30, 30)
		GUICtrlSetGraphic($Led2, $GUI_GR_REFRESH)
	   Case "2OFF"
		GUICtrlSetGraphic($Led2, $GUI_GR_COLOR, $Rosso, $Rosso)
		GUICtrlSetGraphic($Led2, $GUI_GR_ELLIPSE, 0, 0, 30, 30)
		GUICtrlSetGraphic($Led2, $GUI_GR_REFRESH)
	EndSwitch
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			_CommSendString("1") ;accendo il led1
		Case $Button2
			_CommSendString("0") ;spengo il led1
		Case $Button3
			If ($Button3_premuto = False) Then
				_CommSendString("2") ;spengo il led2
				$Button3_premuto = True
			Else
				_CommSendString("3") ;accendo il led2
				$Button3_premuto = False

			EndIf
	EndSwitch
WEnd


Простите испанского не знаю, переводил GOOGLE


Добавлено:
Сообщение автоматически объединено:

:laugh: :rofl: Я совсем идиот!!!! :IL_AutoIt_1: Я ошибся в возврате и в папку не положил иконки :-[ вот так он работает
Код:
#include <GUIConstantsEx.au3>
;#include <ButtonConstants.au3>
;#include <WindowsConstants.au3>

#include 'CommMG.au3'
Global $Com_Port = 3
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",500);Каждую полторы сек будет вызыватся эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            _CommSendString("1")

        Case "Off"
            _CommSendString("0")
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="1ON" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="1OFF" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Сегодня дошли руки и до этой порнографии и решил привести код в удобоворимый вид
код Arduino:
Код:
#define led 12


// переменная, которая будет содержать символ, полученный через последовательный порт
int ricevuto = ' '; 

void setup() {
   Serial.begin(9600);     // открывает последовательный порт на скорости 9600 бит / с
   pinMode(led, OUTPUT);  // определяет pin на которой подключен led как выход
  }

void loop() {
   if (Serial.available() > 0) { // если последовательный буфер содержит данные
      ricevuto = Serial.read(); // присваиваем переменной значение из буфера последовательного порта
      switch (ricevuto){  
         case '0':
            digitalWrite(led,LOW); // если я получаю 0 выключить светодиод led
            Serial.print("OFF");
            break;
         case '1':
            digitalWrite(led,HIGH); // если я получаю 1 включить светодиод led
            Serial.print("ON");
            break;
        
       }}}


И сама лампочка с кнопочками:
Код:
#include <GUIConstantsEx.au3>
#include 'CommMG.au3'
Global $Com_Port = 3
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",100);Каждые 0,1 сек будет вызваться эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            _CommSendString("1")

        Case "Off"
            _CommSendString("0")
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="ON" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="OFF" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Ну вот видите как хорошо, теперь можно с ноутбуком ходить в лес ночью грибы собирать :laugh:
Или картошку копать=)
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
8) да типо того. :rofl:
Ну а теперь возвращаясь к начатому разговору. подскажите почему при возврате тех же значений без нажатия кнопочек нет переключения лампочки?

Код:
переделанный код ардуино для возврата через пол секунду:


void setup(){
   Serial.begin(9600);   
}
 void loop(){
   Serial.println("ON");
   delay(500);
   Serial.println("OFF");
   delay(500);
   
 }
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
int outputPin = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(outputPin , OUTPUT);
}

void loop(){
   Serial.println("ON");
   digitalWrite(outputPin, HIGH);
   delay(500);
   Serial.println("OFF");
   digitalWrite(outputPin, LOW);
   delay(500);
}
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Garrett
Спасибо дорогой. Когда мой малой освободит мне комп рабочий то обязательно проверю этот код.


Добавлено:
Сообщение автоматически объединено:

Проверил, не работает как мной задумывалось. Точнее говоря пин 13 мигает, в терминале приходит ответ. но вот автоитовская лампочка не моргет. Я же хотел не только управлять лампой с компа, но и иметь скажем пин 2 как вход "кнопку" с кодтяжкой встроенным резистором. который бы позволил дублировать кнопки программы Автоита и отслеживать положение входа "пин 2".
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
но вот автоитовская лампочка не моргет
А так:
Код:
#define led1 13
int trigger = false;

void setup()
{
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
}

void loop()
{
  if (trigger)
  {
    digitalWrite(led1, LOW);
    Serial.print(0, DEC);  
    trigger = false;
  }else{
    digitalWrite(led1, HIGH);
    Serial.print(1, DEC);  
    trigger = true;  
  }
delay(1000);
}
}
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
А так даже led 13 перестал нормально гореть. :'(


Добавлено:
Сообщение автоматически объединено:

не понимаю, почему из порта не читает этот скрипт
Код:
#include <GUIConstantsEx.au3>
#include 'CommMG.au3'
Global $Com_Port = 3
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",100);Каждую 0,1 сек будет вызыватся эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            _CommSendString("1")

        Case "Off"
            _CommSendString("0")
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="1" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="2" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc



Добавлено:
Сообщение автоматически объединено:

простите, опять мозги замерзают. :stars:
Все исправил и заработало.
Код:
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="0" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="1" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Jan-Jak [?]
А так даже led 13 перестал нормально гореть
Поправил.


Добавлено:
Сообщение автоматически объединено:

В среде разработки Arduino в мониторе порта данные наблюдаете? Если да то ищите ошибку в скрипте Autoit.
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Garrett
да все нормально чуток поправил ваш скеч:
Код:
#define led1 13
int trigger = false;

void setup()
{
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
}

void loop()
{
  if (trigger)
  {
    digitalWrite(led1, LOW);
    Serial.print(0, DEC);  
    trigger = false;
  }else{
    digitalWrite(led1, HIGH);
    Serial.print(1, DEC);  
    trigger = true;  
  }
delay(1000);
}
и свою лампочку инвертировал
Код:
#include <GUIConstantsEx.au3>
#include 'CommMG.au3'
Global $Com_Port = 3
Global $BitPerSecond = 9600
Global $BitDati = 8
Global $Parity = 0
Global $BitStop = 1
Global $FlowControl = 2
Global $sErr
_CommSetPort($Com_Port,$sErr,$BitPerSecond,$BitDati,$Parity,$BitStop,$FlowControl)

Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
AdlibRegister("__SetImageLamp",100);Каждую 0,1 сек будет вызыватся эта функция
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32)
GUISetState()
Func _LampSet($param)
    Switch $param
        Case "On"
            _CommSendString("1")

        Case "Off"
            _CommSendString("0")
    EndSwitch
EndFunc
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $On
            _LampSet("On")
        Case $Off
            _LampSet("Off")
    EndSwitch
WEnd
Func __SetImageLamp()
    Local $KeyRegister=_CommGetString()
	Sleep(20)
    If $KeyRegister="1" Then
        GUICtrlSetImage($ico,$iconOn)
    ElseIf $KeyRegister="0" Then
        GUICtrlSetImage($ico,$iconOff)
    EndIf
EndFunc

И это счастье все работает.
и последнее на сегодня как прикрутить вместо этого тригера простую кнопочку типо вот этого
Код:
void setup() 
{

pinMode(13,OUTPUT);//конфигурируем пин как выход ( к нему подключен светодиод)
digitalWrite(14,HIGH);//включаем внутренний pull-up резистор
}

void loop() 
{
  
  
    digitalWrite(13,!digitalRead(14));//устанавливаем значение выхода 13 противоположное 
   //входу 14 . Т.е. когда на входе LOW (есть сигнал) на выходу устанавливаем HIGH
 
  
 
}
без выхода на пин 13 и к моему первоначальному скрипту:
Код:
#define led 12


// переменная, которая будет содержать символ, полученный через последовательный порт
int ricevuto = ' '; 

void setup() {
   Serial.begin(9600);     // открывает последовательный порт на скорости 9600 бит / с
   pinMode(led, OUTPUT);  // определяет pin на которой подключен led как выход
  }

void loop() {
   if (Serial.available() > 0) { // если последовательный буфер содержит данные
      ricevuto = Serial.read(); // присваиваем переменной значение из буфера последовательного порта
      switch (ricevuto){  
         case '0':
            digitalWrite(led,LOW); // если я получаю 0 выключить светодиод led
            Serial.print("OFF");
            break;
         case '1':
            digitalWrite(led,HIGH); // если я получаю 1 включить светодиод led
            Serial.print("ON");
            break;
        
       }}}
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Я не могу понять вашей задачи?
Вам нужна инверсная кнопка? Что бы при отрицательном сигнале на выводе 14 на выводе 13 был положительный сигнал, и наоборот?
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Добрый вечер. не это не принципиально. кнопку инвертировать или нет это можно решить уже при решении конкретного проекта. мне же хочется больше разобраться с самой идеей построения таких кнопочек.
Вот смотри, при использовании условия с двумя кнопочками как в том примере что я разбирал мы легко можем реализовать скажем автомат освящения, но он будет управляться только с компа, а как продублировать включение с реальной кнопки. ведь не будешь же в комнате включать свет всегда с компа. или скажем подключившись к своему компьютеру удаленно, мне может захотеться увидеть положение герконов вмонтированных в окна. в этом случае уже и не надо выхода на реальную нагрузку.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Jan-Jak [?]
а как продублировать включение с реальной кнопки

Вариант с одним светодиодом и одной кнопкой:
Код:
#define led1 13
#define btn1 14

int trigger = false; 

void setup()    
{ 
  pinMode(led1, OUTPUT);     
  pinMode(btn1, INPUT);     
} 

void loop(){
  if(digitalRead(btn1) && !trigger){ 
    digitalWrite(led1, !digitalRead(led1)); 
    trigger = true; 
  } 
  
  if(!digitalRead(btn1) && trigger){
    trigger = false;
  } 
}
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
OffTopic:
Спасибо Гарет, но я пошел спать. Завтра буду голову разминать. Сегодня 12 часов в шахте <под землей> и 6 часов в автобусе <3 часа на работу и столько же с работы> накладывают свою ...
150мл водочки и спать. Еще раз спасибо за помощь.



Добавлено:
Сообщение автоматически объединено:

доброго времени суток ;). После некоторых раздумий у меня получилось как то вот так. Может кто заметит косяки в моем коде и подправит?

Код:
const int pin = 22;     
const int led =  12;   

int ricevuto = ' '; // переменная, которая будет содержать символ, полученный через последовательный порт
long previousMillis = 0; 
int val=0; 
int prin = 0;
void setup()
{
   Serial.begin(9600);     // открывает последовательный порт на скорости 9600 бит / с
   pinMode(led, OUTPUT);  // определяет pin на которой подключен led как выход
   pinMode(pin, INPUT);  // определяет pin  которой подключен как вход
   digitalWrite(pin, HIGH);  //  включаем внутренюю подтяжку
  
  }

void loop() {
 if  (digitalRead(pin) == HIGH)  {
   if (Serial.available() > 0) { // если последовательный буфер содержит данные
      ricevuto = Serial.read(); // присваиваем переменной значение из буфера последовательного порта
      switch (ricevuto){  
         case '0':
            digitalWrite(led,LOW); // если я получаю 0 выключить светодиод led
            Serial.print(0, DEC);
            break;
         case '1':
            digitalWrite(led,HIGH); // если я получаю 1 включить светодиод led
            Serial.print(1,DEC);
            break;}}}
    else if  (digitalRead(pin) == LOW ){
     if (millis() -previousMillis >100)    
     {previousMillis = millis();     
        val++;}} 
     else 
     {val=0;}
     if(val>=5){
       digitalWrite(led,!digitalRead(led));//инвертируем состояние пина 
        val=0; 
        prin++;} 
     if (prin != 0) {
     Serial.print(digitalRead(led));
     prin = 0;
       }}
 
Верх