Hey Leute,
Ich habe ein problem (wer hätts gedacht...)
Ich bin zurzeit dabei ein Ferngesteuertes Auto zu bauen, dafür nutze ich ein Arduino Uno. Weil das Auto aber viele Funktionen haben solle wurde der Code dementsprechend lang und das delay im Programm wurde immer größer, darum wurde ich auf die Idee gebracht das Programm zu unterteilen und den Arduino Uno als haupt-IC zu nutzen, um die Signale vom Handy zu empfangen und die einzelnen Programme auf mehrere Attiny85 zu verteilen.
So und da liegt auch schon mein Problem...
Wie bekomme ich die Daten vom UNO auf den Attiny85, ich habe dazu schon nh menge im Internet gesucht, bin aber irgendwie nicht weitergekommen bzw. ich habs nicht gecheckt, weil ich ein blutiger Anfänger von Arduino bin.
Darum bitte ich um Hilfe welchen Weg man gehen muss.
Danke schonmal im Vorraus
Struppi
Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.
Nutze bei beiden SoftwareSerial, beim ATtiny85 nur RX initialisieren.
Vermutlich ist dies aber der falsche Weg.
Na prima, das liest sich doch sehr interessant.
Nur wie sollen wir helfen, wenn wir deinen Sketch und deine übrige Hardware nicht kennen.
Im übrigen solltest du delays vermeiden, dann funktioniert sicher auch dein Sketch.
Den bitte in Code-Tags posten.
Dafür braucht es keine Tinys.
Rein die delays() ersetzen durch nicht blockierende Zeiten - fertig.
Genau, da es mehrere ATtiny85 sein sollen, wäre I2C besser.
Aber dennoch sollte der Sketch erst mal optimiert werden. Evtl. reicht das dann.
Da ist ja das Problem ich hab noch nicht mal einen Code...
Mir fehlt leider das Grundwissen, deshalb habe ich mich an euch gewendet
Das widerspricht dem:
Aha....ohne Sketch. Und wie kommst du dann darauf ?
Wir haben deine Hardware nicht.
Da musst du uns schon ein wenig liefern, damit wir dir helfen können.
achso das programm...
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP8266_HARDSERIAL_POINT
#include <RemoteXY.h>
// RemoteXY connection settings
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_WIFI_SSID "LKW"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,9,0,0,0,142,0,13,8,0,
5,32,59,5,34,34,2,26,31,2,
1,65,49,22,11,2,26,31,31,65,
110,0,65,117,115,0,2,1,13,49,
22,11,2,26,31,31,65,110,0,65,
117,115,0,1,1,6,7,12,12,2,
31,76,0,1,1,34,7,12,12,2,
31,82,0,1,0,20,7,12,12,10,
31,0,1,0,12,25,12,12,120,31,
72,117,112,101,0,1,0,29,25,12,
12,37,31,87,97,114,110,98,108,105,
110,107,101,114,0,129,0,18,44,10,
4,17,76,105,99,104,116,0,129,0,
63,44,29,4,17,65,98,115,116,97,
110,100,115,114,97,100,97,114,0 };
// this structure defines all the variables and events of your control interface
struct {
// input variables
int8_t joystick_1_x; // =-100..100 x-coordinate joystick position
int8_t joystick_1_y; // =-100..100 y-coordinate joystick position
uint8_t switch_1; // =1 if switch ON and =0 if OFF
uint8_t switch_2; // =1 if switch ON and =0 if OFF
uint8_t button_1; // =1 if button pressed, else =0
uint8_t button_2; // =1 if button pressed, else =0
uint8_t button_3; // =1 if button pressed, else =0
uint8_t button_4; // =1 if button pressed, else =0
uint8_t button_5; // =1 if button pressed, else =0
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#include <Servo.h>
unsigned long previousMillis = 0;
const long Blinkdauer = 1000;
bool Linksmerken = false;
bool Rechtsmerken = false;
bool Warnmerken = false;
bool vorher = false;
unsigned long fruher;
unsigned long jetzt=0;
Servo lenkung;
void setup()
{
RemoteXY_Init ();
// TODO you setup code
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
lenkung.attach(8);
}
void loop()
{
RemoteXY_Handler ();
// TODO you loop code
// use the RemoteXY structure for data transfer
// do not call delay()
int Hupe = RemoteXY.button_4;
if (Hupe==1)
{analogWrite(3,20);}
else {digitalWrite(3,LOW);}
int licht = RemoteXY.switch_2;
if(licht==1)
{analogWrite(12,255);
analogWrite(11,255);
analogWrite(10,255);
analogWrite(9,255);}
else
{analogWrite(12,0);
analogWrite(11,0);
analogWrite(10,0);
analogWrite(9,0);}
if (RemoteXY.button_3)
{Linksmerken = false;
Rechtsmerken =false;
Warnmerken=false;}
//digitalWrite(10,LOW);
//digitalWrite(9,LOW);}
int Links=RemoteXY.button_1;
int Rechts=RemoteXY.button_2;
int Warn=RemoteXY.button_5;
if (Links==1)
{Linksmerken=true;
Rechtsmerken=false;
Warnmerken=false;}
if (Rechts==1)
{Rechtsmerken=true;
Linksmerken=false;
Warnmerken=false;}
if (Warn==1)
{Warnmerken=true;
Linksmerken=false;
Rechtsmerken=false;}
if (Linksmerken==true)
{digitalWrite(9,LOW);
unsigned long jetzt=millis();
if (jetzt-fruher>=200)
{fruher=jetzt;
if (vorher==true)
{vorher=false;
digitalWrite(10,LOW);}
else
{vorher=true;
digitalWrite(10,HIGH);}}}
//else{digitalWrite(10,LOW);}
if (Rechtsmerken==true)
{digitalWrite(10,LOW);
unsigned long jetzt=millis();
if (jetzt-fruher>=200)
{fruher=jetzt;
if (vorher==true)
{vorher=false;
digitalWrite(9,LOW);}
else
{vorher=true;
digitalWrite(9,HIGH);}}}
else{digitalWrite(9,LOW);}
if (Warnmerken==true)
{unsigned long jetzt=millis();
if (jetzt-fruher>=300)
{fruher=jetzt;
if (vorher==true)
{vorher=false;
digitalWrite(10,LOW);
digitalWrite(9,LOW);}
else
{vorher=true;
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);}}}
else
{digitalWrite(10,LOW);
digitalWrite(9,LOW);}
if (Warnmerken==false){if (Linksmerken==false){if (Rechtsmerken==false){digitalWrite(10,LOW);digitalWrite(9,LOW);}}}
int posx=RemoteXY.joystick_1_x;
lenkung.write((posx+100)*0.4125);
}
´´´
aber von dieser lösung habe ich mich inzwischen verabschiedet
Ich nutze den Arduino Uno
den ESP8266
und die Library Remotexy um eine Verbindung mit dem Handy herzustellen
Dann hilft uns das auch nicht weiter.
Und was machst du mit dem ESP8266, da sehe ich im Sketch nichts.
Zudem geht es auch um die Servos und Motoren, die sicher nicht alle so rumliegen haben.
Das ist kein delay() drin - das Ding rennt nur durch.
Irgendwas fehlt.
Den esp muss ich nicht programmieren das macht RemoteXY für mich...
ABER ich habe hier parallel noch rumprobiert und hab es jetzt hinbekommen!!!
Master Programm:
#include <Wire.h>
void setup() {
// put your setup code here, to run once:
Wire.begin();
pinMode(9,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
char x=digitalRead(9);
Serial.println(x);
Wire.beginTransmission(9);
Wire.write(x);
Wire.endTransmission();
delay(500);
}
Slave Programm:
#include "TinyWireS.h"
void setup() {
// put your setup code here, to run once:
TinyWireS.begin(9);
pinMode(1,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
byte wert=TinyWireS.receive();
if (wert==HIGH)
{digitalWrite(1,HIGH);}
else
{digitalWrite(1,LOW);}
}
Das ist jetzt natürlich nur ein Test mit nem Knopf und einer LED
Tut mir leid falls ich jetzt irgendwie unnütz eure Zeit verschwendet habe.
Es war trotzdem schön zusehen das es noch Menschen gibt die einem Helfen wenn man ein Problem hat.
Vielen Dank und einen schönen Abend noch
PS: falls im laufe der Zeit noch ein Problem auftritt, würde ich gern auf euch zurückkomenn
MfG euer Struppi
Schön, wenn es jetzt funktioniert.
Aber warum packst du es nicht in Code-Tags. Das konntest du doch beim ersten Sketch auch.
sorry habs verkackt
Das kannst du noch nachträglich machen.
Sketch markieren und die Schaltfläche </> klicken.
Eine Frage habe ich tatsächlich noch...
ich habe im Internet oft gelesen, dass an die SCL und SDA Leitung noch Pull-up Resistoren müssen. Bei mir klappt das aber auch ohne.
Sind die nun wichtig oder nicht???
Ohne geht es nicht!
Manche Hardware (Mega2560) hat die schon drauf oder verwendet im µC vorhandene. Auch LevelShifter können welche haben. Manchmal sind die aber zu groß, dann benötigt man zusätzlich externe.