Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle

Onderdelen en benodigdheden

Arduino UNO × 1
5mm LED: Rood × 1
Enkelvoudige draaipotentiometer - 10k ohm × 1

Apps en online diensten

Arduino IDE

Over dit project

Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle

Arduino bibliotheek voor 8-bit IO-poort

We weten allemaal dat de Arduino digitale uitgang geeft met de digitalWrite()-functie en digitale invoer leest met digitalRead(). Maar met deze twee functies kan het slechts één pin tegelijk aansturen of lezen. Als iemand een 8-bit IO-apparaat wil interfaccen zoals een 7-segment display, DIP-schakelaars of een DAC (digitaal-naar-analog converter), kan de Arduino geen directe 8-bit digitale uitgang geven. In plaats daarvan moet het de databyte (8-bit) patroon van 1'en en 0'en naar 8 verschillende pinnen sturen met digitalWrite(). Bijvoorbeeld, als de databyte 37h is (0011 0111), moet men dit 0-en-1 patroon naar 8 verschillende pinnen sturen.

Om deze situatie op te lossen presenteer ik de 8-bit IO-poort (input-output poort) bibliotheek voor Arduino. Met deze bibliotheek kun je directe 8-bit data naar willekeurige Arduino-pinnen sturen die geconfigureerd zijn als een gecombineerde 8-bit poort, of 8-bit invoer lezen van deze geconfigureerde pinnen. Deze bibliotheek bundelt willekeurige 8 Arduino-pinnen samen om als 8-bit IO-poort te werken. Je selecteert gewoon 8 Arduino-pinnen die gecombineerd worden als 8-bit poort en configureert de datarichting als invoer of uitgang. De datarichting wordt ingesteld met het teken 'O' voor uitgang of 'I' voor invoer.

De bibliotheek heeft slechts 5 functies. Er zijn twee constructors die poortobject(en) aanmaken, één functie om 8-bit digitale uitgang naar de poortpinnen te sturen, één functie om 8-bit digitale invoer van de poortpinnen te lezen, en één extra functie om de IO-richting van de poort te wijzigen/in te stellen. Hieronder worden alle 5 functies kort uitgelegd, gevolgd door voorbeelden met uitleg.

1. IO_Port_8bit(int pin1, int pin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8, char dir)

Dit is de constructor. Het maakt object(en) van deze klasse aan en creëert daarmee één of meerdere 8-bit poorten door verschillende Arduino-pinnen te combineren. Men moet 8 verschillende Arduino-pinnen opgeven die gecombineerd worden als poort, samen met de datarichting als invoer of uitgang - de poort werkt als invoer of uitgang. Het laatste argument dir definieert of de poort als invoer of uitgang werkt. Als dir='O' werkt de poort als uitgang, als dir='I' als invoer. Dezelfde poort kan niet simultaan of zelfs alternerend als invoer en uitgang werken. Het geeft ook een foutmelding als de datarichting niet is geselecteerd.

2. IO_Port_8bit(int pin1, int pin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8)

Dit is een andere constructor. Het maakt ook object(en) aan en creëert 8-bit poorten door 8 verschillende Arduino-pinnen te combineren. Maar het specificeert niet de datarichting. Na het aanmaken van het poortobject met deze constructor, moet men de poortrichting instellen met de set_IO_direction-functie. Deze constructor stelt de programmeur in staat om de poortdatarichting tijdens runtime te wijzigen, zodat dezelfde poort alternerend (maar niet simultaan) als invoer of uitgang kan werken.

3. set_IO_direction(char dir)

Deze functie specificeert de invoer/uitgang-richting van de poort. Het heeft één tekenargument: 'I' voor poort als invoer of 'O' voor poort als uitgang. Als de datarichting niet is geselecteerd, toont het een fout op de seriële monitor van de Arduino.

4. send_8bit_data(int byt)

Deze functie stuurt 8-bit data naar de gespecificeerde pinnen. Geef een int waarde (moet < 255 zijn) als argument die direct aan 8 verschillende pinnen wordt gegeven. Als data > 255 is, toont het een fout op de seriële monitor.

5. get_8bit_data(void)

Deze functie leest 8-bit data van de gespecificeerde pinnen. Het retourneert 8-bit int data door de status van 8 verschillende pinnen te lezen.

Voorbeelden

Voorbeeld 1: 8 LEDs alternerend laten knipperen met 1 Hz

#include <IO_Port_8bit.h>

IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O'); // maak uitgangspoort aan

void setup() {
  // niets nodig in setup
}

void loop() {
  myport.send_8bit_data(85);  // stuuur data om oneven LEDs te laten branden
  delay(500);
  myport.send_8bit_data(170); // stuuur data om even LEDs te laten branden
  delay(500);
}

Voorbeeld 2: Binaire telpatroon op LEDs weergeven van 0 tot F

#include <IO_Port_8bit.h>

IO_Port_8bit my8bitport(2, 3, 4, 5, 6, 7, 8, 9); // maak poortobject aan

void setup() {
  my8bitport.set_IO_direction('O'); // stel poortrichting in
}

void loop() {
  int i;
  for (i = 0; i < 16; i++) { // stuuur data 0 tot 15 om binair patroon weer te geven
    myport.send_8bit_data(i);
    delay(200);
  }
}

Voorbeeld 3: Analoge invoerspanning aangeven op 8-bit LED balkgrafiek display

#include <IO_Port_8bit.h>

IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O'); // maak uitgangspoort object aan

void setup() {
  myport.send_8bit_data(255); // laat alle LEDs van balkgrafiek één keer knipperen
  delay(500);
  myport.send_8bit_data(0);
}

void loop() {
  int level;
  level = analogRead(A0); // lees analoge invoerspanning
  level = map(level, 0, 1023, 0, 80); // begrens spanning van 0 tot 80

  // verhoog of verlaag balkgrafiek niveau volgens invoer
  if ((level < 80) && (level > 70)) myport.send_8bit_data(255);
  else if ((level <= 70) && (level > 60)) myport.send_8bit_data(127);
  else if ((level <= 60) && (level > 50)) myport.send_8bit_data(63);
  else if ((level <= 50) && (level > 40)) myport.send_8bit_data(31);
  else if ((level <= 40) && (level > 30)) myport.send_8bit_data(15);
  else if ((level <= 30) && (level > 20)) myport.send_8bit_data(7);
  else if ((level <= 20) && (level > 10)) myport.send_8bit_data(3);
  else if ((level <= 10) && (level > 0)) myport.send_8bit_data(1);
  else if (level == 0) myport.send_8bit_data(0);
}

Voorbeeld 4: 8-bit digitale invoer van DIP-schakelaars lezen en waarde op seriële monitor tonen

#include <IO_Port_8bit.h>

IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9); // maak poortobject aan

void setup() {
  Serial.begin(9600); // initialiseer seriële communicatie
  myport.set_IO_direction('I'); // stel poortrichting in
  Serial.println("8-bit invoer poort test");
}

void loop() {
  int input_byt;
  input_byt = myport.get_8bit_data(); // lees DIP-schakelaar status
  Serial.print("ontvangen invoer = ");
  Serial.println(input_byt); // toon waarde
  delay(1000);
}

Code

Arduino bibliotheek voor 8-bit IO-poort (C/C++)

De bibliotheek creëert een 8-bit IO-poort vanuit Arduino-pinnen en stuurt/leest 8-bit digitale uitgang/invoer.

Geen preview beschikbaar (alleen download).

Schema

IO-poort stuurt of leest directe 8-bit data van verschillende pinnen.

Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle

Productieproces

  1. Arduino Nano Flight Simulator 2020 Bedieningspaneel – LCD & CDI Display
  2. Arduino-gebaseerd schakelaar- & LED-paneel voor Microsoft Flight Simulator 2020
  3. Slim Temperatuurmonitoring Systeem voor Scholen: Nauwkeurig, Real-time en Beveiligd
  4. Arduino 64-toets Prototoetsenbord Matrix – Bouw een Aangepast Toetsenbord met Shift Registers
  5. Bouw een Arduino Veilige Zone: Ontgrendel Android, iOS & Windows 10 met Vingerafdruk
  6. Hoogwaardige 2,8″ TFT Shield voor Arduino Nano – 320×240 SPI Display
  7. DIY Arduino Kakerlakbesturingssysteem – Bouw voor minder dan $30
  8. Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
  9. Betaalbare Arduino Ademcontroller met USB-MIDI-integratie
  10. DC-motorbeheersing onder de knie: Expert Tips & Trucs met PID-regeling
  11. Slim Indoor Navigatie Robot Kit voor Arduino Projecten