Управляем линиями ввода/вывода Arduino с компьютера

Линии ввода/вывода Arduino предоставляют большие возможности для управления различными внешними устройствами. К тому же их достаточно легко программировать через среду разработки Arduino IDE.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/989-upravlyaem-liniyami-vvoda-vyvoda-arduino-s-kompyutera/images/upravlyaem-liniyami-vvoda-vyvoda-arduino-s-kompyutera-1.jpg

Но бывают случаи, когда внешними устройствами нужно управлять с компьютера, и тогда Arduino становится отличным вариантом в качестве промежуточного звена между внешним устройством и ПК.

Приложение VB подключается к Arduino через COM-порт, который эмулирует USB. Когда приложение VB работает, вы не можете запрограммировать Arduino. Вам необходимо ввести в приложение VB номер порта, как это делается в Arduino IDE. Приложение отображает 4 аналоговых входа A0-A3, 6 цифровых входов D2-D7 и 6 цифровых выходов D8-D13.

Код (скетч) для Arduino приведен ниже.

unsigned char inByte=0, outByte=0;

// функция настройки
void setup() {
    // инициализация последовательного порта
  Serial.begin(9600);
    // инициализация выходов 8-13 входов 2-7 аналоговых входов A0-A3
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

}

// бесконечный цикл
void loop() {
  unsigned char i;

   if (Serial.available() > 0) {
          // считывание входящего байта
      inByte = Serial.read();

      if(inByte < 128)
      {
        PORTB = inByte; // обновление цифровых выходов 8-13
      }
      if(inByte == 128) //128 = запрос на обновление
      {
        Serial.write(lowByte(analogRead(A0)));  // отправка младших битов 10-разрядного слова аналогового счета
        Serial.write(highByte(analogRead(A0))); // отправка старших битов 10-разрядного слова аналогового счета
        Serial.write(lowByte(analogRead(A1)));
        Serial.write(highByte(analogRead(A1)));
        Serial.write(lowByte(analogRead(A2)));
        Serial.write(highByte(analogRead(A2)));
        Serial.write(lowByte(analogRead(A3)));
        Serial.write(highByte(analogRead(A3)));
          // считывание 6 цифровых входов 2-7 и размещение их в байте
        for(i=0;i<6;i++){
        bitWrite(outByte, i, digitalRead(i+2));
        }
        Serial.write(outByte);
     }
   }
}