- Motorola Edge 40 neo - színre és formára
- Android alkalmazások - szoftver kibeszélő topik
- Motorola Moto G24 Power - hol van az erő?
- Samsung Galaxy S24 - nos, Exynos
- Poco X6 Pro - ötös alá
- Alkalmazásbemutató: Keep
- Futott egy Geekbench kört egy új HTC készülék
- Azonnali mobilos kérdések órája
- Apple AirPods Pro (2. generáció) - csiszolt almaságok
- Huawei Mate 10 Pro - mestersége az intelligencia
Hirdetés
-
Dragon Ball: Sparking! Zero - Mester és tanítvány
gp Egyelőre még mindig nem kaptunk megjelenési dátumot a játékhoz.
-
Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
it Egyre nagyobb probléma az AI hallucinálása – most az osztrák adatvédelmi hatóság veheti elő a ChatGPT miatt az OpenAI-t, alapvetően a GDPR megsértése miatt.
-
Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
ph A cég megoldása centralizált vezérelhetőséggel, masszív radiátorral és robusztus ventilátorokkal igyekszik vásárlásra csábítani.
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Imy
veterán
Most ismerkedek az arduinóval, de nem akar összejönni a következő program részlet. A lényeg hogy a nyomógomboknak a 13-as kimenetet kellene működtetni,. Ha megnyomom bekapcsol, ha megnyomom még egyszer kikapcsol.
Vizsgálni akarom, ha be van kapcsolva akkor lehessen kikapcsolni... De nem megy.#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljukLiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); //pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtásint KiAll_13; //13. kimenet állapotát figyeljük
KiAll_13 = 0; // alapértelmezés beállításadigitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}void loop()
{
nyomogomb_BE();
nyomogomb_KI();}
void nyomogomb_BE()
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW){
digitalWrite((LED), HIGH);
int KiAll_13 = 1;
}
}
}void nyomogomb_KI()
{
if (KiAll_13 == 1)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
int KiAll_13 = 2;
}
}
}
}sketch_oct18a.ino: In function 'void nyomogomb_KI()':
sketch_oct18a:64: error: 'KiAll_13' was not declared in this scope
'KiAll_13' was not declared in this scope -
Imy
veterán
Erről mi a véleményetek? Magam találtam ki, és működik. Valami hiba esetleg? Jobban szeretem én kitalálni, s szívni vele. persze segítség sosem árt.
De ez nagyon az eleje a végleges programnak.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljukLiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolvapinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás//int KiAll_13; //13. kimenet állapotát figyeljük
//KiAll_13 = 0; // alapértelmezés beállításadigitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}void loop()
{// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if (digitalRead(LED) == LOW)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
delay(1000);
}
}
}// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if (digitalRead(LED) == HIGH)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
delay(1000);
}
}
}}
-
Imy
veterán
4 soros LCD-t tudtok ajánlani e-bayről ami jól működik? 2 sorosom van, de kevés lesz, sok információt szeretnék kiírni rá.
-
Imy
veterán
Most nézem, itt 2x16-os LCD-re van írva.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); //set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("b2cqshop");
lcd.setCursor(0, 1);
lcd.print("Voltage: ");
lcd.setCursor(13, 1);
lcd.print("V");
}
void loop()
{
int val;
float temp;
val=analogRead(0);
temp=val/4.092;
val=(int)temp;//
lcd.setCursor(9, 1);
lcd.print(0x30+val/100,BYTE);
lcd.print(0x30+(val%100)/10,BYTE);
lcd.print('.');
lcd.print(0x30+val%10,BYTE);
delay(100);
}Ha ezt a sort átírom, akkor elvileg tudja a 4x20-at?
LiquidCrystal_I2C lcd(0x27,20,4);Kiírás hogyan megy ISP-nél, ugyanúgy mint a hagyományosnál? Pl...
lcd.begin(20, 4); //Az LCD 4 sor, 20 oszlopos
lcd.setCursor(3, 1); //
lcd.print("tESZT:"); // -
Imy
veterán
Vettem egy DHT22-es szenzort, de nem jutok vele elöbbre, nem működik. Tudnátok egy normális DHT könyvtárat, és egy mintaprogramot, amit használtok is? Köszi!
-
Imy
veterán
Vettem egy 4 soros LCD-t, I2C buszosat.
A régi kijelzőnél minden OK volt, a setup részben kiírt szöveg mindig ott maradt. I2C-nél pedig csak a hőmérséklet mérés megy....
Ennek mi az oka? Illetve mit tehetek ellene? Úgy veszem észre, a régi adatok kiírása nem megy, mintha mindig az írá ki, am az utolsó frissítéskor van. tehát ha frissít, és nincsenek benne a régi adatok, akkor törli.#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Sensirion.h>LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
// SDA-A4, SCL-A5
//PIN0
//PIN1
//PIN2
//PIN3
//PIN4
//PIN5
/*PIN6*/ int NYOMOGOMB = 6; //PIN6
/*PIN7*/ const uint8_t dataPin = 7;
/*PIN8*/ const uint8_t clockPin = 8;
//PIN9
//PIN10
//PIN11
//PIN12
/*PIN13*/ int LED = 13;boolean ledstate = true; //LED állapot figyelése
float temperature;
float humidity;
float dewpoint;Sensirion tempSensor = Sensirion(dataPin, clockPin);
int seconds = 5; //start seconds
int minutes = 0; //start minvoid setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0, 0); //
lcd.print("Gomb:"); //
lcd.setCursor(6, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolvapinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás
digitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként}
void loop()
{// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if ((digitalRead(LED) == LOW) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
lcd.init();
ledstate = false;
delay(50); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(6, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
}// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if ((digitalRead(LED) == HIGH) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
lcd.init();
ledstate = false;
delay(50); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(6, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
}if ((digitalRead(NYOMOGOMB) == HIGH) && (!ledstate))
{
ledstate = true;
}// hőmérséklet mérése
if (digitalRead(LED) == HIGH)
{
tempSensor.measure(&temperature, &humidity, &dewpoint);
lcd.init();
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.setCursor(2, 1);
lcd.print(temperature);
lcd.setCursor(6, 1);
lcd.print("C H:");
lcd.setCursor(11, 1);
lcd.print(humidity);
lcd.setCursor(15, 1);
lcd.print("%");
/*
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Dewpoint: ");
Serial.print(dewpoint);
Serial.print(" C");*/
delay(500);
}if (digitalRead(LED) == LOW)
{
lcd.init();
lcd.setCursor(0, 1);
lcd.print(" ");
}}
[ Szerkesztve ]
-
Imy
veterán
Üzemóra számlálást hogyan, s mivel lehet/érdemes megoldani?
-
Imy
veterán
válasz gyapo11 #2331 üzenetére
Akkor lehet elég lenne 30 percenként beleírni, és úgy sokat kibírni. Így mi az ajánlott?
Illetve valami egyszerűbb példa nincs? Mert ilyet még nem csináltam. Arduinoval is csak keveset foglalkoztam, alap dolgok kb mennek. Az első projektem egyik része,a többin dolgozok. -
Imy
veterán
Egg sort hogyan lehet törölni?
Azt tudom, hogy az lcd.clear()-al az egész kijelzőt törlöm.
Egy sorban módosulnak az adatok, és zavaró, ha a visszaszámlálónál ott maradnak az adatok. -
Imy
veterán
Sziasztok! Eddig TFT-vel nem foglalkoztam. A [linken] található 2.4"-os érintésérzékeny TFT mennyire ajánlott?
Valaki már használt ilyet? Esetleg nincs valahol egy teszt illetve egy mintaprogram? -
Imy
veterán
válasz Gergosz2 #7588 üzenetére
Ez a színes LCD ugyanaz mint amit korábban linkeltél? Ha igen, akkor 8$-ért rendelem is. Amúgy van valahol valami példa, vagy egy példafeladat? Legalább lesz mivel elszórakoznom. A NANO-val neki lehet állni a programozásához?
-
Imy
veterán
Olyan problémám lenne, hogy egy nyomógombbal akarom elindítani, majd esetleg egy hosszú nyomással leállítani a motort, ami a következő program szerint fut:
/*
*/
#include <Stepper.h>
#define STEPS 100
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
Stepper small_stepper(STEPS, 8, 10, 9, 11);
int Steps2Take = 0;
long temps = 0;
int Compteur;
int Rotate_n_temp;
int Rotate_n;
int PSW = 5;
int PSW_S = 0;
void setup()
{
pinMode(13, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(PSW, INPUT); // Push Switch
}
void loop()
{
if (digitalRead(PSW) == HIGH)
{
Push_b_on:
Rotate_n=2;
Rotate_n_temp = Rotate_n-1;
digitalWrite(13, HIGH);
delay(100);
small_stepper.setSpeed(300);
if (Compteur<=Rotate_n_temp){
Steps2Take = -4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
Steps2Take = 4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
// Glignotement de la LED
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
Compteur++; //Ajoute 1 au Compteur
}
else{
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
Compteur=0;
goto Push_b_on;
}
}
else
{
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(100);
}
}Mivel soros futású a program, így a goto paranccsal nem ugrik vissza az elejére, azaz ha akkor nincs benyomva a gomb, akkor nem megy a motor.
Hogyan lehetne megoldani, hogy a gomb egyszeri rövid nyomására elinduljon, és addig ne álljon le, amíg a gombot nem nyomom hosszan? (Leállítás kb 2sec nyomásra)
-
Imy
veterán
válasz Teasüti #10167 üzenetére
Hát nem az első, de bonyolult dolgokat nem szoktam vele csinálni.
Amit linkeltél, abban nem találom, de inkább leírom szavakkal.
Adott egy gomb, és egy nyomógomb.
A LED addig nem villog, amíg nem nyomom meg a nyomógombot. Ha röviden megnyomom nekiáll villogni a végtelenségig vagy ha hosszan nyomom a gombot akkor megáll. Ha ismét röviden nyomom, akkor kezdi elöről, addig nem áll meg, amíg a nem nyomom hisszan a gombot. Ezt rá tudnám húzni a jelenlegi motormozgatásra is szerintem. De erre kellene nekem egy mintaprogram, mert annyira ezt így nem vágom.
-
Imy
veterán
válasz gyapo11 #10172 üzenetére
Igen, a loopnak pörögnie kellene, de a gomb megnyomását valahol el kellene tárolni, és akár kiolvasgatni. De azt nem tudom, hogy hova, vagy hova.
Egyszerű dolgokra szoktam használni az arduinot, most is egy relé panellel ezt meg tudnám oldani, de hely nincs a panelnek, és könnyű, egyszerűnek kellene lennie.
Remélem valaki tud segíteni, aki már csinált ilyet.
-
Imy
veterán
Egy pédát tudsz?
Neme úgy kell, hogy a "void loop" többször lefut, de a gomb megnyomásának az értéke a "void loop"-ok alatt mindig "bekapcsolnak" kell lennie. Hosszú vagy 2. gombnyomásra pedig hamisnak, hogy álljon le a "void loop".
Azaz pl a "void loop"-ban egy LED fel, le kapcsolás van (csak egy példa), és ez úgymond vilog addig, amíg a gombot nem nyomom meg még egyszer, vagy pedig hosszan.
[ Szerkesztve ]
-
Imy
veterán
válasz Teasüti #10178 üzenetére
Ez a programom, és így kellene működnie, de most már nem tudom, hogy mit is, és hova kellene beleraknom...
Nekem így működik most:
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)A gombnak ennyit kellene csinálnia:
- Gomb megnyom röviden, akkor indul el a motor
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)
- Gomb megnyom hosszan, akkor megáll a motor
- LED, motor áll, nem csinál semmit
- Gomb megnyom röviden, akkor indul el a motor
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- Motor megy x fordulatot
- LED villog x ideix x-szer, jelzi, hogy vár
- ... (végtelenségig megy, ha nincs gombnyomás)Programkód:
/*
===============
Stepper wiring:
===============
Arduino - Driver
D8 - IN1
D9 - IN2
D10 - IN3
D11 - IN4
===========
LED wiring:
===========
LED "-" : GND
LED "+" : D13
*/
#include <Stepper.h>
#define STEPS 100
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
Stepper small_stepper(STEPS, 8, 10, 9, 11);
int Steps2Take = 0;
long temps = 0;
int Cycle;
int Rotate_n_temp;
int Rotate_n;
int PSW = 5;
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode(IN1,OUTPUT); //stepper motor coil-1
pinMode(IN2,OUTPUT); //stepper motor coil-2
pinMode(IN3,OUTPUT); //stepper motor coil-3
pinMode(IN4,OUTPUT); //stepper motor coil-4
pinMode(PSW, INPUT); // Push Switch
}
void loop()
{
Rotate_n=1;
Rotate_n_temp = Rotate_n-1;
digitalWrite(13, HIGH);
delay(100);
Serial.println("Stepper motor working, one cycle is OK ");
small_stepper.setSpeed(300);
if (Cycle<=Rotate_n_temp){
Steps2Take = -4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println("Rotate cycle noumber:");
Serial.println(Rotate_n);
Serial.println("Motor step noumber:");
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
Steps2Take = 4096;
temps = millis();
small_stepper.step(Steps2Take);
temps = millis()- temps ;
Serial.println(temps);
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
delay(2000); //pause
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
Cycle++;
}
else{
digitalWrite(IN1, LOW);
delay(2);
digitalWrite(IN2, LOW);
delay(2);
digitalWrite(IN3, LOW);
delay(2);
digitalWrite(IN4, LOW);
delay(2);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
/* digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
digitalWrite(13, HIGH);
delay(2000);*/
//1 min waiting, and restart motor
Cycle=0;
}
} -
Imy
veterán
válasz Teasüti #10189 üzenetére
Köszi, akkor érdemes kitenni külön "void"-ba azaz szubrutinba, ugye?
Amúgy a működés így fest, vagyis így kellene működnie, csak a kapcsolót kellene beleintegrálni. [link]
Az általad említett:
if (millis() > temp + 1000) { }
Ezt mire is tudom használni? Hogy csak akkor ugorjon be a ciklusba, ha eltellik az idő? A millis az 1ms? Temp? +1000?
[ Szerkesztve ]
-
Imy
veterán
-
Imy
veterán
válasz Teasüti #10192 üzenetére
Köszönöm, ez részben már működik, de sajnos még nem jól.
Gombnyomásra elindul => OK
Hosszú gombnyomásra nem áll meg.
Nem tudom hol állítani, hogy X fordulatot menjen, majd Y ideig ne. (X fordulat a végleges programban 20 oda-vissza forgás lesz, és Y idő 55 perc) Azaz óránként megtesz 20 fordulatot, és 55 percig nem csinál semmit.
Ha nem csinál semmit, akkor a LED-et kell villogtatni, hogy lehesen látni, hogy stand-by állapotban van a cucc. -
Imy
veterán
Arduino ISP, ez működik, működhet, érdemes megvenni? [link]
-
Imy
veterán
Arduinoval ezzel amódszerrel: [link] Mekkora ellenállás értéket lehet mérni, és milyen pontossággal? Egy Weller pákát szeretnék szabályozni egy nano-val. Alkalmas lehet ez rá, vagy sem? Ha nem, akkor mit lenne érdemes használnom, és hogyan?
A weller páka 20 fokon ~22 ohm, és 350 fokon ~50 ohm.
Rt=T*R0*Ra+R0 ahol Ra=0,00385ohm -
Imy
veterán
-
Imy
veterán
Arduinoval mivel lehetne negyon pontosan ellenállást mérni? 20-60 ohm közötti értéket. Akár valami moduleval.
-
Imy
veterán
Arduinoval szeretnék megoldani egy ellenállás mérést, ami hőt mér, és egy KY-040-el egy hőmérséklet beállítást. Ha ezt a kódot [link] futtatom a doksi végén, akkor hiba nélkül megy az encoder poziciójának számolása. Ha ez után beteszem a hőmérséklet mérést, akkor már nem mey, össze-vissza számol:
#include <Adafruit_MAX31865.h>
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF 430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL 100.0
//Resistance meter
float Ra = 0.00385;
float R0 = 20.9;
float Rt;
float T;
//HW-040 encoder
int pinA = 3; // Connected to CLK on KY-040
int pinB = 4; // Connected to DT on KY-040
int encoderPosCount = 0;
int pinALast;
int aVal;
boolean bCW;
void setup() {
Serial.begin(115200);
Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
thermo.begin(MAX31865_2WIRE); // set to 2WIRE or 4WIRE as necessary
pinMode (pinA, INPUT);
pinMode (pinB, INPUT);
pinALast = digitalRead(pinA);
}
void loop() {
/////////////ENCODER//////////////////////////////////////////////////////////////////////////////
aVal = digitalRead(pinA);
if (aVal != pinALast) { // Means the knob is rotating
// if the knob is rotating, we need to determine direction
// We do that by reading pin B.
if (digitalRead(pinB) != aVal) { // Means pin A Changed first - We're Rotating Clockwise
encoderPosCount ++;
bCW = true;
} else {// Otherwise B changed first and we're moving CCW
bCW = false;
encoderPosCount--;
}
Serial.print ("Rotated: ");
if (bCW) {
Serial.println ("clockwise");
} else {
Serial.println("counterclockwise");
}
}
pinALast = aVal;
Serial.print("Encoder Position: ");
Serial.println(encoderPosCount);
///////////MAX31865////////////////////////////////////////////////////////////////////////////
uint16_t rtd = thermo.readRTD();
//Serial.print("RTD value: "); Serial.println(rtd);
float ratio = rtd;
ratio /= 32768;
Rt = RREF * ratio;
T = ((Rt - R0) / (R0 * Ra));
//Serial.print("Ratio = "); Serial.println(ratio,8);
Serial.print("Resistance = "); Serial.print(RREF * ratio, 2); Serial.println(" ohm");
//Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));
Serial.print("PakaTemp = "); Serial.print(T, 2); Serial.println(" C");
// Check and print any faults
uint8_t fault = thermo.readFault();
if (fault) {
Serial.print("Fault 0x"); Serial.println(fault, HEX);
if (fault & MAX31865_FAULT_HIGHTHRESH) {
Serial.println("RTD High Threshold");
}
if (fault & MAX31865_FAULT_LOWTHRESH) {
Serial.println("RTD Low Threshold");
}
if (fault & MAX31865_FAULT_REFINLOW) {
Serial.println("REFIN- > 0.85 x Bias");
}
if (fault & MAX31865_FAULT_REFINHIGH) {
Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_RTDINLOW) {
Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_OVUV) {
Serial.println("Under/Over voltage");
}
thermo.clearFault();
}
Serial.println();
//delay(1000);
}
-
Imy
veterán
válasz gyapo11 #13566 üzenetére
Akárhogy is próbálkozok, nem találok rendesen működő példát. Van hogy kihagy az encoder számolása, ha van benne más is.
[link] Itt a 18-as hozzászólást próbáltam, de nem igazán működik ez sem.
Az interruptot meg fogalmam sincs, hogyan kell kezelni. Nem értek én annyira az arduinohoz.
Új hozzászólás Aktív témák
- Videó stream letöltése
- Azonnali informatikai kérdések órája
- Ubiquiti hálózati eszközök
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Motorola Edge 40 neo - színre és formára
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Autós kamerák
- Android alkalmazások - szoftver kibeszélő topik
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Ukrajnai háború
- További aktív témák...