Tere, ütlen kohe ära, et koodikirjutamisest ei tea suurt midagi, ent ühe projekti jaoks oleks vaja üht funktsiooni arduinolt saada. Nimelt PWM juhtimine kahe pushbutton tüüpi nupu abil. Googlest leidsin kunagi mingisuguse koodijupi(algselt mingi LED-i timmimine oli, natuke sättisin seal, et PWM astmed ühekaupa saaks jms), kus üks nupp hakkab PWM-i kasvatama kuni maksimumini välja ja teine kahandab siis vastavalt. Muidu kõik iseenesest toimib, aga täpset ja kiiret reguleerimist samaaegselt ei saa teha. Nimelt nupp reageerib kohe kui vajutada üksteise otsa 256ks jagatud PWM-i vähendamise/suurendamisega. Hetkel on siis nii, et kui tahan PWM-i täpselt iga 256 sammu kaupa eraldi juhtima, siis pean selle delay 100ms kanti jätma, ent kui tahan sellisel juhul peale sisselülitust kiirelt näiteks 70% PWM-ini jõuda, siis see ei õnnestu, pean nuppu pikalt all hoidma ja ootama. Kui delay näiteks 10ms panen, siis läheb küll kiirelt ja ludinal üles, ent täpselt ei saa reguleerida, kuna nupuvajutuse aja sisse jääb palju PWM-i astmeid. Ideaalne variant oleks selline, kus nuppu vajutades kõigepealt liigutaks ühe astme võrra üles/alla PWM-i ja rohkem mitte. Kui nüüd nuppu all hoida, siis näiteks 1000ms pärast hakkaks kiirelt üles/allapoole kerima PWM-i. Nõnda oleks kiirus ja täpsus saavutatavad. Lisan olemasoleva koodijupi jutu lõppu, et ehk keegi oskab täiendada seda koodi veidi sobivaks. Teine variant oleks viidata sobivale valmiskoodijupile kusagil, ise otsisin, aga paraku ei jäänud sobivat silma.
/*
The circuit:
* pushbutton attached to pin 7 & 9 from 5V
* 10K resistor attached to GND
* LED attached from PWM Pin 8 to ground (or use the built-in LED on
most Arduino boards)
created 20 Feb 2014
by Syed Nasir
This example code is in the public domain.
*/
// constants won't change. They're used here to
// set pin numbers:
const int posButton = 9; // + button pin 9
const int negButton = 8; // + button pin 9
const int ledPin = 6; // LED pin connected to pin 8
// variable for LED brightness
int brightness;
// variables will change:
int posButtonState = 0; // variable for reading the pushbutton status
int negButtonState = 0; // variable for reading the pushbutton status
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(posButton, INPUT);
pinMode(negButton, INPUT);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
} // end of setup
void loop() {
// put your main code here, to run repeatedly:
// read the state of the pushbutton value:
posButtonState = digitalRead(posButton);
negButtonState = digitalRead(negButton);
// only one button pressed at a time
if (posButtonState == HIGH && negButtonState == LOW)
{
if (brightness <= 254)
{
brightness = brightness +=1;
}
else
{
brightness = 255;
}
// led lights up
analogWrite(ledPin, brightness);
Serial.print (brightness);
Serial.println ();
}
if (negButtonState == HIGH && posButtonState == LOW)
{
if (brightness >= 1)
{
brightness = brightness -=1;
}
else
{
brightness = 0;
}
// led lights up
analogWrite(ledPin, brightness);
Serial.print (brightness);
Serial.println ();
}
delay (100);
} // end of loop
Hej:)
Kas keegi on Blynk-is saanud gsm800/900 modemiga mõne sketsi üle gprs-i tööle?
Või oskab nõu anda kus Eestis Arduino parim foorum vms on ?
Tänx _________________ Samsung Galaxy Spica, S2, S4, S5, S6 Edge, S8
Kasutasin sellist koodi, kõik toimib, aga kas nii pikk delay näiteks 5 tunni peale on täpne või on see millegi muu pärast halb mõte?
void loop() {
digitalWrite(12, HIGH); // roheline tuli sisse
delay(60000); // aeg millisekundites
digitalWrite(12, LOW); // roheline tuli välja
digitalWrite(11, HIGH); // punane tuli sisse
delay(240000); // aeg millisekundites
digitalWrite(11, LOW); // punane tuli välja
Küsimus küll RPI kohta, aga äkki keegi siit oskab aidata. Lühidalt olukord selline. Terminalis lasen käima sudo python dallas.py ja see hakkab siis temp anduritelt infi saama ja 5 minutilise intervalliga netti saatma. Kui nüüd wifi ikaldub näiteks korraks, siis ongi timeout ja pean selle käsu uuesti käima laskma käsitsi. Samuti peab olema terminali aken avatud alati. Kui peale käsu käima laskmist terminali akna nurgast sulgen, siis ei saadeta ka infot enam järgneva viie minuti pärast. Kuidas nii teha, et Pi näiteks iga 60 minuti tagant teeks igal juhul restardi ja käima minnes avaks ise terminali ka käivitaks selle käsu ka?
Teine variant võib ka nii olla, et Pi ei tee restarti, aga see terminali aken koos käsu uuesti käima ajamisega tehtaks automaatselt iga tunni tagant.
olafsand, lase script screenis käima ja siis detachi ning sulge aken...
Üldiselt võid ka selle kõik cron'i toppida, mingi lihtsa skriptijupiga, mis eelmise instantsi olemasolu checkiks, selle vajadusel sulgeks ja uue käima tõmbaks. _________________ ...life is random...so am I...
So, there is a fan. Time to grab your sh*t, gentlemen!
nohup käsk/programm on sellisteks otstrarbeteks mõeldud
>nohup python ./skript.py
Ja mis puudutab viit tundi ja arduinot, siis võiks olla piisavalt täpne.
Ma panin 4 arduiont ledribasid vilgutama delaydega. ning 12 tunniga ei olnud veel märgata et need oleks süngist välja läinud.
Aga need tõmmatakse iga õhta seinast välja, seega mitme päeva kogemus puudub.
riaak, ei oska kui aus olla
Kas nii ei oleks võimalik, et mingi remote desktopi panen PI peal käima ja sa võtad asja üle ja teed selle paranduse skripti?
olafsand, pane script kuskile pastebin'i ja link viska siia, küll keegi ära parandab. _________________ ...life is random...so am I...
So, there is a fan. Time to grab your sh*t, gentlemen!
Millelegi pärast mulle tundub, et Arduino siin üleliigne. Need 2 asja peaks saama omavahel otse ühendada. _________________ Huvid: mikrokontrollerid, DIY, IoT, CNC, 3D print.
Mul on dallas.py fail mida vaja käitaga. Ka siis kui näiteks restardi teen vaarikale, et siis see läheks ise käima uuesti (dallas.py mõtlen)
Vaarikasse sisselogimine on user:pi ja siis parool. Siis edasi on terminalis cd /home
home kaustas käsk sudo python dallas.py ja vajalik asi hakkab tööle
terminalis crontab -e ja seal peaks lisama viimase rea? Olen sinna sättinud igatepidi, aga käima asi ei hakka. Lähenen valest kohast crontab`ile?
riaak, aitäh, proovin õhtul. Eile proovisin ka, aga tekkis olukord, et ei osanud seda viimast rida kuidagi ära salvestada crontabi. Lähenen Pi`le läbi Putty programmi. Mis klahvikombinatsiooniga ma salvestada saan seda?
Siis peaks saama asja tööle /etc/rc.local faili lisades rea python /home/dallas.py
Kindel, et sul skript ei asu: /home/pi/dallas.py ? _________________ Linux - Future "Those Who Sacrifice Liberty For Security Deserve Neither." - Benjamin Franklin 1984 was not supposed to be instruction manual
Keegi pärnust jagab arduino asja? On üks led ring sw2812. Ei suuda kuidagi seda tööle saada. Enne kui uue tellin, siis äkki keegi viitsiks korra vaadata seda. _________________ pWn
Keegi pärnust jagab arduino asja? On üks led ring sw2812. Ei suuda kuidagi seda tööle saada. Enne kui uue tellin, siis äkki keegi viitsiks korra vaadata seda.
Keegi pärnust jagab arduino asja? On üks led ring sw2812. Ei suuda kuidagi seda tööle saada. Enne kui uue tellin, siis äkki keegi viitsiks korra vaadata seda.
kas isegi need neopixel-i näited ei hakka tööle?
Katsetasin nii fastLed kui neopixeli omasid. Lisaks veel katsetasin 3 eri nano mudelit + ühte unot ( odavad hiinlased) .
Kui keegi viitsiks lihtsa koodikese siia visata, et kõiksugu tarkvaralised vead välistada, siis oleksin väga tänulik. _________________ pWn
https://randomnerdtutorials.com/guide-for-ws2812b-addressable-rgb-led-strip-with-arduino/
Siin näited küll. Kas sul ikka piisav toide? ja võiks 470 ohmise takisti vahele panna ja 1000uF kondekas ette panna muidu võimalus et lasedki esimese ledi läbi äkki. Ja kui ma ei eksi siis kui esimene läbi siis rida ei tööta juba, ehk võid prooviks esimese ledi mängust välja jätta.
plõksin niisama aga kas need ws2812 on sul kindlasti ws2812 kui hiinast siis nad võivad vabalt sealt mida iganes saata, näiteks 5v asemel 12v omad või vastupidi.
Ka hädas ühe koodiga. Katsetasin aga ei oska ikka koodi kirjutada nii nagu tahaks.
Tahaks magamistuppa LED kella, mille minimaalset ja maksimaalset heledust saan koodis ise paika reguleerida. See osa kõik töötab ja kell näitab aega.
Probleem on selles, et kella aega ei saa muuta. Kas üks või kaks kerimise nuppu tuleks juurde panna. Häda pärast piisaks isegi ühest nupust mis keriks kella edasi.
Hetkel on nii, et pean kell 00:00 süsteemi käima panema, et kell õige oleks Õnneks patareiga seisab aeg paigas aga võiks ikka mõni nupp ka olla kella reguleerimiseks.
Kasutan UNO nano versiooni. PIN A0, A4 ja A5 on kasutuses.
Juba mõnus oleks kui keegi saaks aidata
Kella kood:
Spoiler
// MyClock v1.1
// Ingo Lohs
// Hardware: tested with Arduino Uno and Arduino Nano (ATmega328P [Old Bootloader]) by using Arduino IDE v1.8.8
// Change v1.0 > v1.1
// dayOfWeek == 1 anstatt 7 abgeändert in displayTime() zur korrekten Ermittlung des Sonntages für die Zeitumstellung
/* Theory for the Matrix ht16k33
The easiest is to just call print - just like you do with Serial
print(variable,HEX) - this will print a hexidecimal number, from 0000 up to FFFF
print(variable,DEC) or
print(variable) - this will print a decimal integer, from 0000 up to 9999
If you need more control, you can call writeDigitNum(location, number) - this will write the number (0-9) to a single location.
Location #0 is all the way to the left, location #2 is the colon dots so you probably want to skip it, location #4 is all the way to the right.
To control the colon and decimal points, use the writeDigitRaw(location, bitmap) function.
(Note that both dots of the center colon are wired together internal to the display, so it is not possible to address them separately.)
Specify 2 for the location and the bits are mapped as follows:
0x02 - center colon (both dots)
0x04 - left colon - lower dot
0x08 - left colon - upper dot
0x10 - decimal point
If you want a decimal point, call writeDigitNum(location, number, true) which will paint the decimal point.
To draw the colon, use drawColon(true or false)
If you want full control of the segments in all digits, you can call writeDigitRaw(location,bitmask) to draw a raw 8-bit mask (as stored in a uint8_t) to any location.
All the drawing routines only change the display memory kept by the Arduino. Don't forget to call writeDisplay() after drawing to 'save' the memory out to the matrix via I2C.
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#define DS3231_I2C_ADDRESS 0x68
int ldr_sensor = A0; // LDR Photoresistor with 100k Ohm to GND, other leg 5V
int ldr_value = 0; // LDR value - var store value
int brightness_matrix; // LED Matrix brightness - var store value
int threshold_brightness = 400; // Threshold
int blinkrate_value = 0; // LED Matrix blink rate
int delay_matrix_time = 20; // how long display time (20 sec)
int delay_matrix_temp = 2000; // how long display temp (2 sec)
int blinky_dot = 2; // blinks nothing - on the left side 2 single dots
void loop() {
lightBrightness(); // Matrix-Brightness Justierung
matrixBlinkrate(); // Mattrix-Blinkrate Jusitierung
displayTime(); // display the real-time clock data
displayTemp(); // display the temperature
}
void lightBrightness() {
// setBrightness(brighness) - will let you change the overall brightness of the entire display. 0 is least bright, 15 is brightest and is what is initialized by the display when you start
ldr_value = analogRead(ldr_sensor);
Serial.print("LDR: ");
Serial.println(ldr_value);
if (ldr_value <= threshold_brightness) { // measurement of brightness vs Threshold
brightness_matrix = 0; // bright at daylight
}
else {
brightness_matrix = 15; // dark at night
}
}
void matrixBlinkrate() {
// blinkRate(rate) - You can blink the entire display. 0 is no blinking. 1, 2 or 3 is for display blinking.
matrix.blinkRate(blinkrate_value);
}
// how long display time on matrix in seconds
for (uint16_t i = 0; i < delay_matrix_time; i++) {
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
byte se = second;
byte mi = minute;
byte ho = hour;
byte we = dayOfWeek;
byte dm = dayOfMonth;
byte mo = month;
byte ye = year;
// změna času na letní - poslední neděle v březnu ve 2 hodiny
// >> Change to summer time - last Sunday in March at 2 o'clock
if ((dayOfWeek == 1) && (dayOfMonth >= 25)&& (month == 3) && (hour == 2)) {
// nastavení hodin na 3 hodinu
// set the clock to 3 hours
setDS3231time(se,mi,3,we,dm,mo,ye);
}
// změna času na zimní
// >> Change to winter time
if ((dayOfWeek == 1) && (dayOfMonth >= 25) && (month == 10) && (hour == 1)&& (year != 1)) {
// rok použit jako indikace, že bylo léto
// year used as an indication that it was summer
setDS3231time(se,mi,ho,we,dm,mo,1);
}
if ((dayOfWeek == 1) && (dayOfMonth >= 25) && (month == 10) && (hour == 3) &&(year == 1)) {
// nastavení hodin na 2 hodinu a příznak na 0
// set the clock to 2 hours and flag year to 0
setDS3231time(se,mi,2,we,dm,mo,0);
}
/*
Specify 2 for the location and the bits are mapped as follows:
0x02 - center colon (both dots)
0x04 - left colon - lower dot
0x08 - left colon - upper dot
0x10 - decimal point
*/
/* location #2 controls also the left 2 single points like this (=blinky_dot):
2 = blinks nothing
3 = blinks nothing
4 = blinks top left (single upper dot)
5 = blinks top left (single upper dot)
6 = blinks top left (single upper dot) + both Colon in mid
7 = blinks top left (single upper dot) + both Colon in mid
8 = blinks bottom left (single lower dot)
9 = blinks bottom left (single lower dot)
10 = blinks bottom left (single lower dot) + both Colon in mid
11 = blinks bottom left (single lower dot) + both Colon in mid
12 = blinks both Colon (both single dots left) without both Colon in mid
*/
// format hours: _0:mm
if (hour > 9) {
matrix.writeDigitNum(0, (hour / 10), false);
matrix.writeDigitNum(1, (hour % 10), false); // this will write the number (0-9) to a single location by using modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/
} else {
matrix.writeDigitNum(1, hour, false);
}
// matrix.drawColon(true); // both Colon in mid active: in case you want not blink the dots left you can activate the both Colon here
// give seconds a chance to show at left location dots
if (se <= 30) {
blinky_dot = 10; // blinks bottom left (single lower dot) + both Colon in mid
} else if (se > 30) {
blinky_dot = 6; // blinks top left (single upper dot) + both Colon in mid
}
matrix.writeDigitRaw(2, blinky_dot);
byte temp = get3231Temp();
int abs_temp = abs(temp); // absolute number of a value
matrix.writeDigitNum(1,(abs_temp % 10), false); // position 1, value 9, show decimal)
if (temp < 0) matrix.writeDigitRaw(0,64);
if (temp <= -10) matrix.writeDigitRaw(2,12); // and if the temperature is negative, we plot the minus sign to first place.
if (temp >= 10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
if (temp <= -10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
// matrix.writeDigitRaw(2,0x10); // decimal dot
// displays temperature values on the serial line
// zobrazí hodnoty teploty na seriove lince
Serial.print("Temperatur in C: ");
Serial.println(get3231Temp()); // +/- 3 Grad Celsius
// how long display temp on matrix in seconds
delay(delay_matrix_temp);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year){
// set time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year){
// set time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
Ei ole kindel aga kui sulgudesse paned ajad ja kuupäevad (nagu taga kirjas) ja siis upid koodi võiks nagu tööle hakata....aga ei ole kindel
Link
siin miski näide selle mooduli kohta...saad äkki ringi mudida kui sellest koodist jagu ei saa mis sul hetkel on.
Ma täpset koodi ei mäleta, kuid kella ja kuupäeva pidid määrama ainult setupis ja ühe korra ja edaspidi selle koodist välja jätma, muidu ta kirjutabki iga kord selle algusest üle kui koodi uuesti käima lased. Pead midagi muud kasutama, et seda jooksvalt muuta. _________________ OBSBOT veebipoe affiliate link / 5% sooduskood: TUIKOTREW
Müüa uus Agon by AOC 610Hz monitor AG246FK6
Sain kella niipalju tööle, et enam ei hakka aeg jooksma 0:00 vaid saan määrata ise mis kellast hakkab aega lugema, näiteks kell 18:00, nii ei pea südaööd ootama, et kella käivitada Üllatav oli veel see, et kolme kuu katse perioodil käis kell ainult 1sek. ette. Kartsin palju hullemat või on see puhas õnnemäng realclock taimeriga?
Teine soov oleks panna temperatuuri näitama koma kohaga. No mitte ei saa hakkama. Hetkel näitab numbreid enne koma aga võiks näidata ka ühte kohta peale koma.
Oskab keegi aidata või kaasa mõelda..?
Spoiler
// Hardware: tested with Arduino Uno and Arduino Nano (ATmega328P [Old Bootloader]) by using Arduino IDE v1.8.8
/* Theory for the Matrix ht16k33
The easiest is to just call print - just like you do with Serial
print(variable,HEX) - this will print a hexidecimal number, from 0000 up to FFFF
print(variable,DEC) or
print(variable) - this will print a decimal integer, from 0000 up to 9999
If you need more control, you can call writeDigitNum(location, number) - this will write the number (0-9) to a single location.
Location #0 is all the way to the left, location #2 is the colon dots so you probably want to skip it, location #4 is all the way to the right.
To control the colon and decimal points, use the writeDigitRaw(location, bitmap) function.
(Note that both dots of the center colon are wired together internal to the display, so it is not possible to address them separately.)
Specify 2 for the location and the bits are mapped as follows:
0x02 - center colon (both dots)
0x04 - left colon - lower dot
0x08 - left colon - upper dot
0x10 - decimal point
If you want a decimal point, call writeDigitNum(location, number, true) which will paint the decimal point.
To draw the colon, use drawColon(true or false)
If you want full control of the segments in all digits, you can call writeDigitRaw(location,bitmask) to draw a raw 8-bit mask (as stored in a uint8_t) to any location.
All the drawing routines only change the display memory kept by the Arduino. Don't forget to call writeDisplay() after drawing to 'save' the memory out to the matrix via I2C.
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#define DS3231_I2C_ADDRESS 0x68
int ldr_sensor = A0; // LDR Photoresistor with 100k Ohm to GND, other leg 5V
int ldr_value = 0; // LDR value - var store value
int brightness_matrix; // LED Matrix brightness - var store value
int threshold_brightness = 100; // Threshold
int blinkrate_value = 0; // LED Matrix blink rate
int delay_matrix_time = 10; // how long display time (20 sec)
int delay_matrix_temp = 1000; // how long display temp (2 sec)
int blinky_dot = 2; // blinks nothing - on the left side 2 single dots
void loop() {
lightBrightness(); // Matrix-Brightness Justierung
matrixBlinkrate(); // Mattrix-Blinkrate Jusitierung
displayTime(); // display the real-time clock data
displayTemp(); // display the temperature
}
void lightBrightness() {
// setBrightness(brighness) - will let you change the overall brightness of the entire display. 0 is least bright, 15 is brightest and is what is initialized by the display when you start
ldr_value = analogRead(ldr_sensor);
Serial.print("LDR: ");
Serial.println(ldr_value);
if (ldr_value <= threshold_brightness) { // measurement of brightness vs Threshold
brightness_matrix = 0; // bright at daylight
}
else {
brightness_matrix = 15; // dark at night
}
}
void matrixBlinkrate() {
// blinkRate(rate) - You can blink the entire display. 0 is no blinking. 1, 2 or 3 is for display blinking.
matrix.blinkRate(blinkrate_value);
}
// how long display time on matrix in seconds
for (uint16_t i = 0; i < delay_matrix_time; i++) {
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
byte se = second;
byte mi = minute;
byte ho = hour;
byte we = dayOfWeek;
byte dm = dayOfMonth;
byte mo = month;
byte ye = year;
if ((dayOfWeek == 1) && (dayOfMonth >= 1)&& (month == 1) && (hour == 0) && (year == 00)) { // Peale reseti on andmed nullis, lugedes väärtusid sisestab uued andmed
setDS3231time(00, 00, 18, we, 01, 01, 01); // siia saab sisestada aja mida hakkab kell käivitades näitama (viimane lahter jäta 01, muidu ühe aasta möödudes käivitub kood uuesti.
// setDS3231time(se, mi, ho, we,dm, mo, ye); // näide
}
/*
Specify 2 for the location and the bits are mapped as follows:
0x02 - center colon (both dots)
0x04 - left colon - lower dot
0x08 - left colon - upper dot
0x10 - decimal point
*/
/* location #2 controls also the left 2 single points like this (=blinky_dot):
2 = blinks nothing
3 = blinks nothing
4 = blinks top left (single upper dot)
5 = blinks top left (single upper dot)
6 = blinks top left (single upper dot) + both Colon in mid
7 = blinks top left (single upper dot) + both Colon in mid
8 = blinks bottom left (single lower dot)
9 = blinks bottom left (single lower dot)
10 = blinks bottom left (single lower dot) + both Colon in mid
11 = blinks bottom left (single lower dot) + both Colon in mid
12 = blinks both Colon (both single dots left) without both Colon in mid
*/
// format hours: _0:mm
if (hour > 9) {
matrix.writeDigitNum(0, (hour / 10), false);
matrix.writeDigitNum(1, (hour % 10), false); // this will write the number (0-9) to a single location by using modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/
} else {
matrix.writeDigitNum(1, hour, false);
}
matrix.writeDigitRaw(2, blinky_dot);
byte temp = get3231Temp();
int abs_temp = abs(temp); // absolute number of a value
matrix.writeDigitNum(1,(abs_temp % 10), false); // position 1, value 9, show decimal)
if (temp < 0) matrix.writeDigitRaw(0,64);
if (temp <= -10) matrix.writeDigitRaw(2,12); // and if the temperature is negative, we plot the minus sign to first place.
if (temp >= 10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
if (temp <= -10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
// matrix.writeDigitRaw(2,0x10); // decimal dot
// displays temperature values on the serial line
Serial.print("Temperatur in C: ");
Serial.println(get3231Temp()); // +/- 3 Grad Celsius
// how long display temp on matrix in seconds
delay(delay_matrix_temp);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year){
// set time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
byte temp = get3231Temp();
int abs_temp = abs(temp); // absolute number of a value
matrix.writeDigitNum(1,(abs_temp % 10), false); // position 1, value 9, show decimal)
if (temp < 0) matrix.writeDigitRaw(0,64);
if (temp <= -10) matrix.writeDigitRaw(2,12); // and if the temperature is negative, we plot the minus sign to first place.
if (temp >= 10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
if (temp <= -10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, value 1, show decimal)
// matrix.writeDigitRaw(2,0x10); // decimal dot
// displays temperature values on the serial line
Serial.print("Temperatur in C: ");
Serial.println(get3231Temp()); // +/- 3 Grad Celsius
// how long display temp on matrix in seconds
delay(delay_matrix_temp);
}
Kas Arduino Serail monitoris tuleb temperatuur ilusti komakohaga?
Kui jah, siis kahtlustan, et seal ülevalpool on rida:
int abs_temp = abs(temp);
Mis teeb int-iks, ehk täisarvuks.
Ma prooviks int asemele double. _________________ Linux - Future "Those Who Sacrifice Liberty For Security Deserve Neither." - Benjamin Franklin 1984 was not supposed to be instruction manual
Kes ennast Arduino peal koduselt tunneb, andke märku
Plaat ise ESP32. Vaja BLE ühendus luua anduriga ning jälgida veel paari sensorit. Ainuke väljund on juhtida pwm´ga LED´i etteantud tingimustel. Eeldan, et tegijale ei tohiks see raketiteadus olla aga endal tekkis tõrkeid millest jagu ei saa.
Teised sensorid va. BLE oma on serialmonitoris kenasti olemas ja toimivad.
Häda selles, et koodi kopeerin sinna arduino softi ümber, ent verify annab tulemuseks seal vea : Arduino: 1.8.13 (Windows 7), Board: "Arduino Uno"
sketch_jul05a:9:10: fatal error: Keypad.h: No such file or directory
#include <Keypad.h>//include library code
^~~~~~~~~~
compilation terminated.
exit status 1
Keypad.h: No such file or directory
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Mis see klaviatuuri tüüp tuleb veel kuidagi eraldi lisada või milles probleem seal? Netis sarnaseid näiteid veel kõik kohad täis ja kõigiga sama error.
Selline klaviatuur on https://www.ebay.com/itm/302785600952?hash=item467f6d9db8:g:ICQAAOSwdoJbM0~D Peaks olema ju tavaline mehhaaniline junn, aga ju siis on sinna koodi siiski vaja veel omakorda mingit allalaetavat juppi, mis teab kuidas nuppudel see lülitus toimub seal? Seal juhendis mingi variant on näidisena, aga mul sellist seal näha ei olnud. Pole kokkupuudet ka mingite lisade laadimisel sinna, vahest mõned korrad olen kopeerinud lihtsalt koodi ja saanud ainult koodi kopeerimisega asjad kenasti tööle, seekord siis vist päris nii lihtsalt ei pääse.
new1, tegelikult seal samal lehel, mille Sa ennest linksid, võiks kõik vajalik olemas olla (st. lingid kohe suht alguses - Attachments: sketch1, sketch2, sketch3 and libraries, pitches.h).
Kui tõesti lihtsalt kopi-paste tegid, siis on Sul veel asju puudu.
tsitaat:
Libraries:
See attachments on the begining of this project description
pitches.h file contains all the pitch values for typical notes. For example, NOTE_C4 is middle C. NOTE_FS4 is F sharp, and so forth. This note table was originally written by Brett Hagman, on whose work the tone() command was based. You may find it useful for whenever you want to make musical notes.File should be in the same directory with sketch.
We have attached the Keypad library but you can also download and install it via the Arduino IDE library manager. If you wanna use our library then download, unzip it and add to libraries in your PC, for example C:\Users\toshiba\Documents\Arduino\libraries or C:\Program Files (x86)\Arduino\libraries. This link you can find in Preferences of Adruino IDE program which installed in your PC.
Keypad library is available via the Arduino IDE library manager. Open Arduino IDE, then Sketch->Include Library->Manage Libraries... Then search for Keypad. Once found, click on its entry and the install button will appear. See more information about this library here.
EEPROM library is integrated inside Arduino IDE. We also attached it here.
Password library we attached too. Download, unzip it and add to libraries in your PC, for example C:\Users\toshiba\Documents\Arduino\libraries or C:\Program Files (x86)\Arduino\libraries. This link you can find in Preferences of Adruino IDE program which installed in your PC.
Proovisin veel jännata sellega, ei õnnestunud endiselt. Proovisin selle näite järgi keypadi lisada https://www.arduino.cc/en/guide/libraries , ütleb et keypad installed, koodis ma mingit muutust ei näinud et oleks toimunud peale seda ja errorid ka samad. Sketch 3 tundub sealt see sobiv kood justkui olema, mismoodi ma siis veel need failid sinna arduino softi saama peaks, kui koodi kopeerimine ei ole õige? Ei tegele sellega igapäevaselt, aruharva nokitsen midagi selle arduinoga, seega suht detailne seletus algajale peaks olema, et asja toimima saaks.
E: Pusisin siin ja nüüd on selline error jäänud
Arduino: 1.8.13 (Windows 7), Board: "Arduino Uno"
sketch_jul14a:5:10: fatal error: Password.h: No such file or directory
#include <Password.h>
^~~~~~~~~~~~
compilation terminated.
exit status 1
Password.h: No such file or directory
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Puusalt tulistades tundub include failide kataloogis on puudu Password.h fail. See viitab - librarite install pole olnud täielik või on sul PATH muutujad sätestamatta või valedel kataloogidel.
Pusisin veel, paras jebla oli ikka täiesti nullist neid puudusi sinna lisada, kui ei tea kuskohast ja kuhu need täpsemalt üldse lisama peab, aega läks aga heaküll tehtud sai, youtuubi õpetused päästsid viimaste errorite osas hädast välja(ei mäletagi täpselt et mismoodi lõppeks pusisin seal). Minu klaviatuuril need pin-id ei klappinud ka sealse olemasolevaga, aga see oli väike mure, neid pinnide järjekordi lihtne seal koodis muuta ja sain paika. Pettumus on muidugi selle piezo funktsiooni osas seal. Nuppudele vajutamise hetkel ta sinna pin-ile korraks pinget peale ei anna, et aru saaks selgelt, et kas nupulevajutus ikka toimis. Kasutan prooviks seal suvalis LED-i ja vilgutama hakkab ta seda ainult siis, kui kood sisestatud ja õige koodi korral siis süttib peale seda korraks kas roheline või vale korral punane led. Algselt proovides seal kui selle serial monitori käima panin, siis tx pinile tekkis hetkeline pinge nupulevajutusega, mõtlesin juba et ok kasutan seda siis nupulevajutuse tuvastamiseks, aga krt kui PC tagant usb-ga lahti ühendada või serialmonitor kinni panna, siis nupulevajutusega seal enam pingeimpulssi ei teki. Oskab keegi koodi veits täiustada või midagi, et saaks iga nupulevajutusega mingile pinile korra pinge peale, mis näitaks indikaatorina, et kas vajutus läks ikka arvesse või mitte?
Ma ei saanud muhvigi aru. Kas sul on väline nupp, et kui vajutab siis paneb teises pinis LED põlema? Või vajutad arvutis nuppu ja siis arvutiekraanil LED imitatsioon põleb.
Muidu kontrolleritel on oluline - kas pin on defineeritud sisendina, väljundina või mõlemad. Need asjad pole nii lihtsad ja peab tehnilist taipu olema. Siin tulevad mängu konkreetsed skeemid ja pull-up takistid. Ei ole nii, et panen pin programmis LED põlema (IO=1) ja on pinge kohe väljundis.
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.