Styra en Arduino med en annan?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10674
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Styra en Arduino med en annan?

Inlägg av GeekJoan »

Håller på med IR fjärr och "neopixel slingor", och det dummar sig. Efter att ha läst lite så verkar det som just denna kombo stör varandra. Så jag tänkte ok, då tar jag väl bara en Arduino och kopplar IR piren på den och så får den styra de andra Arduinon'na som har "neopixlarna" på sig.

Behöver jag sätta motstånd och grejer mellan eller är det bara koppla ihop?
3a.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Hobbyisten
Gått bort
Inlägg: 2531
Blev medlem: 3 december 2017, 22:55:25

Re: Styra en Arduino med en annan?

Inlägg av Hobbyisten »

Jag tror inte du kan styra med en analog INGÅNG från IR-Arduinon. Vill du bara switcha korten med LED-slingorna kanske det går bra med GPIO-stiften på respektive arduino ?
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10674
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

Att det skulle vara exakt en av de analoga portarna var mer en slump på bilden. Men i teorin så borde jag kunna skicka ut 1V på A1 och om det är 1V på A1 på nästa kort som läser av det så borde det kunna representera blå färg. A2 -> 2V röd, etc ?

Har massor med digitala portar över. Så lättare kanske är att sätta 0/1 på några av dom.

Men frågan kvarstår, behöver jag sätta motstånd i mellan eller är det bara köra kabel rakt över?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

Det Arduino kallar analoga ingångar kan även användas till digital ut- eller insignal, även i Arduino-miljö.

Annars går det väl att direkt koppla en utgång till en eller flera ingångar. Ett par 100 ohm serieresistans mellan enheterna skadar inte om man "råkar" koppla utgång mot utgång. Du skall däremot inte koppla ihop +5V pinnarna om enheterna har varsin matning, det räcker med GND. Vad är det för IR-grunka du har? Tar emot från en fjärrkontroll, eller?
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: Styra en Arduino med en annan?

Inlägg av JanErik »

Kan ju sätta upp en som I2C master och resten som slave; https://www.arduino.cc/en/Tutorial/MasterWriter . Då kan de addresseras separat.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Styra en Arduino med en annan?

Inlägg av Krille Krokodil »

Det ser ut som det skulle finnas tid att hantera båda om man stukar om lite i koderna. IR-ingången ska läsas av var 50 us och en Neopixelsändning tar 24*1.25 us.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

Men det hjälper ju inte om IR-avläsningen tar mer än 50 us, då får ju neo-pixel-kedjorna en reset och plockar det värde de råkar ha för stunden, som egentligen skulle ha skiftats vidare. "Stuka om lite i koderna" är nog inte aktuellt för gemene Arduino-användare, de använder färdiga "bibliotek" av varierande kvalitet. Gå in och rota i dem är nog inte aktuellt (om inte någon annan gör det). Men visst, det går nog att få en ATMega att göra alla tre jobb, men troligen inte med Arduino-bibliotek.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Styra en Arduino med en annan?

Inlägg av jah »

Använde serieporten och skicka över koderna där istället.
TXD på IR-mastern --> RXD på båda LED-drivarna.
Överföringen sker asynkront i bakgrunden, och lär knappast störa LED-drivningen.

/J
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10674
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

Problemet är att jag har gjort två skyltar varav detta är den ena:
swing.jpg
Det skulle bara blinka - - X - - - X - - - X som ett rinnande ljus. Fine, inga problem. För att inte stressa varken power supply eller behöva dra massa kablar mellan dessa så gjorde jag två helt separata lösningar en för varje skylt. Men nu ska dom så klart ändra och vill göra detta med fjärrkontroll. Eftersom fjärren funkar bra ibland, ibland inte om det är snabba grejer som händer, så kan jag inte förlita mig på detta eftersom båda skyltarna ska vara synkade.
Därför behöver jag ha en enhet som tar emot signalen och skickar den vidare till de två arduinos som blippar med skyltarna.

Fjärren är en sån här enkel grej: Kjell&Company: 87895

Kod: Markera allt

#include <FastLED.h>
#include <IRremote.h>

// Define the array of leds
#define LED_DT 6  // Ledstrip data pin
#define COLOR_ORDER GRB
#define LED_TYPE WS2812
#define NUM_LEDS 30
uint8_t max_bright = 255;
struct CRGB leds[NUM_LEDS];
int IR_PIN = 12; // IR sensor data pin
int button = 1;
int k;
int RED = 255;
int GREEN = 255;
int BLUE = 50;

IRrecv irDetect(IR_PIN);  //IR sensor
decode_results irIn;       //IR sensor

void setLEDs (int K, int N) {
  FastLED.clear();
  for (int i = 0; i < NUM_LEDS; i++) {
    if (i % N == K) leds[i].setRGB (RED, GREEN, BLUE); // set red LED
  }
  FastLED.show();
}

void decodeIR() // Indicate what key is pressed
{
  switch(irIn.value)
  {
  case 0xFF6897:  // Knapp 1 - Theater chase
  button=1;
    break;

  case 0xFF9867:  
    button=2;
    break;

  case 0xFFB04F:  
    button=3;
    break;
  
  case 0xFF30CF:  
    button=4; 
    break;

  case 0xFF629D:  
    if(button <= 3){
      button = button + 1; 
    }
    break;

  case 0xFFA857:  
    if(button >= 2){
      button = button - 1; 
    }
    break;
  }
}

void setup() {
  Serial.begin(9600);
   irDetect.enableIRIn(); // Start the Receiver
  delay (1000);
  LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(max_bright);
}

void loop() {

  if (irDetect.decode(&irIn)) {
    decodeIR();
    irDetect.resume();     
  }
  

  if (button==1){
   for  (int i = 0; i < 3; i++) {
      FastLED.setBrightness(max_bright);  
      setLEDs (i, 3);
      delay (200);
    }
      if (irDetect.decode(&irIn)) {
        decodeIR();
        irDetect.resume();     
      }      
    Serial.println("1"); 
  }
  if (button==2){
    //for  (int i = 0; i < 4; i++) {
    //  setLEDs (i, 4);
    //  delay (200);      
    //}
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i].setRGB (RED, GREEN, BLUE); // set red LED
    
    }
      if (irDetect.decode(&irIn)) {
        decodeIR();
        irDetect.resume();     
      }      
    FastLED.setBrightness(max_bright);  
    FastLED.show();
    delay (100);
    Serial.println("2"); 
  }

  if (button==3){
     for(int j = 0; j < 12; j++)
    {
      if(j==0){
        k = 0;
      }
      if(j==1){
        k = 0;
      }
      if(j==2){
        k = 0;
      }
      if(j==3){
        k = 0;
      }
      if(j==4){
        k = 0;
      }
      if(j==5){
        k = 50;
      }
      if(j==6){
        k = 150;
      }
      if(j==7){
        k = 255;
      }
      if(j==8){
        k = 150;
      }
      if(j==9){
        k = 50;
      }
      if(j==10){
        k = 0;
      }
      if(j==11){
        delay(3000);
      }
      
      for (int i = 0; i < NUM_LEDS; i++) {
        leds[i].setRGB (RED, GREEN, BLUE); // set red LED
      }
      if (irDetect.decode(&irIn)) {
        decodeIR();
        irDetect.resume();     
      }      
      

      FastLED.setBrightness(k);  
      FastLED.show();
      delay(75);
    
    Serial.println("3"); 
  }
  
  }
  if (button==4){
   for  (int i = 0; i < 3; i++) {
      FastLED.setBrightness(255);  
      setLEDs (i, 3);

      if (irDetect.decode(&irIn)) {
        decodeIR();
        irDetect.resume();     
      } 
      delay (45);
    }
     
    Serial.println("4"); 
  }
  
}

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

Ok. Så du behöver bara säga "nu". Då är det totalt overkill med I2C eller UART. Det räcker att sätta en pinne hög eller låg för att berätta när "nu" är. Men skippa att koppla ihop +5V, annars kommer de tre spänningsregulatorerna bara att bråka med varandra. Men gemensam GND behövs.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Styra en Arduino med en annan?

Inlägg av Krille Krokodil »

Neopixeln har en 50 us paus mellan varje sändning så där finns tid för att behandla IR-datan i hudloopen, bara läsningen av
IR-pinnen skulle då ske med ske med 50 us interrupt och utanför Neopixel-burstarna på 30 us.

Kod: Markera allt

#ifdef IR_TIMER_USE_ESP32
void IRTimer()
#else
ISR (TIMER_INTR_NAME)
#endif
{
// Read if IR Receiver -> SPACE [xmt LED off] or a MARK [xmt LED on]
	// digitalRead() is very slow. Optimisation is possible, but makes the code unportable
	uint8_t  irdata = (uint8_t)digitalRead(irparams.recvpin);
[...]
https://github.com/z3t0/Arduino-IRremot ... remote.cpp
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

Neo-pixel skall ha en 50us paus efter att HELA sekvensen har sänts, då uppdateras varje pixel, får den det innan så blir det bajs. IR-mottagning handlar inte om att läsa en pinne utan att mäta tidsavstånd mellan ett antal pin-förändringar. Som Neo-pixel fast tvärt om, att läsa istället för att skriva.
JanErik
Inlägg: 3118
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: Styra en Arduino med en annan?

Inlägg av JanErik »

GeekJoan: är du involverad i swingdanskretsar?
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Styra en Arduino med en annan?

Inlägg av Krille Krokodil »

"Swinger" står där väl. :D

@snigelen: Du har rätt, jag hade missat att bursten är för alla LED:sen. Och då måste IR-läsningen ligga i Neopixel-interruptet, det är betydligt kladdigare att få till.

IR-pinnen behöver bara läsas var 50 us, man har ingen nytta av att tolka den informationen under tiden Neopixeln uppdateras. Så de avläsningarna kan man lagra i en bitbuffert och berarbeta i efterhand, det är en väldigt liten modifikation på den existerande IR-hanteraren. Timingen i den koden kommer enbart från att den förutsätter att pinner blir avläst med 50 us intervall, så även om den får processa en bitbuffert indirekt free-running så kommer mätningen av tidsavstånden bli korrekt.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10674
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

Det är deras logga:
atomic.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar