Hallo,
Reagiert der Fotowiderstand auf eine Led in Tinkercad? Ich muss einen String kabellos von einem Arduino zum anderen schicken.
oben Sender und unten Empfänger

Der Sender schaltet beim Drücken des Knopfes die Leuchtiode ein. Dann wird, indem die Led bei 1 leuchtet und bei 0 nicht leuchtet ein decodierter String übertragen. Der Empfänger sollte dann diese Bits zu Bytes verarbeiten und wieder einen String auf dem seriellen Monitor anzeigen.
Sender:
// Server / Sender
#include<string.h>
const int pin = 4; // Leuchtiode - pin !!!
const int btn_input = 12;
bool allowWrite = false;
char txt[1000];
int txt_len;
String str;
void setup() {
Serial.begin(9600);
pinMode(pin, OUTPUT);
pinMode(btn_input, INPUT);
}
void Decode(int *bit, char character) {
for (int i = 0; i < 8; i++) bit[i] = ((character >> i) & 0x01);
}
void loop() {
if (digitalRead(btn_input) == HIGH) {
//Input des Strings
Serial.print("Gib den String ein (es dauert ein wenig):");
while (Serial.available() == 0) {};
str = Serial.readString();
txt_len = str.length();
str.toCharArray(txt, 1000);
Serial.print(txt);
allowWrite = true;
delay(10);
Serial.println("\nString wird gesendet...");
}
// Knopf gedrückt
if (allowWrite) {
digitalWrite(pin, 1);
for (int i = 0; i < txt_len; i++) {
char byte = txt[i];
int bits[8];
Decode(bits, byte);
for (int x = 0; x < 8; x++) {
digitalWrite(pin, bits[x]);
delay(10);
}
}
// am ende wird vom sender 111111 und noch 0 gesendet
for (int z = 0; z < 7; z++) {
digitalWrite(pin, 1);
delay(10);
}
digitalWrite(pin, 0);
allowWrite = false;
}
}
Empfänger:
// Client / Empfänger
int start_signal = false;
void setup(){
Serial.begin(9600);
//pinMode(btn_input, INPUT);
}
char Encode(int b[8]){
unsigned char c = 0;
for (int i = 0; i < 8; ++i)
if (b[i] == 1)
c |= 1 << i;
return c;
}
void loop(){
if ((analogRead(A0) > 100) && (start_signal == false)){
start_signal = true;
delay(2);
}
if (start_signal == true){
int bits[9];
for (int x = 0; x < 8; x++){
if (analogRead(A0) > 100){
bits[x] = 1;
} else {
bits[x] = 0;
}
delay(10);
}
//ende-überprüfung: am ende wird vom sender 111111 gesendet und dann noch eine 0
if (bits[0] == 1 && bits[1] == 1 && bits[2] == 1 && bits[3] == 1 && bits[4] == 1 && bits[5] == 1 && bits[6] == 1) {
start_signal = false;
}
char c = Encode(bits);
Serial.print(c);
}
}
Bis jetzt hat die Übertragung mit Kabel funktioniert, die kabellose jedoch nicht.