- Fujifilm X
- Milyen billentyűzetet vegyek?
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- OLED TV topic
- Ez már a középkategória: teszten a GeForce RTX 5070
- Milyen TV-t vegyek?
- Azonnali VGA-s kérdések órája
-
PROHARDVER!
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
Rendeltem egy ilyen Arduino Mega 2560-at. [link]
Hiába állítom be a board típusát és a PORT-ot, a következő hibaüzenetet kapom:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
Van valakinek valami ötlete, hogy hogyan tudnám orvosolni? -
Imy
veterán
válasz
Janos250 #13714 üzenetére
Köszi szépen. A kamerás dolog is elég érdekes, és nagyon olcsó, éppen valami nagyon kis kamerát is keresek, és jó lennne, ha fel is venné a dolgokat. Majd utána nézek, hogy mit is tud.
Esetleg van róla valami jó infó, hogy hogyan érdemes nekiállni ezen boardok programozásának? Arduinoban is kezdő vagyok, egy két apró dolgot megcsinálok, ami éppen kell.
-
Imy
veterán
Tudom, hogy ez arduino topic, de a ESP32-ről és társairól mi a vélemény? Érdemesebb használni, mint az arduinót? Aki próbálta mi a véleménye róla? Gondolkozok, hogy rendelek beleőle, és próbálkozok vele.
-
Imy
veterán
Van valakinek ötlete, hogy az encoder megszakítással hogyan képes megfelelően működni? Van valakienk egy működő programja? Nekem sehogyan sem akar összejönni... Ha ezzel zsákutcába jutok jobban járok egy potméterrel, de az encoder jobb lenne.
-
Imy
veterán
Köszi, kipróbáltam. A fordító hibaüzenetet dob, és a bekötés honnan derül ki?
Ez a jelenlegi program, de lehet valamit rosszul csináltam:
#define ROTE_CLK GPIO_NUM_xx
#define ROTE_DT GPIO_NUM_xx
#define ROTE_SPCTM 50000 // speed control time limit, not defined no speedctrl
volatile int32_t rotval = 0;
void IRAM_ATTR isrrot() {
volatile static uint8_t pinsta = 0x3, cwi = 0, ccwi = 0;
volatile static uint8_t cwexp[] = {0xD, 0x4, 0x2, 0xB};
volatile static uint8_t ccwexp[] = {0xE, 0x8, 0x1, 0x7};
int32_t rvchg;
#ifdef ROTE_SPCTM
volatile static uint32_t tc = 0, tm = 0;
uint32_t ctm, td;
#endif
pinsta = (pinsta << 2) & 0xf;
if (digitalRead(ROTE_DT)) pinsta |= 0x2;
if (digitalRead(ROTE_CLK)) pinsta |= 0x1;
if (pinsta == cwexp[cwi]) cwi++;
else if (pinsta == ccwexp[ccwi]) ccwi++;
if (cwi == 0x4 || ccwi == 0x4)
{
if (cwi == 4) rvchg = 1;
else rvchg = -1;
pinsta = 0x3; cwi = 0; ccwi = 0;
#ifdef ROTE_SPCTM
ctm = micros();
td = ctm - tm;
tm = ctm;
if (td < ROTE_SPCTM / 2) rvchg *= 7;
else if (td < (ROTE_SPCTM * 2) / 3) rvchg *= 4;
else if (td < ROTE_SPCTM) rvchg *= 2;
#endif
rotval += rvchg;
}
} // isrrot
int16_t getrotv() {
static int32_t lval = 0;
int32_t cval = rotval;
int16_t rotc = 0;
if (lval != cval) {
rotc = cval - lval;
lval = cval;
}
return (rotc);
} // getrotv
void inirotein(gpio_num_t clk, gpio_num_t dt) {
pinMode(clk, INPUT);
pinMode(dt, INPUT);
attachInterrupt(digitalPinToInterrupt(clk), isrrot, CHANGE);
attachInterrupt(digitalPinToInterrupt(dt), isrrot, CHANGE);
} // inirotein
void setup() {
inirotein(ROTE_CLK, ROTE_DT);
}
void loop() {
Serial.print("Encoder_positionp = "); Serial.println(rotval);
}
-
Imy
veterán
Beleraktam a programba, de jelen esetben is össze vissza ugrál. Ha csak az encoder van benne, a hőmérséklet mérés ls kiírás nem, akkor jó. Okés, hogy a sok serial print, de az interuptnak nem kellene azt kiküszöbölnie?
#include <Adafruit_MAX31865.h>
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(5, 6, 7, 8);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
// Rotary Encoder Module connections
const int PinSW=3; // Rotary Encoder Switch
const int PinDT=4; // DATA signal
const int PinCLK=2; // CLOCK signal
// 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;
///////ENCODER//////////////////////////
// Variables to debounce Rotary Encoder
long TimeOfLastDebounce = 0;
int DelayofDebounce = 0.01;
// Store previous Pins state
int PreviousCLK;
int PreviousDATA;
int displaycounter=0; // Store current counter value
/////////////////////////////// TEMPERATURE_SET///////////////////////////////////////////
int Temp_set_pos;
int Temp_set_last;
int Temp_up;
void setup() {
Serial.begin(115200);
Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
thermo.begin(MAX31865_2WIRE); // set to 2WIRE or 4WIRE as necessary
pinMode(PinCLK,INPUT_PULLUP);
pinMode(PinDT,INPUT_PULLUP);
pinMode(PinSW,INPUT_PULLUP);
// Put current pins state in variables
PreviousCLK=digitalRead(PinCLK);
PreviousDATA=digitalRead(PinDT);
// Set the Switch pin to use Arduino PULLUP resistors
pinMode(PinSW, INPUT_PULLUP);
}
void loop() {
///////////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(500);
// If enough time has passed check the rotary encoder
if ((millis() - TimeOfLastDebounce) > DelayofDebounce) {
check_rotary(); // Rotary Encoder check routine below
PreviousCLK=digitalRead(PinCLK);
PreviousDATA=digitalRead(PinDT);
TimeOfLastDebounce=millis(); // Set variable to current millis() timer
}
// Check if Rotary Encoder switch was pressed
if (digitalRead(PinSW) == LOW) {
displaycounter=0; // Reset counter to zero
Serial.print("Counter = "); Serial.println(displaycounter);
}
}
// Check if Rotary Encoder was moved
void check_rotary() {
if ((PreviousCLK == 0) && (PreviousDATA == 1)) {
if ((digitalRead(PinCLK) == 1) && (digitalRead(PinDT) == 0)) {
displaycounter++;
Serial.print("Counter = "); Serial.println(displaycounter);
}
if ((digitalRead(PinCLK) == 1) && (digitalRead(PinDT) == 1)) {
displaycounter--;
Serial.print("Counter = "); Serial.println(displaycounter);
}
}
if ((PreviousCLK == 1) && (PreviousDATA == 0)) {
if ((digitalRead(PinCLK) == 0) && (digitalRead(PinDT) == 1)) {
displaycounter++;
Serial.print("Counter = "); Serial.println(displaycounter);
}
if ((digitalRead(PinCLK) == 0) && (digitalRead(PinDT) == 0)) {
displaycounter--;
Serial.print("Counter = "); Serial.println(displaycounter);
}
}
if ((PreviousCLK == 1) && (PreviousDATA == 1)) {
if ((digitalRead(PinCLK) == 0) && (digitalRead(PinDT) == 1)) {
displaycounter++;
Serial.print("Counter = "); Serial.println(displaycounter);
}
if ((digitalRead(PinCLK) == 0) && (digitalRead(PinDT) == 0)) {
displaycounter--;
Serial.print("Counter = "); Serial.println(displaycounter);
}
}
if ((PreviousCLK == 0) && (PreviousDATA == 0)) {
if ((digitalRead(PinCLK) == 1) && (digitalRead(PinDT) == 0)) {
displaycounter++;
Serial.print("Counter = "); Serial.println(displaycounter);
}
if ((digitalRead(PinCLK) == 1) && (digitalRead(PinDT) == 1)) {
displaycounter--;
Serial.print("Counter = "); Serial.println(displaycounter);
}
}
Serial.print("Counter = "); Serial.println(displaycounter);
}
-
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. -
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
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
-
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
Arduino ISP, ez működik, működhet, érdemes megvenni? [link]
-
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
-
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?
-
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
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.
-
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
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
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
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
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
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
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
Üzemóra számlálást hogyan, s mivel lehet/érdemes megoldani?
-
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(" ");
}}
-
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
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
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
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
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
Új hozzászólás Aktív témák
Hirdetés
- BestBuy topik
- Fujifilm X
- exHWSW - Értünk mindenhez IS
- Milyen billentyűzetet vegyek?
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Anglia - élmények, tapasztalatok
- Kerékpárosok, bringások ide!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Lenovo ThinkPad X270 (16) - i5-7300U, 16GB, 512GB SSD, 12" FULL HD
- Csere-Beszámítás! Custom vizes számítógép játékra! I7 12700KF / RTX 3090 / 32GB DDR5 / 1TB SSD
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RX 7600 XT 16GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- Vásárold meg most a Zalman T7-et, és élvezd a minőséget!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged