Váci Robotika Labor

User info

Welcome, Guest! Please login or register.


You are here » Váci Robotika Labor » Haladó csoport (csütörtök) » Tananyagok


Tananyagok

Posts 1 to 30 of 30

1

Üdv minden régi és új tagnak!

Ahogyan megbeszéltük, újraindítom a fórumot, hogy az aktuális témák könnyebben követhetőek legyenek a csütörtöki haladó csoport tagjainak.

0

2

7 szegmenses kijelző

https://lastminuteengineers.com/wp-content/uploads/2018/06/7-Segment-Internal-LED-Formation-Structure-and-Pinout.png

Összesen 10db láb (alul felül 5-5db), ebből a középső felül és alul is a COM (common=közös) ami nekünk a GND. Minden „pálcika” tulajdonképpen egy led, amit 220Ohm-os ellenálláson keresztül 5V tápra (labortápra) vagy az Arduino kimeneti lábaira köthetünk.

1.) Állítsunk be 5.0V-ot a labortápon, és a pozitív (piros) vezetékre kössünk egy 220Ohm-os ellenállást, majd onnan egy krokodil csipeszt. A labortáp fekete (GND) vezetékét csatlakoztassuk a felső vagy alsó COM (common / GND) lábra, majd az ellenállásról jövő vezetékkel próbáljuk végig a megmaradt lábakat. Látnunk kell, hogy melyik szegmens („pálcika”) kezd el világítani – hasonlítsuk össze a fenti rajzzal!

2.) Csatlakoztassunk mind a 8 kivezetéshez 1-1 ellenállást, majd ezen át az Arduino 2-es lábára kössük, az „a” pálcikához tartozó lábat, a 3-asra a „b”-t stb… az utolsó a „dot” (pont) lesz, ami a 9-es lábra kell, hogy kerüljön. Valamelyik COM lábat kössük az Arduino GND-jére.

https://lastminuteengineers.com/wp-content/uploads/2018/07/Project-Working-and-Interfacing-Seven-Segment-Display-with-Arduino.jpg

0

3

CD4511 vezérlő IC

Az IC lényege, hogy 4db bemenettel tudjuk vezérelni a 7 szegmenses kijelzőnket. Nem kell minden egyes "pálcikához" egy-egy lábat lefoglalni az Arduino-n.
https://www.arduinoecia.com.br/wp-content/uploads/2016/08/Pinagem_CD4511.png

Ezután az alábbi táblázat alapján tudunk bármilyen számot megjeleníteni:
https://www.arduinoecia.com.br/wp-content/uploads/2016/08/Tabela_BCD_CD4511_Display_7_segmentos.png

A bekötés rajz:
https://www.arduinoecia.com.br/wp-content/uploads/2016/08/Circuito_CD4511_Arduino_Display_7_segmentos_bb-1024x488.png

0

4

4 digites 7 szegmenses kijelző

http://www.circuitbasics.com/wp-content/uploads/2017/05/Arduino-7-Segment-Tutorial-4-Digit-Display-Pin-Diagram-300x172.png

Az A-G lábak ugyan úgy működnek mint az egy digites kivitelnél, de nem 1 hanem 4db „common” lábunk van (D1-D4) és csak az fog világítani amelyik common láb a GND-re csatlakozik.

Építsük meg a véletlenszám generátorunkat úgy, hogy mind a 4 szám egymás után véletlenszámot adjon!

0

5

Shift OUT - 74HC595

Arduino leírás

https://lastminuteengineers.com/wp-content/uploads/2018/07/74HC595-Shift-Register-Working.gif

http://sk.uploads.im/t/BEMR6.jpg

Arduino kód:

//74HC595 Shift out IC lábai:
int latchPin = 8; //ST_cp láb
int clockPin = 12; //SH_CP láb
int dataPin = 11; // DS láb
//a "szam" változóban tároljuk a kapott számot:
byte szam;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  Serial.begin(9600);
  Serial.print("Szam: ");
}

void loop() {
    if (Serial.available()>0) {
     szam=Serial.parseInt(); 
     digitalWrite(latchPin, LOW);
     shiftOut(dataPin, clockPin, MSBFIRST, szam); 
     digitalWrite(latchPin, HIGH);
     Serial.print(szam);
     Serial.print(" Binaris formaban: ");
     Serial.println(szam,BIN);
     Serial.print("Szam: ");
    }
}

A program bekér egy számot (0 és 255 között tudja kezelni) és ezt a számot bináris formában jeleníti meg a 8db led-en. (ahol világít ott 1-es, ahol nem ott 0-a az érték)

0

6

Figyelem!

A szeptember 26.-i óra ELMARAD!
(aki tudja adja tovább)

A következő alkalom október 3.

0

7

LCD kijelző kelezése

A kijelzőt és az Arduino-t alap esetben 16db vezetékkel kellene összekötni és közvetlenül vezérelni DE ha az I2C kommunikációt használjuk akkor összesen csak 4db vezetékre lesz szükségünk:
- VCC (5V)
- GND (GND)
- SCL (A5)
- SDA (A4)

https://halckemy.s3.amazonaws.com/uploads/attachments/679767/fritzing-sketch-for-lcd1602-and-arduino_VNXIWTehlV.jpg

Az ilyen bekötéshez szükségünk van egy könyvtárra (library) amit telepíteni kell az Arduino-ba. Ennek legegyszerűbb módja, hogy bemásoljuk a Documentumok/Arduino/Library mappába a következő fájl teljes tartalmát:
LCD

Ezután a kijelző már elérhető a 0X27-es címen.
Próbáljuk ki a következő kódot:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
  lcd.init();
  lcd.backlight(); 
}

void loop()

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Hello, mindenki!");
  delay(1000);
  lcd.setCursor(3,1);
  lcd.print("Robotika!");
  delay(1000);
}

0

8

Korábban csináltunk már "tolatóradart" ami kiírta a mért távolságot a soros monitorra. Ennek a kódja a következő:

  int trigPin = 11;
  int echoPin = 12;
 
  long visszhang;
  int tavolsag;
 
  void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

visszhang = pulseIn(echoPin, HIGH);

tavolsag= visszhang*0.034/2;

Serial.print("Tavolsag: ");
Serial.println(tavolsag);
}

Feladat: alakítsuk úgy át a programot (és a bekötést), hogy a mért értéket az LCD kijelzőre írja ki!

0

9

// Tolatoradar, villogasmentesen:
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

  int trigPin = 11;
  int echoPin = 12;
 
  long visszhang;
  int tavolsag;
  int elozo;
 
void setup()
{
  lcd.init();
  lcd.backlight();
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Tavolsag:");
}

void loop()

digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

visszhang = pulseIn(echoPin, HIGH);

tavolsag= visszhang*0.034/2;
 
 
   if (elozo!=tavolsag) {
    lcd.setCursor(9,0);
    lcd.print("          ");
    lcd.setCursor(9,0);
    lcd.print(tavolsag);
    elozo=tavolsag;
    delay(100);
  }
}

0

10

Kedves András!
A fórumban nem találtam a tolatóradarról rajzot. Ki lehet találni a programból, de ha egyszerűen megoldható, jó lenne, ha a kapcsolási rajzot be tudnád tenni.
Köszönöm szépen.

0

11

Az ultrahangos modul bekötése nagyon egyszerű:
Csak a Trig és az Echo láb megfelelő bekötésére kell figyelni (a program szerint) - vigyázat, a modulon nem mindig ez a sorrend, tehát ne csak a sorrendet figyeljük hanem a feliratokat is.
https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2013/11/ultrasonic-sensor-with-arduino-hc-sr04.jpg

0

12

LCD kijelző, Joystick és servo motor:

#include <LiquidCrystal_I2C.h>
#include <Servo.h>

LiquidCrystal_I2C lcd(0x27,16,2);

int Y = A0;
int X = A1;
int Xpoz = 0;
int Ypoz = 0;
Servo fogo;

void setup()
{
  lcd.init();
  lcd.backlight(); 
  pinMode(X,INPUT);
  pinMode(Y,INPUT);
  fogo.attach(10);
}

void loop()

  Xpoz=map(analogRead(X),0,1024,0,16);
  lcd.setCursor(Xpoz,0);
  lcd.print("*");
  fogo.write(map(Xpoz,0,16,170,10) );

  Ypoz=map(analogRead(Y),0,1024,0,16);
  lcd.setCursor(Ypoz,1);
  lcd.print("*");
  delay(10);
  lcd.clear();
}

0

13

I2C LCD bekötése:

https://halckemy.s3.amazonaws.com/uploads/attachments/679767/fritzing-sketch-for-lcd1602-and-arduino_VNXIWTehlV.jpg

Arduino Joystick bekötése:
https://exploreembedded.com/wiki/images/5/5f/0_Joystick_with_Arduino_bb.png

0

14

L293d motorvezérlő IC bekötése:

A képpel ellentétben mi NE 12V-t hanem 5V-t állítsunk be a labortápon!!!!

https://hackster.imgix.net/uploads/attachments/559274/circuit-arduino_liGwsZLCyc.jpg

Az IC lábainak neve:
https://i.stack.imgur.com/xg8gz.png

Megnevezések:
(bal, felső sarokból lefelé haladva)
Enable - ezzel fogjuk a motor sebességét szabályozni egy PWM lábon keresztül pl: analogWrite(10,255);   ahol a 10 az Arduino PWM képes lába, a 255 pedig a teljes sebesség (0 és 255 között)
Input1 - az egyik irány, ha HIGH állapotban van pl digitalWrite(9,HIGH);  (az Input2 ilyenkor legyen LOW!)
Output1 - a motor egyik lába
GND - az arduino GND-jét és a labortáp fekete vezetékét kell rákötni
GND -  -II-
Output2 - a motor másik lába
Input2 - a másik irány, ha HIGH állapotban van pl digitalWrite(8,HIGH); (az Input1 ilyenkor legyen LOW!)
VS - a labortáp piros vezetéke (5V-ra állítva!)

(jobb felső saroktól indulva)
Vss - Arudino 5V vagy Vin lába

0

15

Önálló feladat:

A fenti kapcsolások és a minta kód felhasználásával készítsünk egy áramkört, melyre csatlakozik egy LCD kijelző amin egy csillag helyzete jelzi a joystick állapotát (alapból középen), valamint ennek helyzete alapján a rákötött villanymotor forgási irányát és sebességét tudjuk vezérelni!

0

16

Kedves Kollégák!
Szeretnék helyiértékhelyesen kiírni számokat Arduinoval, de eddig nem találtam elegáns megoldást. Nem tetszene az a megoldás, hogy a számjegyek száma alapján elé teszek szóközöket. Tud valaki elegáns megoldást?

Ilyesmit szeretnék látni:
http://sj.uploads.im/t/etsnx.jpg

0

17

Ha LCD-re akarsz kiírni akkor az lcd.setCursor(X,Y); a számok hossza alapján.
Ha Serial-ra akkor csak a szóközös megoldás van (tudtommal)

0

18

Pont azt szeretném kikerülni, hogy a számjegyek száma alapján pozicionálom a kurzort. Reméltem, hogy van valami formázás szerű dolog, mint Python-ban.
De nem adom fel, ha találok elegánsabb megoldást, megírom.

Köszi a választ :-)

0

19

OLED képernyő kezelése I2C kommunikációval

A szükséges könyvtárak letölthetőek: INNEN

Miután letöltöttük, a tartalmukat másoljuk be az arduino library mappájába!

Ezután ha elindítjuk az Arduino IDE-t a példák között meg is kell jelenni az Adafruit SSD1306 nevű könyvtárnak, amiből válasszuk ki az SSD1306_128x64 példát.
A programban keressük meg az alábbi sort:

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D))

és a kiemelt részt cseréljük erre: 0x3C

Ezután töltsük fel és próbáljuk ki a kijelzőt.

A bekötést az alábbi ábrán láthatjuk:
https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/oled-display-arduino.png
Vigyázat! Az ábrán látható bekötés sorrendje eltérhet az általunk használt sorrendtől, ezért a lábak feliratát is figyeljük!!!

0

20

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#include <SoftwareSerial.h>

SoftwareSerial mySerial(12, 13); // RX, TX

String szoveg;

void setup() {
Serial.begin(9600);
mySerial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
display.clearDisplay();
display.display();
delay(1000);
szoveg="OK";
kiir();
}

void kiir() {
  display.clearDisplay();
  display.setTextSize(1); // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(szoveg);   
  display.display();      // Show initial text 
}

void loop() {
  if (Serial.available()) {
   szoveg=Serial.readString();
   kiir();
  } 
  if (mySerial.available()) {
   szoveg=mySerial.readString();
   Serial.println(szoveg);
   kiir();
  }
}

0

21

Figyelem!

A december 5.-i (csütörtök) alkalom

ELMARAD!

12.-én találkozunk.

0

22

Sziasztok!

Belefutottam egy jelenségbe, megosztom Veletek. Eddig nem találtam rá utalást, de biztos van valami oka. Ha valaki tudja, miért van, ossza meg velünk  :flag:

A furcsaság:
start = millis();
....
Serial.println(start);

Szépen írja az idő múlását milliszekundumban, de ha bezárom a soros monitort, majd újra megnyitom, akkor nulláról újrakezdi a számokat. Ötlet???

0

23

A megoldás a soros monitor bezárásában és újranyitásában van - ugyanis amikor megnyitod a soros monitort az egyben reseteli is az Arduino-t. Erre azért van szükség, mert ugye feltöltöd a programot, ami ezután egyből el is indul - de ha megnyitod a soros monitort feltehetőleg látni is akarod a program indulását, tehát újraindul, hogy az elejéről írhasson ki mindent.

Megjegyzem, ha nem az USB portot használod hanem a 0-ás és 1-es lábról olvasod le az értékeket akkor ez nem fog előjönni.

0

24

Köszönöm András, logikus :-)

0

25

Vezetékes és vezeték nélküli hálózatok
- bevezetés -

Fogalmak:
IP-cím: 4 tagból álló, egyenként 0 és 255 közötti cím mely a hálózatra kapcsolt eszközt azonosítja. (pl: 192.168.0.1 - C osztályú LAN hálózat esetén)
Subnet - Alhálózati maszk: a mi esetünkben mindig 255.255.255.0 (C osztályú LAN esetén)
Gateway - Alapértelmezett átjáró (ha van): annak az eszköznek a címe melyen keresztül más hálózatba juthatunk (pl.: az internetes router-ünk LAN-oldali címe)
DNS: Domain Name Server - névfeloldási kiszolgáló (ha van) - a Domain neveket Ip címmé konvertálja
LAN: Local Area Network - helyi hálózat (a mi esetünkben mindegy, hogy ez vezetékes vagy wifi - de általában a vezetékes hálózatot értik rajta)
DHCP szerver: a hálózatra feljelentkező gépeknek, ha nincs fix IP címük beállítva kioszt nekik egyet, valamint átadja a többi csatlakozási adatot (alhálózati maszk, átjáró, DNS)
WiFi: vezeték nélküli hálózat (2,4Ghz vagy 5Ghz alap esetben, de léteznek ettől különböző frekvenciák is)
SSID: a vezeték nélküli hálózat neve (amire csatlakozunk) - ez lehet rejtett is
Password: a WiFi jelszava amennyiben titkosítással látták el a kiszolgáló AP-t (ez leginkább WPA2 titkosítás)
AP - Access Point: az a rádió amire vezeték nélkül csatlakozunk - általában egybe van építve egy router-el, de ez NEM MINDIG VAN ÍGY!
Router - útválasztó: Olyan eszköz mely legalább két hálózati kártyával rendelkezik (amik más subnet-re csatlakoznak) és ezek között biztosítja az átjárást.
Mi A és C osztályú IP címekkel találkozhatunk (a B nálunk nem terjed el)

A osztályú IP címük van a közvetlenül internetre kapcsolt eszközöknek. (pl 195.199.113.185 - ez egy sulinet-es cím) ezt eredetileg WAN-nak hívják, de általában az Internetet értjük alatta
C osztályú címet használunk a helyi hálózatunkban

Szerver: Kiszolgáló, valamilyen szolgáltatást kínál az adott hálózaton belül (pl: Web szerver, E-mail szerver stb)
HTTP: Hyper Text Transfer Protocol - a web oldalak leírónyelve
Web szerver: alap esetben a 80-as port-on keresztül fogadja a http kéréseket, és ezekre válaszol. (átadja a weboldal tartalmát)

--------------------------------------------------------------------
Feladat:
Windows-ban nyissuk meg a futtatás parancsot (a billentyűzeten a zászló gomb + az R betű) majd írjuk be: cmd
Megnyílik a DOS promt, amibe írjuk be: ipconfig (és üssünk entert)

Ekkor megjelenik az adott gép aktuális hálózati állapota, hogy milyen IP-címmel van feljelentkezve, mi az alhálózati maszk és az átjáró.

Most írjuk be újból, de tegyük mögé a /all kapcsolót, tehát: ipconfig /all
Ekkor egy sokkal részletesebb listát kapunk, amiben már fel van tüntetve a DNS szerverek neve is.

Honnan tudjuk, hogy van-e internet kapcsolatunk? (Neeeem, az, hogy megnyitunk egy oldalt az nem jó válasz...)
írjuk be: ping 8.8.8.8
Ha van válasz, van élő internet kapcsolat (egyébként ez a google DNS címe)

Kérdezzük meg a szomszéd gépének IP címét és pingessük meg azt is!

0

26

Ezt másoljuk ki:   http://arduino.esp8266.com/stable/package_esp8266com_index.json

0

27

ESP8266-ra épülő NodeMCU lábkiosztása:
https://i2.wp.com/mechatronicsblog.com/wp-content/uploads/2019/02/NodeMCU_V2_v2.png

0

28

Két LED be és kikapcsolása beágyazott weboldal segítségével:

A leírás (angol nyelven) megtalálható ezen a linken: https://www.electronics-lab.com/project … -tutorial/
https://www.electronics-lab.com/wp-content/uploads/2019/02/Untitled-Sketch-2_bb.png

#include <ESP8266WiFi.h>
// Add wifi access point credentiaals
const char* ssid     = "WIFI_SSID";
const char* password = "WIFI_PASSWORD";
WiFiServer server(80);// Set port to 80
String header; // This storees the HTTP request
// Declare the pins to which the LEDs are connected
int greenled = D1;
int redled = D2;
String greenstate = "off";// state of green LED
String redstate = "off";// state of red LED
void setup() {
  Serial.begin(115200);
// Set the pinmode of the pins to which the LEDs are connected and turn them low to prevent flunctuations
  pinMode(greenled, OUTPUT);
  pinMode(redled, OUTPUT);
  digitalWrite(greenled, LOW);
  digitalWrite(redled, LOW);
  //connect to access point
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());// this will display the Ip address of the Pi which should be entered into your browser
  server.begin();
}
void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients
  if (client) {                             // If a new client connects,
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
           
            // turns the GPIOs on and off
            if (header.indexOf("GET /green/on") >= 0) {
              Serial.println("green on");
              greenstate = "on";
              digitalWrite(greenled, HIGH);
            } else if (header.indexOf("GET /green/off") >= 0) {
              Serial.println("green off");
              greenstate = "off";
              digitalWrite(greenled, LOW);
            } else if (header.indexOf("GET /red/on") >= 0) {
              Serial.println("red on");
              redstate = "on";
              digitalWrite(redled, HIGH);
            } else if (header.indexOf("GET /red/off") >= 0) {
              Serial.println("red off");
              redstate = "off";
              digitalWrite(redled, LOW);
            }
       
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
           
            // Web Page Heading
            client.println("<body><h1>ESP8266 Web Server</h1>");
           
            // Display current state, and ON/OFF buttons for GPIO 5 
            client.println("<p>green - State " + greenstate + "</p>");
            // If the green LED is off, it displays the ON button       
            if (greenstate == "off") {
              client.println("<p><a href=\"/green/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/green/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
               
            // Display current state, and ON/OFF buttons for GPIO 4 
            client.println("<p>red - State " + redstate + "</p>");
            // If the red LED is off, it displays the ON button       
            if (redstate == "off") {
              client.println("<p><a href=\"/red/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/red/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
           
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

0

29

#include <ESP8266WiFi.h>
// Add wifi access point credentiaals
const char* ssid     = "robotika";
const char* password = "Arduino!";
WiFiServer server(80);// Set port to 80
String header; // This storees the HTTP request
// Declare the pins to which the LEDs are connected
int AmotorPin = 5;
int BmotorPin = 4;
int AmotorDir = 0;
int BmotorDir = 2;
String greenstate = "off";// state of green LED
String redstate = "off";// state of red LED
void setup() {
  Serial.begin(115200);
// Set the pinmode of the pins to which the LEDs are connected and turn them low to prevent flunctuations
  pinMode(AmotorPin, OUTPUT);
  pinMode(AmotorDir, OUTPUT);
  pinMode(BmotorPin, OUTPUT);
  pinMode(BmotorDir, OUTPUT);
  digitalWrite(AmotorPin, LOW);
  digitalWrite(AmotorDir, LOW);
  digitalWrite(BmotorPin, LOW);
  digitalWrite(BmotorDir, LOW);
  //connect to access point
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());// this will display the Ip address of the Pi which should be entered into your browser
  server.begin();
}
void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients
  if (client) {                             // If a new client connects,
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
           
            // turns the GPIOs on and off
            if (header.indexOf("GET /motor/elore") >= 0) {
              Serial.println("elore");
              greenstate = "on";
              digitalWrite(AmotorPin, HIGH);
              digitalWrite(BmotorPin, HIGH);
              digitalWrite(AmotorDir, LOW);
              digitalWrite(BmotorDir, LOW);
            } else if (header.indexOf("GET /motor/stop") >= 0) {
              Serial.println("stop");
              greenstate = "off";
              digitalWrite(AmotorPin, LOW);
              digitalWrite(BmotorPin, LOW);
              digitalWrite(AmotorDir, LOW);
              digitalWrite(BmotorDir, LOW);
            } else if (header.indexOf("GET /motor/hatra") >= 0) {
              Serial.println("hatra");
              redstate = "on";
              digitalWrite(AmotorPin, HIGH);
              digitalWrite(BmotorPin, HIGH);
              digitalWrite(AmotorDir, HIGH);
              digitalWrite(BmotorDir, HIGH);
            } else if (header.indexOf("GET /motor/jobbra") >= 0) {
              Serial.println("jobbra");
              redstate = "off";
              digitalWrite(AmotorPin, HIGH);
              digitalWrite(BmotorPin, HIGH);
              digitalWrite(AmotorDir, HIGH);
              digitalWrite(BmotorDir, LOW);
            } else if (header.indexOf("GET /motor/balra") >= 0) {
              Serial.println("balra");
              redstate = "off";
              digitalWrite(AmotorPin, HIGH);
              digitalWrite(BmotorPin, HIGH);
              digitalWrite(AmotorDir, LOW);
              digitalWrite(BmotorDir, HIGH);
            }
       
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
           
            // Web Page Heading
            client.println("<body><h1>ESP8266 Web Server</h1>");
           
            // Display current state, and ON/OFF buttons for GPIO 5
            client.println("<p>green - State " + greenstate + "</p>");
            // If the green LED is off, it displays the ON button       
            if (greenstate == "off") {
              client.println("<p><a href=\"/green/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/green/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
               
            // Display current state, and ON/OFF buttons for GPIO 4
            client.println("<p>red - State " + redstate + "</p>");
            // If the red LED is off, it displays the ON button       
            if (redstate == "off") {
              client.println("<p><a href=\"/red/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/red/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
           
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

0

30

Nyissuk meg a következő oldalakat:
(mindegyiket külön lapon)
https://shop.tavir.hu/images/robot-esp- … ield-5.jpg

https://i2.wp.com/mechatronicsblog.com/ … .png?ssl=1

https://howtomechatronics.com/tutorials … r-hc-sr04/

Vegyük elő az előző órán megírt Arduino kódot! Mentsük el új néven! (ezt fogjuk módosítani)

0


You are here » Váci Robotika Labor » Haladó csoport (csütörtök) » Tananyagok