Hírek:

Fontos tudnivalók a migrációval kapcsolatban, kérlek olvasd el:

A régi fórumról áthozott hozzászólásoknál a felhasználó neve adatvédelmi megfontolásokból véletlenszerűen generált értékekre lett  lecserélve. Ez akkor tud a valódi értékre visszaállni, ha az adott felhasználó a régi fórumon nyilatkozik, hogy beleegyezik az adatainak az új fórumra továbbításához, majd ezután itt a régi felhasználónevével és email címével regisztrál.
8~20 óra között, 1~30 percen belül megtörténik a jóváhagyás, 30 percenként ellenőrizd email fiókodat (SPAM-ot is) mindenképp kapsz mail-t, a sikeres regisztrácioról, vagy a hibáról és, hogy mi a teendőd.
Nézd meg  "A régi fórumról, az új fórumra költözés útmutatót."
A régi fórumon használt email címmel de más felhasználói azonosítóval érkező regisztrációs kérelmek törlésre kerűlnek.

Main Menu

Arduino

Indította gaben, 2025 február 03, 18:09

Előző téma - Következő téma

yfpt876di

Megoldodott részlegesen probléma. Nem hagyott a dolog nyugodni, egy másik program szerkezete adta az ötletet. Az ino elindítása után kéri, hogy könyvtáron belül legyen, ez rendben, de a többi alkönyvtárt nem hívja meg, kézzel kel bemásolni. Másolás után elindul, problémát az a francos kijelző okozza, mert a gyári zip, biztosan hibás, mert
könyvárba történő meghívása után, azt mondja, nem tartalmaz megfelelő könyvtárat. Másik könyvárral (16x2) elindul, de egy ponton, amikor a gombokat keresi, elakad, mert ebben nincs gomb definiálva. Most már csak az a kérdés honnan lehet hibátlan OLIMEXINO-328-LCD16x2 könyvtárat letölteni, vagy <LiquidCrystal_I2C.h> re átalakítani .
Még egyszer köszönöm a segítő szándékot.

dezsoe

A zip-nek semmi baja. Csomagold ki valahová, majd találsz benne egy LCD16x2 könyvtárat. Ezt másold be a libraries könyvtáradba. (Nem írtam le külön, de tényleg mókolni kellett vele, mert a zipben nem logikus helyen van.)

Nem biztos, hogy van értelme sok energiát fektetni a program átírásába. (Igaz, továbbra sem néztem még bele, válaszolni is két nap alatt sikerült...) Sok működő és ingyenes ELS projekt van a neten, esetleg érdemes olyanra vadászni, amelyik nem valami speckó alkatrészre épül.

yfpt876di

Köszönöm hogy foglalkoztál vele.[#eljen]

frob

Sziasztok
Nem tudom volt e már, de egy érdekes és egész jó projektet találtam.



kézi tekerentyű cnc vezérléshez, kicsit másképp...

guliver83

Egész jó, meg akarod építeni!

frob

A jövőbeni tervekben sok minden van, talán egyszer majd valami ilyesmi is :D

dyb399nv

Hello!
rp2040 MicroPythonra szeretnék egy kódrészletet átírni arduino c++ rol eben van meg a kész rész!
digitális toloméró kiolvasása a cél MicroPythonban de erre nincs találat sehol sajnos!


#include <Arduino.h>

#define CLOCK_PIN 26
#define DATA_PIN 25

#define BUFFER_SIZE 23
#define DATA_PERIOD_MS 80

uint8_t buff[BUFFER_SIZE];

uint8_t bitPos;
unsigned long lastPeriodMs;

void IRAM_ATTR _CLK_ISR() {
  unsigned long ms = millis();

  if (ms < lastPeriodMs) lastPeriodMs = ms;
  if (ms - lastPeriodMs < DATA_PERIOD_MS) return;

  if (bitPos == BUFFER_SIZE) bitPos = 0;

  if (bitPos < BUFFER_SIZE) {
    buff[bitPos++] = (GPIO.in >> DATA_PIN) & 0x1;
  }

  if (bitPos == BUFFER_SIZE) lastPeriodMs = ms;
}

float getMeasurement() {
  int8_t sign;
  int16_t value;

  sign = buff[20] == 0x1 ? -1 : 1;

  for (uint8_t i; i < BUFFER_SIZE; i++) {
    if (buff[i] == 0x1) {
      value |= 1 << i;
    }
  }

  return (value * sign) / 100.00;
}

bool isValueAvailable() {
  return bitPos == BUFFER_SIZE;
}

void setup() {
  Serial.begin(115200);

  while (!Serial)
    ;

  pinMode(CLOCK_PIN, INPUT);
  pinMode(DATA_PIN, INPUT);

  attachInterrupt(digitalPinToInterrupt(CLOCK_PIN), _CLK_ISR, RISING);
}

unsigned long lastMillis;

void loop() {
  if (isValueAvailable() && (millis() - lastMillis) > 100) {
    Serial.println(getMeasurement());
    lastMillis = millis();
  }
}


robicnc

Nem volt időm, de ezt nézd meg.  (Így lusta ember fegyvere AI)


from machine import Pin
from micropython import const
import time

CLOCK_PIN = const(26)
DATA_PIN = const(25)

BUFFER_SIZE = const(23)
DATA_PERIOD_MS = const(80)

buff = [0] * BUFFER_SIZE

bitPos = 0
lastPeriodMs = 0

def clk_isr(pin):
    global bitPos, lastPeriodMs
    ms = time.ticks_ms()
   
    if time.ticks_diff(ms, lastPeriodMs) < 0:
        lastPeriodMs = ms
   
    if time.ticks_diff(ms, lastPeriodMs) < DATA_PERIOD_MS:
        return

    if bitPos == BUFFER_SIZE:
        bitPos = 0

    if bitPos < BUFFER_SIZE:
        buff[bitPos] = (DATA_PIN.value())
        bitPos += 1

    if bitPos == BUFFER_SIZE:
        lastPeriodMs = ms

def get_measurement():
    sign = -1 if buff[20] == 1 else 1
    value = 0

    for i in range(BUFFER_SIZE):
        if buff[i] == 1:
            value |= (1 << i)

    return (value * sign) / 100.0

def is_value_available():
    return bitPos == BUFFER_SIZE

def setup():
    global CLOCK_PIN, DATA_PIN
    CLOCK_PIN = Pin(CLOCK_PIN, Pin.IN)
    DATA_PIN = Pin(DATA_PIN, Pin.IN)
   
    CLOCK_PIN.irq(trigger=Pin.IRQ_RISING, handler=clk_isr)

setup()
lastMillis = 0

while True:
    if is_value_available() and (time.ticks_diff(time.ticks_ms(), lastMillis) > 100):
        print(get_measurement())
        lastMillis = time.ticks_ms()


robicnc

ha soros rész vacackolna.


import sys
from machine import UART

# Beállítja az UART1-et 115200 baud sebességgel
uart = UART(1, baudrate=115200)

# Rendelje hozzá a UART objektumot a sys.stdout és sys.stdin helyére
sys.stdout = uart
sys.stdin = uart


dyb399nv

Helló
Ott én is küzdöttem vele (AI) de zagyvaság jött ki a mipy fordításkor elakadt mindig![#zavart2]
Köszönöm hogy megnézted![#eljen]

morvfer7

Boldog Karácsonyt mindenkinek!

Így karácsonykor kicsit megállt az élet, sokan a TV előtt, sokan filmeket néznek, nekem már elegem lett belőle és gondoltam most lesz időm megcsinálni amit már rég szerettem volna.

Pár hónapja vettem színes 8x8 ws2812B led mátrixot, amivel egy szivárvány színben meg lehet jeleníteni a pontos időt, dátumot, esetleg kiegészítve hőérzékelő szenzorral, még a hőmérsékletet és páratartalmat is.

Hogy olcsó és pontos legyen az óra, így a jól megszokott NTP szerveres megoldást választottam egy Arduino D1 minivel, de akár kiegészíthető óra modullal is, ha szükséges.

Már 1 darab 8x8 mátrix modullal is jó szerintem, de a jövőben még veszek hozzá és akkor bővítem 40x8 mátrixra.

Ha valaki szeretné megépíteni itt közzé teszem a kódot hozzá, most karácsony alkalmával volt időm összehozni..  :)


// 2024-12-24
// NTP óra wifi managerrel, hh:mm:ss kijelzéssel, D1 mini valamint egy 8x8 WS2812B led mátrix kijelzőn
// Minden egész percben megjeleníti a dátumot is. dd/mm/yyyy formátumban.
// Ha az idő másodperce kisebb mint 7, akkor a dátumot jelenítjük meg, egyébként az időt.
// 8x8 WS2812B mátrix kijelző - D1 mini bekötése - V+-5V, V--GND, IN-D3

#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_GFX.h>

// NTP beállítások
const long utcOffsetInSeconds = 3600;  // UTC+1
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

// WS2812B mátrix beállítása
#define PIN D3  // A D1 mini D3 pinje a vezérléshez
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
  8, 8, PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS,
  NEO_GRB + NEO_KHZ800
);

void setup() {
  Serial.begin(115200);

  // WiFi Manager inicializálása
  WiFiManager wifiManager;
  wifiManager.autoConnect("8x8_Clock");

  // NTP kliens indítása
  timeClient.begin();
  timeClient.setTimeOffset(utcOffsetInSeconds);

  // WS2812B mátrix inicializálása
  matrix.begin();
  matrix.setTextWrap(false);  // Nincs automatikus sortörés
  matrix.setTextSize(1);      // Kisebb betűméret
  matrix.setBrightness(20);   // Halványabb fényerő (20-as érték)

  // LED teszt lefuttatása
  ledTest();

  // Az idő folyamatos frissítése
  timeClient.update();
}

void loop() {
  timeClient.update(); // Frissítjük az időt
 
  int second = timeClient.getSeconds(); // Másodperc lekérdezése
  if (second < 7) {
    displayDate();  // Ha másodperc < 7, dátumot jelenít meg
  } else {
    displayTime();  // Egyébként az időt
  }
}

// LED teszt: Egyesével kapcsolja be a LED-eket szivárvány színnel
void ledTest() {
  matrix.clear();
  for (int i = 0; i < matrix.width() * matrix.height(); i++) {  // 64 LED esetén (8x8 mátrix)
    int x = i % matrix.width();  // Oszlop koordináta
    int y = i / matrix.width();  // Sor koordináta
    matrix.drawPixel(x, y, ColorWheel((i * 4) & 255));  // Szivárvány szín kiszámítása
    matrix.show();
    delay(100);  // 100ms késleltetés minden LED bekapcsolása között
  }
  delay(1000);  // Várakozás a teszt után
  matrix.clear();  // LED mátrix törlése a teszt végén
  matrix.show();
}

void displayTime() {
  String timeString = timeClient.getFormattedTime();
  matrix.clear();

  for (int i = 0; i < timeString.length() * 6 + matrix.width(); i++) {
    matrix.clear();
    for (int j = 0; j < timeString.length(); j++) {
      int x = matrix.width() - i + j * 6;  // A karakterek mozgásának számítása
      if (x < matrix.width()) {
        matrix.setCursor(x, 0);
        matrix.setTextColor(ColorWheel((i + j * 20) & 255));  // Szivárvány szín beállítása
        matrix.print(timeString.charAt(j));
      }
    }
    matrix.show();
    delay(100);  // Sebesség beállítása
  }
}

void displayDate() {
  // Az aktuális dátumot az NTP kliens időbélyegéből képezzük
  time_t rawTime = timeClient.getEpochTime(); // UNIX időbélyeg
  struct tm* timeInfo = localtime(&rawTime);

  // Dátum formázása
  String dateString = String(timeInfo->tm_mday) + "/" +
                      String(timeInfo->tm_mon + 1) + "/" +
                      String(timeInfo->tm_year + 1900);
 
  matrix.clear();
  for (int i = 0; i < dateString.length() * 6 + matrix.width(); i++) {
    matrix.clear();
    for (int j = 0; j < dateString.length(); j++) {
      int x = matrix.width() - i + j * 6;  // A karakterek mozgásának számítása
      if (x < matrix.width()) {
        matrix.setCursor(x, 0);
        matrix.setTextColor(ColorWheel((i + j * 20) & 255));  // Szivárvány szín beállítása
        matrix.print(dateString.charAt(j));
      }
    }
    matrix.show();
    delay(100);  // Sebesség beállítása
  }
}

uint32_t ColorWheel(byte pos) {
  // Szivárvány színek generálása
  if (pos < 85) {
    return matrix.Color(pos * 3, 255 - pos * 3, 0);
  } else if (pos < 170) {
    pos -= 85;
    return matrix.Color(255 - pos * 3, 0, pos * 3);
  } else {
    pos -= 170;
    return matrix.Color(0, pos * 3, 255 - pos * 3);
  }
}

 


Sajnos a videó nem adja vissza a valódi élményt, mivel a telefon kamerájával vettem fel és nagyon lerontja a színeket.




    
Eladó cuccok: webshop.morvaiferenc.hu

svejk


PSoft


szf


szf

Sziasztok!
Abban az esetben , ha egy Arduino UNO alaplapon kereszesztül (MISI-MOSI bekötéssel) töltöm fel a programot egy kopasz Atmega328-ra akkor a pineket hogyan kell deklarálni ? Ami az UNO-n 10,8,11,1,A0,A1,A2,A3 az mielőtt betöltöm az atmegában módosítanom kell valami másra?
Az eredeti program is UNO-ra készült.
Feltöltéskor UNO-t vagy Atmega328-at válasszam ki?
Köszönöm a segítséget!