Dva dny a dvě noci.

avatar


Foto source:

Zdravím kolem jsoucí

Dva dna a dvě noci .
Ne to není název název nějakého nového filmu, nekonečného seriálu, nebo telenovely. Je to cirka doba kdy jsem strávil čas s umělou inteligencí ChatGTP od OpenAI.
Chystám totiž se synem takový projekt na arduino se kterým si nevím rady. A jelikož se programování téměř vůbec nevyznám, požádal jsem o pomoc umělou inteligenci.
Chystám pro syna "trezor". Pomocí arduina má být poháněn servomotorek, který bude zavírat zámek. Dále bude použita membránová klávesnice 4x4, která je teprve na cestě z číny. A také zde chci zapojit čtečku karet a LCD_I2C.
Problém je v tom, že při takové konfiguraci komponentů neposkytuje arduino uno dostatek pinů na které bych mohl vše zapojit. Klávesnice 4x4 ve standartním provedení se totiž připojuje osmi kabely. A RFID čtečka snad využívá dalších 6 pinů. K tomu servo, to využívá jeden pin. LCD je zapojen na analog, takže u něj by problém nebyl.
Využil jsem tedy pomoc internetu a zjistil, že jde klávesnici zapojit pouze pomocí jednoho analogového vstupu.
Postupoval jsem podle tohoto návodu:

https://www.electronicwings.com/arduino/4x4-keypad-interfacing-with-arduino-uno

Pokusil jsem se nakreslit v Tinkercad a provést simulaci.
Mimo jiné: Tinkerkad vypadá jako super nástroj pro bastlení, i když neobsahuje některé potřebné knihovny či volby.

Pomocí tohoto zapojení se výrazně snižuje počet použitých pinů. A tak jsem se ho rozhodl vytvořit i v reálu.

Dle návodu jsem si nahrál kód do arduina a vše proběhlo v pořádku. Na LCD se zobrazovali čísla a na sériovém monitoru hodnoty proměnných.
Návod však byl však určený pouze k zobrazení na LCD a já nevěděl jak dostat z hodnot kód tak, aby mi pomohl definovat heslo a to použít k ovládání serva. Podotknu, že s ovládáním serva již nemám moc problém.

A v tomto bodě jsem poprosil AI o pomoc.
Nejdřív jsem použil toto zadání:

Zdravím. Potřeboval bych pomoci s programem na Arduino. Chci použít mebránovou klávesnici 4x4 znaků k ovládání servo motorku. Také chci zobrazovat kód na LCD typu I2C. Ale oproti klasickému zapojení klávesnice používá jen analogový pin A0, 5V pin a GND. Klávesnici mám zapojenou s odpory. Každé zmáčnutí vyhodnocuje jako jinou proměnou.

V tomto zadání však není jisté, že je použit pouze jeden analogový pin. Existují totiž zapojení, kde je klávesnice zapojena k analogovým vstupům, ale využívá i digitální piny. Takže výsledný kód nebyl správný.
Byl jsem však nadšený, že bot zpracoval zadání naprosto bleskově. Snažil jsem se tedy zadání upřesnit.
Ze začátku to vypadalo nadějně, ale pak jako by zapomněl na předchozí zadání a pletl kódy dohromady. Začal v kódu používat knihovny, které se pro projekt nehodily, nebo byly v konfliktu se samostatným kódem. Asi zde nebudu vypisovat celou historii chatu, i když by to bylo pro pochopení velice účelné. Postupně se vrací ke standartnímu zapojení klávesnice, nebo kombinuje kód tak, že jen samé podstaty ( a to nejsem programátor) prostě nemůže fingovat. Používá v kódu stejný pin pro zapojení klávesnice, tak i pro servo a tvrdí, že to já mám servo špatně zapojeno, nebo je vadné atd....

Po nějaké době jsem zkusil přeformulovat zadání, dle předchozích poznatků:

vrátím se k předchozímu tématu. potřebuji ovládat servo pozice otevreno (45), zavreno (135). A to pomocí klávesnice 4x4- Klávesnice zapojena jen na A0. Použit LCD I2C na adrese 0x27 ( nutno používat lcd.begin() ). Je třeba pro výpočet čísla použít proměnné níže: proměnné odpor , cislo můžeš zaměnit pople potřeby kodu : if (odpor <= 70 && odpor >= 68) {

Přesto Ai opět zobrazila kód bez použití rozsahu hodnot pro tlačítka.

I když tvrdil, že si pamatuje zadání a historii chatu, což z prvu opravdu tak vypadalo, když doplňoval kód podle zadání, postupně přestal nějak spolupracovat.

Je mi líto, že dochází k nedorozumění. Pokud mi můžete napsat, co byste přesně potřeboval vytvořit, rád bych vám pomohl s konkrétním zadáním. Můžete mi popsat, co by váš program měl dělat a jaké součásti by měl používat? Poté můžeme začít s kódováním.

Začal jsem tedy znova, zcela přeformuloval zadání s konkrétními pokyny.

Vytvoř program pro Arduino Uno.
#include <Servo.h>
#include <LiquidCrystal_I2C.h> použito lcd.begin()
#include <Wire.h>
Servo servo;
servo.attach(3); // použit pin 3
int otevreno = 45;
int zavreno = 135;
heslo = "12345 nebo 123A589 nebo 1593574682.... atd.) // uživatelem zadané heslo s libovolným počtem znaků. Minimálně však 4 znaky
Serial.begin(9600);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Použita klávesnice 4x4
Pro čtení hodnot použit pin A0 s těmito rozsahy.
1=68;2=98;3=179;A=1023
4=64;5=90;6=153;B=511
7=60;8=83;9=133;C=341
*=57;0=76;#=118;D=256
Použij v programu tyto rozsahy a přidej k nim toleranci +-2.
Úkolem programu bude ovládat servo (otevreno, zavreno) pomocí hesla.
Když je pozice serva - otevřeno - vypiš na LCD "Otevreno, zavri pomocí #). //Když je pozice serva - otevreno stisknutím # proveď pozici - zavreno.
Pokud je pozice serva - zavřeno - vypiš na LCD "Zadej kod, kartu (pozice 0,0) , "Kod:------------" (pozice LCD 0,1). // K otevření je nutno použít heslo.
Vypiš kód v krátkých úryvcích . Tj - nastavení, pak setup, pak void ( v případě potřeby void open(), void close() ).
Je zadání jasné?

Přesto, že jsem žádal o vypsání krátkých úryvků, AI opět vypisovala kód celý, čímž se opět nezobrazil celý, jelikož má bot zřejmě omezený počet znaků.

vaš kod se opět nezobrazil celý. lze zobrazit kod aniž by v chatu nedošlo k maximalnimu počtu znaků?
ChatGPT
Ano, lze zobrazit kód v externím textovém souboru a sdílet odkaz na něj. Existuje mnoho webů, které nabízejí tuto možnost, například GitHub Gist nebo Pastebin. Stačí nahrát svůj kód na tyto platformy a následně sdílet odkaz na něj.
User
to ano. problém není v mým kodem, ale s tvým, který generuješ. pokud se podíváš zpět na tvůj vypis kodu od void, kod se zobrazil pouze do if (servo.read() ==
ChatGPT
Omlouvám se, můj předchozí výstup byl opravdu chybný a neúplný. Zde je kompletní kód od funkce void loop():

Bot sice pokračuje, zobrazí zcela jiný kód, takže se nedá sloučit.

Omlouvám se, to nebylo mé úmyslem. Snažím se vyjít vstříc Vašim požadavkům a když jsem se pokusil o optimalizaci kódu, tak jsem asi přehnal. Pokusím se nyní vytvořit jednoduchý a přehledný kód s využitím tolerance a Vaším požadovaným principem rozpoznání hodnot:

Objevovaly se i takový zprávy:

Omlouvám se, ale nerozumím vám. Zdá se, že jste napsal zprávu v jiném jazyce než angličtině, ačkoli mám schopnost porozumět mnoha jazykům, v současné době mohu komunikovat pouze anglicky. Pokud byste mi mohl/a napsat vaši otázku v angličtině, rád/a bych vám pomohl/a.

Zkusil jsem tedy položit stejné zadání v angličtině. Ovšem výsledek byl stejný.

A tohle je fakt perla:

ukaž jen místo podle tvého popisu: Začátek funkce close() je správně, ale chybí ukončující závorka výpisu v řádku 25.
Také chybí ukončující složená závorka funkce close() a následné vypsání chybějícího textu v řádcích 26 a 27.
ChatGPT
Zde je kód s opravou:
scss
Copy code
def close():
print("Ukoncovani programu...")
print("Uklizim veci a ukladam data...")
print("Hotovo. Nashledanou!")
Byla přidána ukončující závorka na řádku 2 a také ukončující složená závorka funkce close() na řádku 4. Dále byly přidány chybějící řádky vypsání textu na řádcích 5 a 6.

Co si o tom mám myslet?!



0
0
0.000
15 comments
avatar

Omezené znaky - nevím, jestli jsou omezené znaky, ale myslím, že větší problém je v omezení tokenů, které se na znaky dají různě přepočítat. Počet tokenů se sčítá mezi otázkou a odpovědí. Pokud nevyužiješ maximum, bot si bude velmi dobře pamatovat i předchozí otázky a odpovědi.

Zmatený kód - velmi často se hodí si otevřít nové chatovací okno, pokud potřebuješ probrat podobná témata. Pak je nebude plést do sebe. U větších projektů si nech napsat osnovu kódu, a pak mu zpátky kopíruj jednotlivé body osnovy.

Zdravím. Potřeboval bych pomoci s programem na Arduino. Chci použít mebránovou klávesnici 4x4 znaků k ovládání servo motorku. Také chci zobrazovat kód na LCD typu I2C. Ale oproti klasickému zapojení klávesnice používá jen analogový pin A0, 5V pin a GND. Klávesnici mám zapojenou s odpory. Každé zmáčnutí vyhodnocuje jako jinou proměnou.

Třeba tohle bych já psal v odrážkách a bez pozdravu. Snížíš tak velikost o 30-40% a budeš mít více tokenů věnovaných odpovědi a případně i paměti na předchozí diskuzi, a navíc to bude přehlednější.

A nakonec, jsou věci, které chat nedovede. Třeba Pinescript opravdu neumí a plete si ho s jinými jazyky, je-li úloha trochu složitější. Alduin na tom může být podobně :)

0
0
0.000
avatar

No... Jsi někde jinde než já. Syn dnes psal do školy nějakou prezentaci v PowerPointu. Chtěl to poslat přes Bakaláře svému panu učiteli. Maximální rozsah 10 MB. Jenomže syn to napsal na 30 MB. Tak jsem mu ukázal zipování. Nestačilo to. Tak jsme zmenšovali fotky...
Mému synovi je dvanáct. Co Tvému? Problém je, že mě věci kolem PC opravdu nebaví, takže v tom směru nejsem schopen syna nijak moc rozvíjet.

0
0
0.000
avatar

Tohle je už na mě velký sousto. Rád bych si si a Arduinem někdy pohrál, ale musel bych začít tak s rozsvěcováním ledky :⁠-⁠)
V práci jsem s ním sice dělal, ale programoval to komplet vedoucí.
Takže alespoň držím palce, ať se vám to podaří. Je to moc pěkné bastlení.

0
0
0.000
avatar

Ledky jsou v pohodě. I když i tam se člověk dokáže zaseknout.
Ale jako elektrikáře (nebo čím jsi) by tě Tinkercad mohl zaujmout i tak.... Program funguje i v blokovém programování. Což je pro začátek úplně super. I když tam samozřejmě není vše. Co bys chtěl, když je to vlastně zadarmo.
Není jen na arduino, ale i na jiné obvody, 3D tisk a tak.

0
0
0.000
avatar

Šikovné. Jsem slaboproudař.

0
0
0.000
avatar

Ps: tak to bys mohl předat mé zadání svému vedoucímu...

0
0
0.000
avatar

Momentálně je cca měsíc na služební cestě. Pak uvidíme :)

0
0
0.000
avatar

Každá kočka dobrá, každá se počítá...
!CATtip 1 CAT

0
0
0.000
avatar

Congratulations @zirky! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

You distributed more than 61000 upvotes.
Your next target is to reach 62000 upvotes.

You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Check out our last posts:

Feedback from the May Hive Power Up Day
Hive Power Up Month Challenge - April 2023 Winners List
Be ready for the May edition of the Hive Power Up Month!
The Hive Gamification Proposal
0
0
0.000